diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/404.html b/404.html new file mode 100644 index 000000000..bfc634b9a --- /dev/null +++ b/404.html @@ -0,0 +1,140 @@ +#error-wrap { + display: flex; + justify-content: center; + width: 100%; + margin-top: 1rem; + position: relative; +maxWidth768() +} +#error-wrap .error-content { + box-shadow: none !important; + border-radius: 12px; + background: var(--anzhiyu-card-bg) !important; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + margin: 0px 1rem; + height: 22rem; + max-width: 800px; + border-radius: 5px; + background: var(--anzhiyu-card-bg); + box-shadow: var(--card-box-shadow); + transition: all 0.3s ease 0s; + border: var(--style-border-always); + position: relative; + width: 100%; +maxWidth768() +} +#error-wrap .error-content .error-img { + flex: 1 1 0%; + height: 90%; + width: 600px; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; + background-color: #307af6; + background-position: center center; + background-size: cover; + height: 100%; +maxWidth768() +} +#error-wrap .error-content .error-info { + flex: 1 1 0%; + padding: 0.5rem; + text-align: center; + font-size: 14px; + font-family: $font-family; +maxWidth768() +} +#error-wrap .error-content .error-info .error_title { + font-size: 9em; + line-height: 1; +maxWidth768() +} +#error-wrap .error-content .error-info .error_subtitle { + word-break: break-word; + font-size: 1.6em; + -webkit-line-clamp: 2; +} +#error-wrap .error-content .error-info a { + display: inline-block; + margin-top: 0.5rem; + padding: 0.3rem 1.5rem; + background: var(--btn-bg); + color: var(--btn-color); +} +#error-wrap .error-content .error-info a i { + padding-right: 0.3rem; +} +.button--animated { + border-radius: 8px !important; + transition: 0.3s; + position: relative; + z-index: 1; + transition: color 1s ease 0s; +} +#body-wrap .error-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 1rem; + padding-top: 0px; + position: relative; +} +#body-wrap .error-box .aside-list { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + margin: 1rem; + max-width: 100%; +maxWidth768() +} +#body-wrap .error-box .aside-list .aside-list-group { + display: flex; + flex-direction: row; + flex-wrap: wrap; + max-width: 800px; + margin: 0 auto; + justify-content: space-between; +} +#body-wrap .error-box .aside-list .aside-list-item { + padding: 0.5rem 0; + width: 49%; +} +#body-wrap .error-box .aside-list .aside-list-item .thumbnail { + overflow: hidden; + width: 100%; + height: 200px; + background: var(--anzhiyu-card-bg); + display: flex; + border-radius: 12px; +maxWidth768() +} +#body-wrap .error-box .aside-list .aside-list-item img { + width: 100%; + object-fit: cover; + border-radius: 12px; + transition: 0.3s; + transition: filter 300ms ease-in 0.2s, transform 0.6s; +} +#body-wrap .error-box .aside-list .aside-list-item:hover img { + transform: scale(1.1); + filter: brightness(0.82); +} +#body-wrap .error-box .aside-list .aside-list-item .content .title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + justify-content: center; + align-items: flex-end; + align-content: center; + padding-top: 0.5rem; + font-size: 16px; + font-weight: bold; +} +#body-wrap .error-box .aside-list .aside-list-item .content time { + display: none; +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..3b7b82d0d --- /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/LICENSE_CN b/LICENSE_CN new file mode 100644 index 000000000..fc5638bfb --- /dev/null +++ b/LICENSE_CN @@ -0,0 +1,109 @@ +知识共享组织(“Creative Commons”,“知识共享”) 不是一家律师事务所,也不对外提供法律服务或建议。提供知识共享公共许可协议(Creative Commons Public License,以下缩写为CCPL)并不导致“律师—当事人”关系或其他法律关系的建立。知识共享(Creative Commons)按其现状提供协议文本和相关信息。知识共享(Creative Commons)对于其许可协议,或通过该协议提供的作品(material)或相关信息不提供任何担保,在最大可能程度内,也不对因使用其协议或通过该协议提供的作品(material)或信息而造成的损失承担损害赔偿责任。 + +知识共享公共许可协议(CCPL)的使用 + +知识共享公共许可协议(CCPL)提供一套标准化的条款供作者或其他权利人使用,以便他们分享其原创作品(original works of authorship)和其他受著作权和以下公共许可协议中提及的其他特定权利保护的作品(material)。以下考虑因素仅供参考,并未列举穷尽,也不属于本公共许可协议文本的一部分。 + +许可人应当考虑的因素: 知识共享(Creative Commons)公共许可协议是供那些有权许可公众以著作权或其他特定权利所保护的方式使用其作品(material)的权利人使用的。知识共享(Creative Commons)协议不可撤销。因此,在采用协议前,许可人应当阅读并理解其所选择的协议条款。许可人亦应确保其享有所授予公众的权利,以便公众能够顺利的使用授权作品(material)。许可人应当清楚地注明协议所不适用的作品(material),包括其他采用知识共享协议授权的作品(material),或基于著作权的例外或限制而使用的作品(material)。许可人应该考虑的其他因素 + + +公众应当考虑的因素: 许可人通过使用知识共享(Creative Commons)协议,授权公众依据特定的条款和条件使用授权作品(Licensed Material)。如果因为任何原因不需要授权即可使用该作品(material)——例如基于著作权的例外或限制——那么该使用并不受本协议约束。许可人通过知识共享(Creative Commons)协议只能授予基于著作权或其他特定权利有权授予的许可。使用授权作品(Licensed Material)可能还受到其他情形的限制,包括第三方对该作品(material)所享有的著作权或其他权利。许可人可能做出其他特别要求,比如要求使用者标注或说明对作品(material)的所有更改。即使本协议没有要求,知识共享(Creative Commons)仍然鼓励您遵守许可人的合理要求。 公众应当考虑的其他因素 + + +知识共享 (Creative Commons) 署名—相同方式共享 4.0公共许可协议国际版 +通过行使本协议所授予的权利(定义如下),您接受并同意受到知识共享(Creative Commons)署名—相同方式共享4.0国际公共许可协议(以下简称“本公共许可协议”)的约束。从合同解释的角度来看,您获得授权的对价是接受本协议的条款,许可人授予您这些权利的对价是可以通过采用本协议条款发布授权作品(material)而获得利益。 + +第一条 定义 + +演绎作品(Adapted Material): 指受到著作权与类似权利保护的,基于授权作品(Licensed Material)而创作的作品(material),例如对授权作品(Licensed Material)的翻译、改编、编排、改写或其他依据著作权与类似权利需要获得所有人许可的修改。为本公共许可协议之目的,当授权作品(Licensed Material)为音乐作品、表演或录音时,将其依时间序列关系与动态影像配合一致而形成的作品,视为演绎作品(Adapted Material)。 +演绎作者的许可: 指您依据本公共许可协议对在演绎作品(Adapted Material)中自己所贡献的部分所享有的著作权与类似权利进行授权的协议。 +署名—相同方式共享兼容协议: 指在 creativecommons.org/compatiblelicenses 上列出且经知识共享组织(Creative Commons)认可、实质上与本公共许可协议相当的协议。 +著作权与类似权利: 指著作权和/或与著作权紧密联系的类似权利。类似权利包括但不限于:表演者权、广播组织权、录音录像制作者权、以及数据库特别权利,而不论上述权利的定义和归类如何。为本公共许可协议之目的, 第二条b款第(1)项与第(2)项 所列权利不属于著作权与类似权利。 +有效的技术措施: 指根据各司法管辖区遵循《世界知识产权组织版权条约》(1996年12月20日通过)第十一条或类似国际协定项下的义务所制定的法律,在没有适当的授权的情况下,禁止使用者规避的技术措施。 +例外与限制: 指合理使用(Fair Dealing and Fair Use)和/或其他适用于您对授权作品(Licensed Material)的使用的著作权与类似权利的例外或限制。 +授权要素: 指知识共享公共许可协议(CCPL)名称中所包含的协议特征。本公共许可协议的授权要素包括:署名和相同方式共享。 +授权作品(Licensed Material): 指许可人通过本公共许可协议授权的文学、艺术作品(artistic or literary work),数据库或其他作品(material)。 +协议所授予的权利: 指依据本公共许可协议的条款和条件所授予您的各项权利,限于适用于您对授权作品(Licensed Material)的使用且许可人有权许可的著作权与类似权利。 +许可人: 指通过本公共许可协议进行授权的个人或组织。 +分享: 指以需要“协议所授予的权利”许可的任何方法或程序向公众提供作品(material),包括复制、公共展示、公开表演、发行、散布、传播、进口或提供作品(material)给公众以便其能在其选定的时间和地点接收作品(material)。 +数据库特别权利: 指除了著作权之外,衍生于1996年3月11日通过的《欧洲议会与欧盟理事会关于数据库法律保护的指令》(Directive 96/9/EC)及其修改或后续版本的权利,或其他国家或地区本质上与之等同的权利。 +您: 指依据本公共许可协议行使其所获得授予之权利的个人或机构。 “您的” 有相应的含义。 +第二条 授权范围 + +授权 +根据本公共许可协议的条款,许可人授予您在全球范围内,免费的、不可再许可、非独占、不可撤销的许可,以对授权作品(Licensed Material)行使以下“协议所授予的权利”: +复制和分享授权作品(Licensed Material)的全部或部分;以及 +创作、复制和分享演绎作品(Adapted Material)。 +例外和限制 为避免疑义,若著作权的例外和限制适用于您对授权作品(Licensed Material)的使用,本公共许可协议将不适用,您也无须遵守本公共许可协议之条款。 +期限 本公共许可协议的期限规定于第六条 a 款。 +媒介和形式;允许的技术修改 许可人授权您在任何媒介以任何形式(不论目前已知的或未来出现的)行使本协议授予的权利,并为之进行必要的技术修改。许可人放弃和/或同意不主张任何权利以阻止您为了行使协议项下权利进行必要的技术修改,包括为规避有效技术措施所必须的技术修改。为了本公共许可协议之目的, 基于第二条a款第(4)项 进行的技术修改不构成演绎作品(Adapted Material)。 +后续接受者 +来自许可人的要约——授权作品(Licensed Material) 本授权作品(Licensed Material)的每一个后续接受者都自动取得许可人的要约,以按照本公共许可协议的条款行使协议授予的权利。 +来自许可人的额外要约——演绎作品(Adapted Material) 您基于授权作品(Licensed Material)创作的演绎作品(Adapted Material)的每一个后续接受者都自动取得许可人的要约,以按照您所适用的“演绎作者的许可”协议的条款行使协议所授予的权利。 +禁止下游限制 若会限制授权作品(Licensed Material)后续接受者行使本协议所授予的权利,则您不得对授权作品(Licensed Material)提出或增加任何额外的或不同的条款,或使用任何有效技术措施。 +并非背书 本公共许可协议不构成、或不得被解释为允许您声明或主张:您或您对授权作品(Licensed Material)的使用与许可人或 第三条a款第(1)项(A)目(i)所规定要求提供署名的权利人相关联,或得到其赞助、同意或被授予正式地位。 +其他权利 + +依据本公共许可协议,著作人身权,例如保护作品完整权、形象权、隐私权或其他类似的人格权利,不在许可范围内。但是,在条件允许的情况下,许可人可以在必要范围内放弃和/或同意不主张其权利,以便您行使本协议所授予的权利。 +本公共许可协议不适用于任何专利权或商标权许可。 +在自愿的或可放弃的法定或强制许可机制下,许可人在最大可能范围内放弃对您因行使本协议所授予的权利而产生的使用费的权利,不论是直接收取或通过集体管理组织收取。在其他任何情况下,许可人明确保留收取使用费的任何权利。 +第三条 授权条件 + +您行使被许可的权利明确受以下条件限制: + +署名 + +若您分享本授权作品(Licensed Material)(包含修改格式),您必须: + +保留如下标识(如果许可人提供授权作品(Licensed Material)的同时提供如下标识): +以许可人要求的任何合理方式,标识本授权作品(Licensed Material)创作者和其他被指定署名的人的身份(包括指定的笔名); +著作权声明; +有关本公共许可协议的声明; +有关免责的声明; +在合理可行情况下,本授权作品(Licensed Material)的网址(URI)或超链接; +表明您是否修改本授权作品(Licensed Material)及保留任何先前修改的标记;及 +表明授权作品(Licensed Material)依据本公共许可协议授权,并提供本公共许可协议全文,或者本公共许可协议的网址(URI)或超链接。 +依据您分享本授权作品(Licensed Material)的媒介、方法及情況,您可以采用任何合理方式满足第三条a款第(1)项的条件 。 例如,提供包含所要求信息来源的网址(URI)或超链接可算是合理地满足此处的条件。 +如果许可人要求,您必须在合理可行的范围内移除第三条a款第(1)项(A)目 所要求的任何信息。 +相同方式共享 +除第三条a款的条件外,如果您分享您创作的演绎作品(Adapted Material),则下列条件也适用: + +您适用的“演绎作者的许可”协议必须是与本许可协议具有相同授权要素的知识共享(Creative Commons)许可协议(可以是本版本或后续版本),或者其他与“署名-相同方式共享”协议兼容的许可协议。 +您必须提供您适用的“演绎作者的许可”协议全文或者该许可协议的网址(URI)或超链接。依据您分享您的演绎作品(Adapted Material)所使用的媒介、方法及情況,您可以采用任何合理方式满足此条件。 +您不得提出或施加任何附加或不同的条款或条件、或在演绎作品(Adapted Material)上应用任何有效的技术措施,以限制使用者行使依您所适用的“演绎作者的许可”协议所授予的权利。 +第四条 数据库特别权利 + +当协议所授予的权利包含数据库特别权利,而该数据库特别权利适用于您对授权作品(Licensed Material)的使用时: + +为避免疑义, 第二条a款第(1) 项授权您,摘录、再利用、复制和分享全部或绝大部分数据库资料; +如果您将数据库资料的全部或绝大部分纳入您享有数据库特别权利的另一数据库,则您享有数据库特别权利的该数据库(而非其中的单个内容)视为演绎作品(Adapted Material),适用第三条b款的要求; +如果您分享全部或大部分该数据库的资料,您必须遵守 第三条a款 规定的条件。 +为避免疑义,当协议所授予的权利包含其他著作权与类似权利时,第四条补充且不取代本公共许可协议所规定的您的义务。 +第五条 免责声明及责任限制条款 + +除非许可人另有保证,否则在最大可能范围内,许可人按其现状和现有之基础提供授权作品(Licensed Material),且没有就授权作品(Licensed Material)做出任何形式的陈述或保证:无论明示、默示、法定或其他形式,包括但不限于任何有关本授权作品(Licensed Material)的权属保证、可交易性、适于特定目的、未侵害他人权利、没有潜在或其他瑕疵、精确性或是否有错误,不管是否已知或可发现。当免责声明全部或部分不被允许时,此免责声明可能不适用于您。 +在最大可能范围内, 对于任何因本公共许可协议或使用授权作品(Licensed Material)引起的直接的、特殊的、间接的、附随的、连带的、惩罚性的、警告性的,或其他的损失、成本、费用或损害,许可人不对您负任何法律上或其他的责任(包括但不限于过失责任)。当责任限制部分或全部不被允许时,该限制不适用于您。 +前述免责及责任限制声明,应尽可能以最接近于完全排除全部责任的方式解释。 +第六条 期限与终止 + +本公共许可协议在著作权与类似权利存续期间内有效。然而,如果您没有遵守此公共许可协议,则您依据此公共许可协议享有的权利自动终止。 +当您使用本授权作品(Licensed Material)的权利根据第六条a款终止时,您的权利在下述情况下恢复: + +自违反协议的行为纠正之日起自动恢复,但须在您发现违反情形后30日内纠正;或 +根据许可人明示恢复权利的意思表达。 +为避免疑义,本公共许可协议第六条b款 不影响许可人就您违反本公共许可协议的行为寻求法律救济。 +为避免疑义,许可人也可在任何时间,以另外的条款或条件提供本授权作品(Licensed Material),或者停止传播本授权作品(Licensed Material);然而,许可人此种行为不会终止本公共许可协议。 +本协议第一、五、六、七及第八条,不因本公共许可协议终止而失效。 +第七条 其他条款和条件 + +除非明示同意,否则许可人不受您表达的任何附加或不同条款或条件约束。 +本公共许可协议未提及的关于授权作品(Licensed Material)之任何安排、共识或协议,不属于且独立于本公共许可协议的条款及条件。 +第八条 解释 + +为避免疑义,本许可协议不会也不应被解释为减少、限制、约束或施加条件于无需本公共许可协议授权即可依法行使的对授权作品(Licensed Material)的任何使用。 +在最大可能范围内,如果本公共许可协议的任何条款被视为无法执行,该条款在必要的最小限度内,自动调整至可以执行。如果该条款不能被调整,其应自本公共许可协议中排除适用,不影响其余条款的效力。 +除非许可人明示同意,本公共许可协议的任何条款或条件均不得放弃。 +本公共许可协议条款不构成、也不得被解释为限制或者放弃适用于许可人或您的特权或豁免,包括豁免于任何司法管辖区或行政机构的法律程序。 +知识共享组织(Creative Commons)不是其公共许可协议的一方 。尽管如此,知识共享组织(Creative Commons)可以选择其中一种公共许可协议适用于其发表的作品(material),在此种情况下被视为许可人。知识共享公共许可协议 (CCPL)的文本属于公共领域,适用CC0公共许可协议。 除用于向公众表明本作品(material)是依照知识共享(Creative Commons)公共许可协议授权,或发布于creativecommons.org/policies的知识共享组织(Creative Commons)政策另有规定允许以外,如未经知识共享组织(Creative Commons)事先书面同意,任何一方均不得使用“知识共享”(Creative Commons)商标和其他相关商标及标识。包括但不限于,将该商标或标识用于对知识共享公共许可协议(CCPL)做出的未经同意的修改,或与授权作品(Licensed Material)使用有关的其他安排、共识或协议。为避免疑义,本段关于商标的限制性规定不构成公共许可协议之一部分。 + +您可以点击此处联系知识共享(Creative Commons)组织。 diff --git a/README.MD b/README.MD new file mode 100644 index 000000000..71f4df3f4 --- /dev/null +++ b/README.MD @@ -0,0 +1,11 @@ +## Hexo站点文件 +[![Deploy Hexo Themes Anzhiyu on GitHub Pages](https://github.com/Guangsudalao/Blog/actions/workflows/Deploy-Hexo-Themes-Anzhiyu.yml/badge.svg?branch=anzhiyu)](https://github.com/Guangsudalao/Blog/actions/workflows/Deploy-Hexo-Themes-Anzhiyu.yml) +[![Netlify Status](https://api.netlify.com/api/v1/badges/572a3754-36c6-43ef-ab1b-03260b99144b/deploy-status)](https://app.netlify.com/sites/gsdl/deploys) +# 构建[Hexo](https://github.com/hexojs/hexo)与主题[Hexo-Themes-Anzhiyu](https://github.com/anzhiyu-c/hexo-theme-anzhiyu) +## 主线 +https://blog.dlya.top +## 备用线路 +https://guangsudalao.github.io +https://gsdl.vercel.app +https://gsdl.netlify.app +https://gsdl.pages.dev diff --git a/about/index.html b/about/index.html new file mode 100644 index 000000000..d6291ccad --- /dev/null +++ b/about/index.html @@ -0,0 +1,522 @@ +关于我 | 光速大佬的小站 +
加载头像

关于我

访问统计

+ +
+
+流量统计支持:51la +
+ + + +

状态

• 不定时coding。
• 游戏:Minecraft、原神、Terraria

+

©版权

本博客所有文章除特别声明外,均采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。如果你要转载文章,请询问作者,并以相同方式进行非商业性搬运,且转载请注明出处!

+

联系我

+ +

引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/ads.txt b/ads.txt new file mode 100644 index 000000000..32f9f8a35 --- /dev/null +++ b/ads.txt @@ -0,0 +1 @@ +google.com, pub-1740703495762927, DIRECT, f08c47fec0942fa0 diff --git a/anzhiyu/random.js b/anzhiyu/random.js new file mode 100644 index 000000000..a71102990 --- /dev/null +++ b/anzhiyu/random.js @@ -0,0 +1,56 @@ +var posts=["posts/2022.11.12/","posts/3coutryfun/","posts/cloudreve-render/","posts/free-hosting/","posts/freenom_with_cloudflare/","posts/github_2fa/","posts/hexo-auto-deploy-2/","posts/hexo-auto-deploy/","posts/planetscale_ban/","posts/runexe/","posts/vercel_better_ip/","posts/vercel_github/","posts/vercel_short_link/","posts/warn-domain/"];function toRandomPost(){ + pjax.loadUrl('/'+posts[Math.floor(Math.random() * posts.length)]); + };var friend_link_list=[{"name":"岚天小窝","link":"https://blog.ltya.top","avatar":"https://cravatar.cn/avatar/5af06b461740fb2bd7467b8561399703?s=500&d=mm&r=g","descr":"一只鸽子住在这里~"},{"name":"Qinai’s Blog","link":"https://slqinai.cn","avatar":"https://q1.qlogo.cn/g?b=qq&nk=2140137093&s=640","descr":"夜の星もいつかは消える"},{"name":"邪帝家族的博客","link":"https://blog.whitegx.top","avatar":"https://cravatar.cn/avatar/9ba5c3066897b869698d222cde022ee8?s=500&d=mm&r=g","descr":"还没想好说什么~"},{"name":"序炁的博客","link":"https://www.ordchaos.com","avatar":"https://www.ordchaos.com/img/avatar.jpg","descr":"A dragon that born in the Order and Chaos."},{"name":"LZHの小窝","link":"https://blog.lzh.life","avatar":"https://cravatar.cn/avatar/ed393c2e64cb768039a62f8f14178ca0?s=500&d=mm&r=g","descr":"凡是过往,皆为序章"}]; + var refreshNum = 1; + function friendChainRandomTransmission() { + const randomIndex = Math.floor(Math.random() * friend_link_list.length); + const { name, link } = friend_link_list.splice(randomIndex, 1)[0]; + Snackbar.show({ + text: + "点击前往按钮进入随机一个友链,不保证跳转网站的安全性和可用性。本次随机到的是本站友链:「" + name + "」", + duration: 8000, + pos: "top-center", + actionText: "前往", + onActionClick: function (element) { + element.style.opacity = 0; + window.open(link, "_blank"); + }, + }); + } + function addFriendLinksInFooter() { + var footerRandomFriendsBtn = document.getElementById("footer-random-friends-btn"); + if(!footerRandomFriendsBtn) return; + footerRandomFriendsBtn.style.opacity = "0.2"; + footerRandomFriendsBtn.style.transitionDuration = "0.3s"; + footerRandomFriendsBtn.style.transform = "rotate(" + 360 * refreshNum++ + "deg)"; + const finalLinkList = []; + + let count = 0; + + while (friend_link_list.length && count < 3) { + const randomIndex = Math.floor(Math.random() * friend_link_list.length); + const { name, link, avatar } = friend_link_list.splice(randomIndex, 1)[0]; + + finalLinkList.push({ + name, + link, + avatar, + }); + count++; + } + + let html = finalLinkList + .map(({ name, link }) => { + const returnInfo = "" + name + "" + return returnInfo; + }) + .join(""); + + html += "更多"; + + document.getElementById("friend-links-in-footer").innerHTML = html; + + setTimeout(()=>{ + footerRandomFriendsBtn.style.opacity = "1"; + }, 300) + }; \ No newline at end of file diff --git a/archives/2021/08/index.html b/archives/2021/08/index.html new file mode 100644 index 000000000..ec16114a4 --- /dev/null +++ b/archives/2021/08/index.html @@ -0,0 +1,481 @@ +八月 2021 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2021/09/index.html b/archives/2021/09/index.html new file mode 100644 index 000000000..a23a8f5f6 --- /dev/null +++ b/archives/2021/09/index.html @@ -0,0 +1,481 @@ +九月 2021 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2021/11/index.html b/archives/2021/11/index.html new file mode 100644 index 000000000..47b73cb2c --- /dev/null +++ b/archives/2021/11/index.html @@ -0,0 +1,481 @@ +十一月 2021 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2021/index.html b/archives/2021/index.html new file mode 100644 index 000000000..9a77e0413 --- /dev/null +++ b/archives/2021/index.html @@ -0,0 +1,481 @@ +2021 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2022/03/index.html b/archives/2022/03/index.html new file mode 100644 index 000000000..b00f35078 --- /dev/null +++ b/archives/2022/03/index.html @@ -0,0 +1,481 @@ +三月 2022 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2022/06/index.html b/archives/2022/06/index.html new file mode 100644 index 000000000..8b560a7df --- /dev/null +++ b/archives/2022/06/index.html @@ -0,0 +1,481 @@ +六月 2022 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2022/07/index.html b/archives/2022/07/index.html new file mode 100644 index 000000000..6ae94f366 --- /dev/null +++ b/archives/2022/07/index.html @@ -0,0 +1,481 @@ +七月 2022 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2022/08/index.html b/archives/2022/08/index.html new file mode 100644 index 000000000..c080882e0 --- /dev/null +++ b/archives/2022/08/index.html @@ -0,0 +1,481 @@ +八月 2022 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html new file mode 100644 index 000000000..1483005f2 --- /dev/null +++ b/archives/2022/11/index.html @@ -0,0 +1,481 @@ +十一月 2022 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2022/index.html b/archives/2022/index.html new file mode 100644 index 000000000..df17b8747 --- /dev/null +++ b/archives/2022/index.html @@ -0,0 +1,481 @@ +2022 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2023/01/index.html b/archives/2023/01/index.html new file mode 100644 index 000000000..c99c67aec --- /dev/null +++ b/archives/2023/01/index.html @@ -0,0 +1,481 @@ +一月 2023 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2023/04/index.html b/archives/2023/04/index.html new file mode 100644 index 000000000..3b374e45a --- /dev/null +++ b/archives/2023/04/index.html @@ -0,0 +1,481 @@ +四月 2023 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2023/07/index.html b/archives/2023/07/index.html new file mode 100644 index 000000000..afc19ea85 --- /dev/null +++ b/archives/2023/07/index.html @@ -0,0 +1,481 @@ +七月 2023 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 000000000..982e67f82 --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,481 @@ +2023 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2024/02/index.html b/archives/2024/02/index.html new file mode 100644 index 000000000..f2fe7f6f5 --- /dev/null +++ b/archives/2024/02/index.html @@ -0,0 +1,481 @@ +二月 2024 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/2024/index.html b/archives/2024/index.html new file mode 100644 index 000000000..e1ad990f4 --- /dev/null +++ b/archives/2024/index.html @@ -0,0 +1,481 @@ +2024 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/404/index.html b/archives/404/index.html new file mode 100644 index 000000000..8b0613d32 --- /dev/null +++ b/archives/404/index.html @@ -0,0 +1,473 @@ +404 | 光速大佬的小站 +
加载头像

404

内容未找到

请尝试站内搜索~

+
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/go_link/index.html b/archives/go_link/index.html new file mode 100644 index 000000000..cf6ef95d8 --- /dev/null +++ b/archives/go_link/index.html @@ -0,0 +1,514 @@ +外链跳转收集 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/higher_song.html b/archives/higher_song.html new file mode 100644 index 000000000..e69de29bb diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 000000000..a27de43f0 --- /dev/null +++ b/archives/index.html @@ -0,0 +1,481 @@ +归档 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 000000000..47898e416 --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,481 @@ +归档 | 光速大佬的小站 +
加载头像
引用到评论
随便逛逛博客分类文章标签
复制地址关闭热评深色模式轉為繁體
\ No newline at end of file diff --git a/archives/yuanshen_ganyu.html b/archives/yuanshen_ganyu.html new file mode 100644 index 000000000..e69de29bb diff --git a/archives/yuanshen_zhongli.html b/archives/yuanshen_zhongli.html new file mode 100644 index 000000000..e69de29bb diff --git a/assets/algolia/algoliasearch.js b/assets/algolia/algoliasearch.js new file mode 100644 index 000000000..7707138f1 --- /dev/null +++ b/assets/algolia/algoliasearch.js @@ -0,0 +1,7190 @@ +/*! algoliasearch 3.35.1 | © 2014, 2015 Algolia SAS | github.com/algolia/algoliasearch-client-js */ +(function(f){var g;if(typeof window!=='undefined'){g=window}else if(typeof self!=='undefined'){g=self}g.ALGOLIA_MIGRATION_LAYER=f()})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;owindow.ALGOLIA_SUPPORTS_DOCWRITE = true\x3C/script>'); + + if (window.ALGOLIA_SUPPORTS_DOCWRITE === true) { + document.write('\x3Cscript src="' + v2ScriptUrl + '">\x3C/script>'); + scriptLoaded('document.write')(); + } else { + loadScript(v2ScriptUrl, scriptLoaded('DOMElement')); + } + } catch (e) { + loadScript(v2ScriptUrl, scriptLoaded('DOMElement')); + } +} + +function scriptLoaded(method) { + return function log() { + var message = 'AlgoliaSearch: loaded V2 script using ' + method; + + if (window.console && window.console.log) { + window.console.log(message); + } + }; +} + +},{"1":1}],4:[function(require,module,exports){ +'use strict'; + +/* eslint no-unused-vars: [2, {"vars": "local"}] */ + +module.exports = oldGlobals; + +// put old window.AlgoliaSearch.. into window. again so that +// users upgrading to V3 without changing their code, will be warned +function oldGlobals() { + var message = '-- AlgoliaSearch V2 => V3 error --\n' + + 'You are trying to use a new version of the AlgoliaSearch JavaScript client with an old notation.\n' + + 'Please read our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Migration-guide-from-2.x.x-to-3.x.x\n' + + '-- /AlgoliaSearch V2 => V3 error --'; + + window.AlgoliaSearch = function() { + throw new Error(message); + }; + + window.AlgoliaSearchHelper = function() { + throw new Error(message); + }; + + window.AlgoliaExplainResults = function() { + throw new Error(message); + }; +} + +},{}],5:[function(require,module,exports){ +'use strict'; + +// This script will be browserified and prepended to the normal build +// directly in window, not wrapped in any module definition +// To avoid cases where we are loaded with /latest/ along with +migrationLayer("algoliasearch"); + +// Now onto the V2 related code: +// If the client is using /latest/$BUILDNAME.min.js, load V2 of the library +// +// Otherwise, setup a migration layer that will throw on old constructors like +// new AlgoliaSearch(). +// So that users upgrading from v2 to v3 will have a clear information +// message on what to do if they did not read the migration guide +function migrationLayer(buildName) { + var isUsingLatest = require(2); + var loadV2 = require(3); + var oldGlobals = require(4); + + if (isUsingLatest(buildName)) { + loadV2(buildName); + } else { + oldGlobals(); + } +} + +},{"2":2,"3":3,"4":4}]},{},[5])(5) +});(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.algoliasearch = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} + +}).call(this,require(12)) +},{"12":12,"2":2}],2:[function(require,module,exports){ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require(9); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + +},{"9":9}],3:[function(require,module,exports){ +(function (process,global){ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version 4.1.1 + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.ES6Promise = factory()); +}(this, (function () { 'use strict'; + +function objectOrFunction(x) { + var type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} + +function isFunction(x) { + return typeof x === 'function'; +} + +var _isArray = undefined; +if (Array.isArray) { + _isArray = Array.isArray; +} else { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = undefined; +var customSchedulerFn = undefined; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : undefined; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + if (typeof vertxNext !== 'undefined') { + return function () { + vertxNext(flush); + }; + } + + return useSetTimeout(); +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = undefined; + queue[i + 1] = undefined; + } + + len = 0; +} + +function attemptVertx() { + try { + var r = require; + var vertx = r('vertx'); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = undefined; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === undefined && typeof require === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var _arguments = arguments; + + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === undefined) { + makePromise(child); + } + + var _state = parent._state; + + if (_state) { + (function () { + var callback = _arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + })(); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve$1(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(16); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +var GET_THEN_ERROR = new ErrorObject(); + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function getThen(promise) { + try { + return promise.then; + } catch (error) { + GET_THEN_ERROR.error = error; + return GET_THEN_ERROR; + } +} + +function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { + try { + then$$1.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then$$1) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then$$1, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + reject(promise, thenable._result); + } else { + subscribe(thenable, undefined, function (value) { + return resolve(promise, value); + }, function (reason) { + return reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$1) { + if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$1 === GET_THEN_ERROR) { + reject(promise, GET_THEN_ERROR.error); + GET_THEN_ERROR.error = null; + } else if (then$$1 === undefined) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$1)) { + handleForeignThenable(promise, maybeThenable, then$$1); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function resolve(promise, value) { + if (promise === value) { + reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + handleMaybeThenable(promise, value, getThen(value)); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = undefined, + callback = undefined, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function ErrorObject() { + this.error = null; +} + +var TRY_CATCH_ERROR = new ErrorObject(); + +function tryCatch(callback, detail) { + try { + return callback(detail); + } catch (e) { + TRY_CATCH_ERROR.error = e; + return TRY_CATCH_ERROR; + } +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = undefined, + error = undefined, + succeeded = undefined, + failed = undefined; + + if (hasCallback) { + value = tryCatch(callback, detail); + + if (value === TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value.error = null; + } else { + succeeded = true; + } + + if (promise === value) { + reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + resolve(promise, value); + } else if (failed) { + reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + resolve(promise, value); + }, function rejectPromise(reason) { + reject(promise, reason); + }); + } catch (e) { + reject(promise, e); + } +} + +var id = 0; +function nextId() { + return id++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = undefined; + promise._result = undefined; + promise._subscribers = []; +} + +function Enumerator$1(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(input); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + reject(this.promise, validationError()); + } +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +} + +Enumerator$1.prototype._enumerate = function (input) { + for (var i = 0; this._state === PENDING && i < input.length; i++) { + this._eachEntry(input[i], i); + } +}; + +Enumerator$1.prototype._eachEntry = function (entry, i) { + var c = this._instanceConstructor; + var resolve$$1 = c.resolve; + + if (resolve$$1 === resolve$1) { + var _then = getThen(entry); + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise$2) { + var promise = new c(noop); + handleMaybeThenable(promise, entry, _then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$1) { + return resolve$$1(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$1(entry), i); + } +}; + +Enumerator$1.prototype._settledAt = function (state, i, value) { + var promise = this.promise; + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } +}; + +Enumerator$1.prototype._willSettleAt = function (promise, i) { + var enumerator = this; + + subscribe(promise, undefined, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); +}; + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all$1(entries) { + return new Enumerator$1(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race$1(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject$1(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor +*/ +function Promise$2(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew(); + } +} + +Promise$2.all = all$1; +Promise$2.race = race$1; +Promise$2.resolve = resolve$1; +Promise$2.reject = reject$1; +Promise$2._setScheduler = setScheduler; +Promise$2._setAsap = setAsap; +Promise$2._asap = asap; + +Promise$2.prototype = { + constructor: Promise$2, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + let result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + let author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: then, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function _catch(onRejection) { + return this.then(null, onRejection); + } +}; + +/*global self*/ +function polyfill$1() { + var local = undefined; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise$2; +} + +// Strange compat.. +Promise$2.polyfill = polyfill$1; +Promise$2.Promise = Promise$2; + +return Promise$2; + +}))); + + + +}).call(this,require(12),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"12":12}],4:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],5:[function(require,module,exports){ + +var hasOwn = Object.prototype.hasOwnProperty; +var toString = Object.prototype.toString; + +module.exports = function forEach (obj, fn, ctx) { + if (toString.call(fn) !== '[object Function]') { + throw new TypeError('iterator must be a function'); + } + var l = obj.length; + if (l === +l) { + for (var i = 0; i < l; i++) { + fn.call(ctx, obj[i], i, obj); + } + } else { + for (var k in obj) { + if (hasOwn.call(obj, k)) { + fn.call(ctx, obj[k], k, obj); + } + } + } +}; + + +},{}],6:[function(require,module,exports){ +(function (global){ +var win; + +if (typeof window !== "undefined") { + win = window; +} else if (typeof global !== "undefined") { + win = global; +} else if (typeof self !== "undefined"){ + win = self; +} else { + win = {}; +} + +module.exports = win; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],7:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],8:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],9:[function(require,module,exports){ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} + +},{}],10:[function(require,module,exports){ +'use strict'; + +// modified from https://github.com/es-shims/es5-shim +var has = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var slice = Array.prototype.slice; +var isArgs = require(11); +var isEnumerable = Object.prototype.propertyIsEnumerable; +var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); +var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); +var dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' +]; +var equalsConstructorPrototype = function (o) { + var ctor = o.constructor; + return ctor && ctor.prototype === o; +}; +var excludedKeys = { + $console: true, + $external: true, + $frame: true, + $frameElement: true, + $frames: true, + $innerHeight: true, + $innerWidth: true, + $outerHeight: true, + $outerWidth: true, + $pageXOffset: true, + $pageYOffset: true, + $parent: true, + $scrollLeft: true, + $scrollTop: true, + $scrollX: true, + $scrollY: true, + $self: true, + $webkitIndexedDB: true, + $webkitStorageInfo: true, + $window: true +}; +var hasAutomationEqualityBug = (function () { + /* global window */ + if (typeof window === 'undefined') { return false; } + for (var k in window) { + try { + if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { + try { + equalsConstructorPrototype(window[k]); + } catch (e) { + return true; + } + } + } catch (e) { + return true; + } + } + return false; +}()); +var equalsConstructorPrototypeIfNotBuggy = function (o) { + /* global window */ + if (typeof window === 'undefined' || !hasAutomationEqualityBug) { + return equalsConstructorPrototype(o); + } + try { + return equalsConstructorPrototype(o); + } catch (e) { + return false; + } +}; + +var keysShim = function keys(object) { + var isObject = object !== null && typeof object === 'object'; + var isFunction = toStr.call(object) === '[object Function]'; + var isArguments = isArgs(object); + var isString = isObject && toStr.call(object) === '[object String]'; + var theKeys = []; + + if (!isObject && !isFunction && !isArguments) { + throw new TypeError('Object.keys called on a non-object'); + } + + var skipProto = hasProtoEnumBug && isFunction; + if (isString && object.length > 0 && !has.call(object, 0)) { + for (var i = 0; i < object.length; ++i) { + theKeys.push(String(i)); + } + } + + if (isArguments && object.length > 0) { + for (var j = 0; j < object.length; ++j) { + theKeys.push(String(j)); + } + } else { + for (var name in object) { + if (!(skipProto && name === 'prototype') && has.call(object, name)) { + theKeys.push(String(name)); + } + } + } + + if (hasDontEnumBug) { + var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); + + for (var k = 0; k < dontEnums.length; ++k) { + if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { + theKeys.push(dontEnums[k]); + } + } + } + return theKeys; +}; + +keysShim.shim = function shimObjectKeys() { + if (Object.keys) { + var keysWorksWithArguments = (function () { + // Safari 5.0 bug + return (Object.keys(arguments) || '').length === 2; + }(1, 2)); + if (!keysWorksWithArguments) { + var originalKeys = Object.keys; + Object.keys = function keys(object) { + if (isArgs(object)) { + return originalKeys(slice.call(object)); + } else { + return originalKeys(object); + } + }; + } + } else { + Object.keys = keysShim; + } + return Object.keys || keysShim; +}; + +module.exports = keysShim; + +},{"11":11}],11:[function(require,module,exports){ +'use strict'; + +var toStr = Object.prototype.toString; + +module.exports = function isArguments(value) { + var str = toStr.call(value); + var isArgs = str === '[object Arguments]'; + if (!isArgs) { + isArgs = str !== '[object Array]' && + value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + toStr.call(value.callee) === '[object Function]'; + } + return isArgs; +}; + +},{}],12:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],13:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],14:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +},{}],15:[function(require,module,exports){ +'use strict'; + +exports.decode = exports.parse = require(13); +exports.encode = exports.stringify = require(14); + +},{"13":13,"14":14}],16:[function(require,module,exports){ +module.exports = AlgoliaSearch; + +var Index = require(18); +var deprecate = require(28); +var deprecatedMessage = require(29); +var AlgoliaSearchCore = require(17); +var inherits = require(7); +var errors = require(30); + +function AlgoliaSearch() { + AlgoliaSearchCore.apply(this, arguments); +} + +inherits(AlgoliaSearch, AlgoliaSearchCore); + +/* + * Delete an index + * + * @param indexName the name of index to delete + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.deleteIndex = function(indexName, callback) { + return this._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexName), + hostType: 'write', + callback: callback + }); +}; + +/** + * Move an existing index. + * @param srcIndexName the name of index to copy. + * @param dstIndexName the new index name that will contains a copy of + * srcIndexName (destination will be overriten if it already exist). + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.moveIndex = function(srcIndexName, dstIndexName, callback) { + var postObj = { + operation: 'move', destination: dstIndexName + }; + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(srcIndexName) + '/operation', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Copy an existing index. + * @param srcIndexName the name of index to copy. + * @param dstIndexName the new index name that will contains a copy + * of srcIndexName (destination will be overriten if it already exist). + * @param scope an array of scopes to copy: ['settings', 'synonyms', 'rules'] + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.copyIndex = function(srcIndexName, dstIndexName, scopeOrCallback, _callback) { + var postObj = { + operation: 'copy', + destination: dstIndexName + }; + var callback = _callback; + if (typeof scopeOrCallback === 'function') { + // oops, old behaviour of third argument being a function + callback = scopeOrCallback; + } else if (Array.isArray(scopeOrCallback) && scopeOrCallback.length > 0) { + postObj.scope = scopeOrCallback; + } else if (typeof scopeOrCallback !== 'undefined') { + throw new Error('the scope given to `copyIndex` was not an array with settings, synonyms or rules'); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(srcIndexName) + '/operation', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Return last log entries. + * @param offset Specify the first entry to retrieve (0-based, 0 is the most recent log entry). + * @param length Specify the maximum number of entries to retrieve starting + * at offset. Maximum allowed value: 1000. + * @param type Specify the maximum number of entries to retrieve starting + * at offset. Maximum allowed value: 1000. + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.getLogs = function(offset, length, callback) { + var clone = require(26); + var params = {}; + if (typeof offset === 'object') { + // getLogs(params) + params = clone(offset); + callback = length; + } else if (arguments.length === 0 || typeof offset === 'function') { + // getLogs([cb]) + callback = offset; + } else if (arguments.length === 1 || typeof length === 'function') { + // getLogs(1, [cb)] + callback = length; + params.offset = offset; + } else { + // getLogs(1, 2, [cb]) + params.offset = offset; + params.length = length; + } + + if (params.offset === undefined) params.offset = 0; + if (params.length === undefined) params.length = 10; + + return this._jsonRequest({ + method: 'GET', + url: '/1/logs?' + this._getSearchParams(params, ''), + hostType: 'read', + callback: callback + }); +}; + +/* + * List all existing indexes (paginated) + * + * @param page The page to retrieve, starting at 0. + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with index list + */ +AlgoliaSearch.prototype.listIndexes = function(page, callback) { + var params = ''; + + if (page === undefined || typeof page === 'function') { + callback = page; + } else { + params = '?page=' + page; + } + + return this._jsonRequest({ + method: 'GET', + url: '/1/indexes' + params, + hostType: 'read', + callback: callback + }); +}; + +/* + * Get the index object initialized + * + * @param indexName the name of index + * @param callback the result callback with one argument (the Index instance) + */ +AlgoliaSearch.prototype.initIndex = function(indexName) { + return new Index(this, indexName); +}; + +AlgoliaSearch.prototype.initAnalytics = function(opts) { + // the actual require must be inside the function, when put outside then you have a cyclic dependency + // not well resolved that ends up making the main "./index.js" (main module, the agloliasearch function) + // export an object instead of a function + // Other workarounds: + // - rewrite the lib in ES6, cyclic dependencies may be better supported + // - move initAnalytics to a property on the main module (algoliasearch.initAnalytics), + // same as places. + // The current API was made mostly to mimic the one made in PHP + var createAnalyticsClient = require(27); + return createAnalyticsClient(this.applicationID, this.apiKey, opts); +}; + +/* + * @deprecated use client.listApiKeys + */ +AlgoliaSearch.prototype.listUserKeys = deprecate(function(callback) { + return this.listApiKeys(callback); +}, deprecatedMessage('client.listUserKeys()', 'client.listApiKeys()')); + +/* + * List all existing api keys with their associated ACLs + * + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with api keys list + */ +AlgoliaSearch.prototype.listApiKeys = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/keys', + hostType: 'read', + callback: callback + }); +}; + +/* + * @deprecated see client.getApiKey + */ +AlgoliaSearch.prototype.getUserKeyACL = deprecate(function(key, callback) { + return this.getApiKey(key, callback); +}, deprecatedMessage('client.getUserKeyACL()', 'client.getApiKey()')); + +/* + * Get an API key + * + * @param key + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the right API key + */ +AlgoliaSearch.prototype.getApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/keys/' + key, + hostType: 'read', + callback: callback + }); +}; + +/* + * @deprecated see client.deleteApiKey + */ +AlgoliaSearch.prototype.deleteUserKey = deprecate(function(key, callback) { + return this.deleteApiKey(key, callback); +}, deprecatedMessage('client.deleteUserKey()', 'client.deleteApiKey()')); + +/* + * Delete an existing API key + * @param key + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the date of deletion + */ +AlgoliaSearch.prototype.deleteApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'DELETE', + url: '/1/keys/' + key, + hostType: 'write', + callback: callback + }); +}; + +/** + * Restore a deleted API key + * + * @param {String} key - The key to restore + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the restored API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.restoreApiKey('APIKEY') + * @see {@link https://www.algolia.com/doc/rest-api/search/#restore-api-key|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.restoreApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/keys/' + key + '/restore', + hostType: 'write', + callback: callback + }); +}; + +/* + @deprecated see client.addApiKey + */ +AlgoliaSearch.prototype.addUserKey = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('client.addUserKey()', 'client.addApiKey()')); + +/* + * Add a new global API key + * + * @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that + * can contains the following values: + * - search: allow to search (https and http) + * - addObject: allows to add/update an object in the index (https only) + * - deleteObject : allows to delete an existing object (https only) + * - deleteIndex : allows to delete index content (https only) + * - settings : allows to get index settings (https only) + * - editSettings : allows to change index settings (https only) + * @param {Object} [params] - Optionnal parameters to set for the key + * @param {number} params.validity - Number of seconds after which the key will be automatically removed (0 means no time limit for this key) + * @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour + * @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call + * @param {string[]} params.indexes - Allowed targeted indexes for this key + * @param {string} params.description - A description for your key + * @param {string[]} params.referers - A list of authorized referers + * @param {Object} params.queryParameters - Force the key to use specific query parameters + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the added API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.addApiKey(['search'], { + * validity: 300, + * maxQueriesPerIPPerHour: 2000, + * maxHitsPerQuery: 3, + * indexes: ['fruits'], + * description: 'Eat three fruits', + * referers: ['*.algolia.com'], + * queryParameters: { + * tagFilters: ['public'], + * } + * }) + * @see {@link https://www.algolia.com/doc/rest_api#AddKey|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.addApiKey = function(acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: client.addApiKey(arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = null; + } + + var postObj = { + acl: acls + }; + + if (params) { + postObj.validity = params.validity; + postObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + postObj.maxHitsPerQuery = params.maxHitsPerQuery; + postObj.indexes = params.indexes; + postObj.description = params.description; + + if (params.queryParameters) { + postObj.queryParameters = this._getSearchParams(params.queryParameters, ''); + } + + postObj.referers = params.referers; + } + + return this._jsonRequest({ + method: 'POST', + url: '/1/keys', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * @deprecated Please use client.addApiKey() + */ +AlgoliaSearch.prototype.addUserKeyWithValidity = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('client.addUserKeyWithValidity()', 'client.addApiKey()')); + +/** + * @deprecated Please use client.updateApiKey() + */ +AlgoliaSearch.prototype.updateUserKey = deprecate(function(key, acls, params, callback) { + return this.updateApiKey(key, acls, params, callback); +}, deprecatedMessage('client.updateUserKey()', 'client.updateApiKey()')); + +/** + * Update an existing API key + * @param {string} key - The key to update + * @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that + * can contains the following values: + * - search: allow to search (https and http) + * - addObject: allows to add/update an object in the index (https only) + * - deleteObject : allows to delete an existing object (https only) + * - deleteIndex : allows to delete index content (https only) + * - settings : allows to get index settings (https only) + * - editSettings : allows to change index settings (https only) + * @param {Object} [params] - Optionnal parameters to set for the key + * @param {number} params.validity - Number of seconds after which the key will be automatically removed (0 means no time limit for this key) + * @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour + * @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call + * @param {string[]} params.indexes - Allowed targeted indexes for this key + * @param {string} params.description - A description for your key + * @param {string[]} params.referers - A list of authorized referers + * @param {Object} params.queryParameters - Force the key to use specific query parameters + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the modified API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.updateApiKey('APIKEY', ['search'], { + * validity: 300, + * maxQueriesPerIPPerHour: 2000, + * maxHitsPerQuery: 3, + * indexes: ['fruits'], + * description: 'Eat three fruits', + * referers: ['*.algolia.com'], + * queryParameters: { + * tagFilters: ['public'], + * } + * }) + * @see {@link https://www.algolia.com/doc/rest_api#UpdateIndexKey|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.updateApiKey = function(key, acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: client.updateApiKey(key, arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 2 || typeof params === 'function') { + callback = params; + params = null; + } + + var putObj = { + acl: acls + }; + + if (params) { + putObj.validity = params.validity; + putObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + putObj.maxHitsPerQuery = params.maxHitsPerQuery; + putObj.indexes = params.indexes; + putObj.description = params.description; + + if (params.queryParameters) { + putObj.queryParameters = this._getSearchParams(params.queryParameters, ''); + } + + putObj.referers = params.referers; + } + + return this._jsonRequest({ + method: 'PUT', + url: '/1/keys/' + key, + body: putObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Initialize a new batch of search queries + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.startQueriesBatch = deprecate(function startQueriesBatchDeprecated() { + this._batch = []; +}, deprecatedMessage('client.startQueriesBatch()', 'client.search()')); + +/** + * Add a search query in the batch + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.addQueryInBatch = deprecate(function addQueryInBatchDeprecated(indexName, query, args) { + this._batch.push({ + indexName: indexName, + query: query, + params: args + }); +}, deprecatedMessage('client.addQueryInBatch()', 'client.search()')); + +/** + * Launch the batch of queries using XMLHttpRequest. + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.sendQueriesBatch = deprecate(function sendQueriesBatchDeprecated(callback) { + return this.search(this._batch, callback); +}, deprecatedMessage('client.sendQueriesBatch()', 'client.search()')); + +/** + * Perform write operations across multiple indexes. + * + * To reduce the amount of time spent on network round trips, + * you can create, update, or delete several objects in one call, + * using the batch endpoint (all operations are done in the given order). + * + * Available actions: + * - addObject + * - updateObject + * - partialUpdateObject + * - partialUpdateObjectNoCreate + * - deleteObject + * + * https://www.algolia.com/doc/rest_api#Indexes + * @param {Object[]} operations An array of operations to perform + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.batch([{ + * action: 'addObject', + * indexName: 'clients', + * body: { + * name: 'Bill' + * } + * }, { + * action: 'udpateObject', + * indexName: 'fruits', + * body: { + * objectID: '29138', + * name: 'banana' + * } + * }], cb) + */ +AlgoliaSearch.prototype.batch = function(operations, callback) { + var isArray = require(8); + var usage = 'Usage: client.batch(operations[, callback])'; + + if (!isArray(operations)) { + throw new Error(usage); + } + + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/*/batch', + body: { + requests: operations + }, + hostType: 'write', + callback: callback + }); +}; + +/** + * Assign or Move a userID to a cluster + * + * @param {string} data.userID The userID to assign to a new cluster + * @param {string} data.cluster The cluster to assign the user to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.assignUserID({ cluster: 'c1-test', userID: 'some-user' }); + */ +AlgoliaSearch.prototype.assignUserID = function(data, callback) { + if (!data.userID || !data.cluster) { + throw new errors.AlgoliaSearchError('You have to provide both a userID and cluster', data); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping', + hostType: 'write', + body: {cluster: data.cluster}, + callback: callback, + headers: { + 'x-algolia-user-id': data.userID + } + }); +}; + +/** + * Assign a array of userIDs to a cluster. + * + * @param {Array} data.userIDs The array of userIDs to assign to a new cluster + * @param {string} data.cluster The cluster to assign the user to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.assignUserIDs({ cluster: 'c1-test', userIDs: ['some-user-1', 'some-user-2'] }); + */ +AlgoliaSearch.prototype.assignUserIDs = function(data, callback) { + if (!data.userIDs || !data.cluster) { + throw new errors.AlgoliaSearchError('You have to provide both an array of userIDs and cluster', data); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping/batch', + hostType: 'write', + body: { + cluster: data.cluster, + users: data.userIDs + }, + callback: callback + }); +}; + +/** + * Get the top userIDs + * + * (the callback is the second argument) + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getTopUserID(); + */ +AlgoliaSearch.prototype.getTopUserID = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping/top', + hostType: 'read', + callback: callback + }); +}; + +/** + * Get userID + * + * @param {string} data.userID The userID to get info about + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getUserID({ userID: 'some-user' }); + */ +AlgoliaSearch.prototype.getUserID = function(data, callback) { + if (!data.userID) { + throw new errors.AlgoliaSearchError('You have to provide a userID', {debugData: data}); + } + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping/' + data.userID, + hostType: 'read', + callback: callback + }); +}; + +/** + * List all the clusters + * + * (the callback is the second argument) + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.listClusters(); + */ +AlgoliaSearch.prototype.listClusters = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters', + hostType: 'read', + callback: callback + }); +}; + +/** + * List the userIDs + * + * (the callback is the second argument) + * + * @param {string} data.hitsPerPage How many hits on every page + * @param {string} data.page The page to retrieve + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.listClusters(); + * client.listClusters({ page: 3, hitsPerPage: 30}); + */ +AlgoliaSearch.prototype.listUserIDs = function(data, callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping', + body: data, + hostType: 'read', + callback: callback + }); +}; + +/** + * Remove an userID + * + * @param {string} data.userID The userID to assign to a new cluster + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.removeUserID({ userID: 'some-user' }); + */ +AlgoliaSearch.prototype.removeUserID = function(data, callback) { + if (!data.userID) { + throw new errors.AlgoliaSearchError('You have to provide a userID', {debugData: data}); + } + return this._jsonRequest({ + method: 'DELETE', + url: '/1/clusters/mapping', + hostType: 'write', + callback: callback, + headers: { + 'x-algolia-user-id': data.userID + } + }); +}; + +/** + * Search for userIDs + * + * @param {string} data.cluster The cluster to target + * @param {string} data.query The query to execute + * @param {string} data.hitsPerPage How many hits on every page + * @param {string} data.page The page to retrieve + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.searchUserIDs({ cluster: 'c1-test', query: 'some-user' }); + * client.searchUserIDs({ + * cluster: "c1-test", + * query: "some-user", + * page: 3, + * hitsPerPage: 2 + * }); + */ +AlgoliaSearch.prototype.searchUserIDs = function(data, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping/search', + body: data, + hostType: 'read', + callback: callback + }); +}; + +/** + * Set strategy for personalization + * + * @param {Object} data + * @param {Object} data.eventsScoring Associate a score to an event + * @param {Object} data.eventsScoring. The name of the event + * @param {Number} data.eventsScoring..score The score to associate to + * @param {String} data.eventsScoring..type Either "click", "conversion" or "view" + * @param {Object} data.facetsScoring Associate a score to a facet + * @param {Object} data.facetsScoring. The name of the facet + * @param {Number} data.facetsScoring..score The score to associate to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.setPersonalizationStrategy({ + * eventsScoring: { + * "Add to cart": { score: 50, type: "conversion" }, + * Purchase: { score: 100, type: "conversion" } + * }, + * facetsScoring: { + * brand: { score: 100 }, + * categories: { score: 10 } + * } + * }); + */ +AlgoliaSearch.prototype.setPersonalizationStrategy = function(data, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/recommendation/personalization/strategy', + body: data, + hostType: 'write', + callback: callback + }); +}; + +/** + * Get strategy for personalization + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getPersonalizationStrategy(); + */ + +AlgoliaSearch.prototype.getPersonalizationStrategy = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/recommendation/personalization/strategy', + hostType: 'read', + callback: callback + }); +}; + +// environment specific methods +AlgoliaSearch.prototype.destroy = notImplemented; +AlgoliaSearch.prototype.enableRateLimitForward = notImplemented; +AlgoliaSearch.prototype.disableRateLimitForward = notImplemented; +AlgoliaSearch.prototype.useSecuredAPIKey = notImplemented; +AlgoliaSearch.prototype.disableSecuredAPIKey = notImplemented; +AlgoliaSearch.prototype.generateSecuredApiKey = notImplemented; +AlgoliaSearch.prototype.getSecuredApiKeyRemainingValidity = notImplemented; + +function notImplemented() { + var message = 'Not implemented in this environment.\n' + + 'If you feel this is a mistake, write to support@algolia.com'; + + throw new errors.AlgoliaSearchError(message); +} + +},{"17":17,"18":18,"26":26,"27":27,"28":28,"29":29,"30":30,"7":7,"8":8}],17:[function(require,module,exports){ +(function (process){ +module.exports = AlgoliaSearchCore; + +var errors = require(30); +var exitPromise = require(31); +var IndexCore = require(20); +var store = require(36); + +// We will always put the API KEY in the JSON body in case of too long API KEY, +// to avoid query string being too long and failing in various conditions (our server limit, browser limit, +// proxies limit) +var MAX_API_KEY_LENGTH = 500; +var RESET_APP_DATA_TIMER = + process.env.RESET_APP_DATA_TIMER && parseInt(process.env.RESET_APP_DATA_TIMER, 10) || + 60 * 2 * 1000; // after 2 minutes reset to first host + +/* + * Algolia Search library initialization + * https://www.algolia.com/ + * + * @param {string} applicationID - Your applicationID, found in your dashboard + * @param {string} apiKey - Your API key, found in your dashboard + * @param {Object} [opts] + * @param {number} [opts.timeout=2000] - The request timeout set in milliseconds, + * another request will be issued after this timeout + * @param {string} [opts.protocol='https:'] - The protocol used to query Algolia Search API. + * Set to 'http:' to force using http. + * @param {Object|Array} [opts.hosts={ + * read: [this.applicationID + '-dsn.algolia.net'].concat([ + * this.applicationID + '-1.algolianet.com', + * this.applicationID + '-2.algolianet.com', + * this.applicationID + '-3.algolianet.com'] + * ]), + * write: [this.applicationID + '.algolia.net'].concat([ + * this.applicationID + '-1.algolianet.com', + * this.applicationID + '-2.algolianet.com', + * this.applicationID + '-3.algolianet.com'] + * ]) - The hosts to use for Algolia Search API. + * If you provide them, you will less benefit from our HA implementation + */ +function AlgoliaSearchCore(applicationID, apiKey, opts) { + var debug = require(1)('algoliasearch'); + + var clone = require(26); + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: algoliasearch(applicationID, apiKey, opts)'; + + if (opts._allowEmptyCredentials !== true && !applicationID) { + throw new errors.AlgoliaSearchError('Please provide an application ID. ' + usage); + } + + if (opts._allowEmptyCredentials !== true && !apiKey) { + throw new errors.AlgoliaSearchError('Please provide an API key. ' + usage); + } + + this.applicationID = applicationID; + this.apiKey = apiKey; + + this.hosts = { + read: [], + write: [] + }; + + opts = opts || {}; + + this._timeouts = opts.timeouts || { + connect: 1 * 1000, // 500ms connect is GPRS latency + read: 2 * 1000, + write: 30 * 1000 + }; + + // backward compat, if opts.timeout is passed, we use it to configure all timeouts like before + if (opts.timeout) { + this._timeouts.connect = this._timeouts.read = this._timeouts.write = opts.timeout; + } + + var protocol = opts.protocol || 'https:'; + // while we advocate for colon-at-the-end values: 'http:' for `opts.protocol` + // we also accept `http` and `https`. It's a common error. + if (!/:$/.test(protocol)) { + protocol = protocol + ':'; + } + + if (protocol !== 'http:' && protocol !== 'https:') { + throw new errors.AlgoliaSearchError('protocol must be `http:` or `https:` (was `' + opts.protocol + '`)'); + } + + this._checkAppIdData(); + + if (!opts.hosts) { + var defaultHosts = map(this._shuffleResult, function(hostNumber) { + return applicationID + '-' + hostNumber + '.algolianet.com'; + }); + + // no hosts given, compute defaults + var mainSuffix = (opts.dsn === false ? '' : '-dsn') + '.algolia.net'; + this.hosts.read = [this.applicationID + mainSuffix].concat(defaultHosts); + this.hosts.write = [this.applicationID + '.algolia.net'].concat(defaultHosts); + } else if (isArray(opts.hosts)) { + // when passing custom hosts, we need to have a different host index if the number + // of write/read hosts are different. + this.hosts.read = clone(opts.hosts); + this.hosts.write = clone(opts.hosts); + } else { + this.hosts.read = clone(opts.hosts.read); + this.hosts.write = clone(opts.hosts.write); + } + + // add protocol and lowercase hosts + this.hosts.read = map(this.hosts.read, prepareHost(protocol)); + this.hosts.write = map(this.hosts.write, prepareHost(protocol)); + + this.extraHeaders = {}; + + // In some situations you might want to warm the cache + this.cache = opts._cache || {}; + + this._ua = opts._ua; + this._useCache = opts._useCache === undefined || opts._cache ? true : opts._useCache; + this._useRequestCache = this._useCache && opts._useRequestCache; + this._useFallback = opts.useFallback === undefined ? true : opts.useFallback; + + this._setTimeout = opts._setTimeout; + + debug('init done, %j', this); +} + +/* + * Get the index object initialized + * + * @param indexName the name of index + * @param callback the result callback with one argument (the Index instance) + */ +AlgoliaSearchCore.prototype.initIndex = function(indexName) { + return new IndexCore(this, indexName); +}; + +/** +* Add an extra field to the HTTP request +* +* @param name the header field name +* @param value the header field value +*/ +AlgoliaSearchCore.prototype.setExtraHeader = function(name, value) { + this.extraHeaders[name.toLowerCase()] = value; +}; + +/** +* Get the value of an extra HTTP header +* +* @param name the header field name +*/ +AlgoliaSearchCore.prototype.getExtraHeader = function(name) { + return this.extraHeaders[name.toLowerCase()]; +}; + +/** +* Remove an extra field from the HTTP request +* +* @param name the header field name +*/ +AlgoliaSearchCore.prototype.unsetExtraHeader = function(name) { + delete this.extraHeaders[name.toLowerCase()]; +}; + +/** +* Augment sent x-algolia-agent with more data, each agent part +* is automatically separated from the others by a semicolon; +* +* @param algoliaAgent the agent to add +*/ +AlgoliaSearchCore.prototype.addAlgoliaAgent = function(algoliaAgent) { + var algoliaAgentWithDelimiter = '; ' + algoliaAgent; + + if (this._ua.indexOf(algoliaAgentWithDelimiter) === -1) { + this._ua += algoliaAgentWithDelimiter; + } +}; + +/* + * Wrapper that try all hosts to maximize the quality of service + */ +AlgoliaSearchCore.prototype._jsonRequest = function(initialOpts) { + this._checkAppIdData(); + + var requestDebug = require(1)('algoliasearch:' + initialOpts.url); + + + var body; + var cacheID; + var additionalUA = initialOpts.additionalUA || ''; + var cache = initialOpts.cache; + var client = this; + var tries = 0; + var usingFallback = false; + var hasFallback = client._useFallback && client._request.fallback && initialOpts.fallback; + var headers; + + if ( + this.apiKey.length > MAX_API_KEY_LENGTH && + initialOpts.body !== undefined && + (initialOpts.body.params !== undefined || // index.search() + initialOpts.body.requests !== undefined) // client.search() + ) { + initialOpts.body.apiKey = this.apiKey; + headers = this._computeRequestHeaders({ + additionalUA: additionalUA, + withApiKey: false, + headers: initialOpts.headers + }); + } else { + headers = this._computeRequestHeaders({ + additionalUA: additionalUA, + headers: initialOpts.headers + }); + } + + if (initialOpts.body !== undefined) { + body = safeJSONStringify(initialOpts.body); + } + + requestDebug('request start'); + var debugData = []; + + + function doRequest(requester, reqOpts) { + client._checkAppIdData(); + + var startTime = new Date(); + + if (client._useCache && !client._useRequestCache) { + cacheID = initialOpts.url; + } + + // as we sometime use POST requests to pass parameters (like query='aa'), + // the cacheID must also include the body to be different between calls + if (client._useCache && !client._useRequestCache && body) { + cacheID += '_body_' + reqOpts.body; + } + + // handle cache existence + if (isCacheValidWithCurrentID(!client._useRequestCache, cache, cacheID)) { + requestDebug('serving response from cache'); + + var responseText = cache[cacheID]; + + // Cache response must match the type of the original one + return client._promise.resolve({ + body: JSON.parse(responseText), + responseText: responseText + }); + } + + // if we reached max tries + if (tries >= client.hosts[initialOpts.hostType].length) { + if (!hasFallback || usingFallback) { + requestDebug('could not get any response'); + // then stop + return client._promise.reject(new errors.AlgoliaSearchError( + 'Cannot connect to the AlgoliaSearch API.' + + ' Send an email to support@algolia.com to report and resolve the issue.' + + ' Application id was: ' + client.applicationID, {debugData: debugData} + )); + } + + requestDebug('switching to fallback'); + + // let's try the fallback starting from here + tries = 0; + + // method, url and body are fallback dependent + reqOpts.method = initialOpts.fallback.method; + reqOpts.url = initialOpts.fallback.url; + reqOpts.jsonBody = initialOpts.fallback.body; + if (reqOpts.jsonBody) { + reqOpts.body = safeJSONStringify(reqOpts.jsonBody); + } + // re-compute headers, they could be omitting the API KEY + headers = client._computeRequestHeaders({ + additionalUA: additionalUA, + headers: initialOpts.headers + }); + + reqOpts.timeouts = client._getTimeoutsForRequest(initialOpts.hostType); + client._setHostIndexByType(0, initialOpts.hostType); + usingFallback = true; // the current request is now using fallback + return doRequest(client._request.fallback, reqOpts); + } + + var currentHost = client._getHostByType(initialOpts.hostType); + + var url = currentHost + reqOpts.url; + var options = { + body: reqOpts.body, + jsonBody: reqOpts.jsonBody, + method: reqOpts.method, + headers: headers, + timeouts: reqOpts.timeouts, + debug: requestDebug, + forceAuthHeaders: reqOpts.forceAuthHeaders + }; + + requestDebug('method: %s, url: %s, headers: %j, timeouts: %d', + options.method, url, options.headers, options.timeouts); + + if (requester === client._request.fallback) { + requestDebug('using fallback'); + } + + // `requester` is any of this._request or this._request.fallback + // thus it needs to be called using the client as context + return requester.call(client, url, options).then(success, tryFallback); + + function success(httpResponse) { + // compute the status of the response, + // + // When in browser mode, using XDR or JSONP, we have no statusCode available + // So we rely on our API response `status` property. + // But `waitTask` can set a `status` property which is not the statusCode (it's the task status) + // So we check if there's a `message` along `status` and it means it's an error + // + // That's the only case where we have a response.status that's not the http statusCode + var status = httpResponse && httpResponse.body && httpResponse.body.message && httpResponse.body.status || + + // this is important to check the request statusCode AFTER the body eventual + // statusCode because some implementations (jQuery XDomainRequest transport) may + // send statusCode 200 while we had an error + httpResponse.statusCode || + + // When in browser mode, using XDR or JSONP + // we default to success when no error (no response.status && response.message) + // If there was a JSON.parse() error then body is null and it fails + httpResponse && httpResponse.body && 200; + + requestDebug('received response: statusCode: %s, computed statusCode: %d, headers: %j', + httpResponse.statusCode, status, httpResponse.headers); + + var httpResponseOk = Math.floor(status / 100) === 2; + + var endTime = new Date(); + debugData.push({ + currentHost: currentHost, + headers: removeCredentials(headers), + content: body || null, + contentLength: body !== undefined ? body.length : null, + method: reqOpts.method, + timeouts: reqOpts.timeouts, + url: reqOpts.url, + startTime: startTime, + endTime: endTime, + duration: endTime - startTime, + statusCode: status + }); + + if (httpResponseOk) { + if (client._useCache && !client._useRequestCache && cache) { + cache[cacheID] = httpResponse.responseText; + } + + return { + responseText: httpResponse.responseText, + body: httpResponse.body + }; + } + + var shouldRetry = Math.floor(status / 100) !== 4; + + if (shouldRetry) { + tries += 1; + return retryRequest(); + } + + requestDebug('unrecoverable error'); + + // no success and no retry => fail + var unrecoverableError = new errors.AlgoliaSearchError( + httpResponse.body && httpResponse.body.message, {debugData: debugData, statusCode: status} + ); + + return client._promise.reject(unrecoverableError); + } + + function tryFallback(err) { + // error cases: + // While not in fallback mode: + // - CORS not supported + // - network error + // While in fallback mode: + // - timeout + // - network error + // - badly formatted JSONP (script loaded, did not call our callback) + // In both cases: + // - uncaught exception occurs (TypeError) + requestDebug('error: %s, stack: %s', err.message, err.stack); + + var endTime = new Date(); + debugData.push({ + currentHost: currentHost, + headers: removeCredentials(headers), + content: body || null, + contentLength: body !== undefined ? body.length : null, + method: reqOpts.method, + timeouts: reqOpts.timeouts, + url: reqOpts.url, + startTime: startTime, + endTime: endTime, + duration: endTime - startTime + }); + + if (!(err instanceof errors.AlgoliaSearchError)) { + err = new errors.Unknown(err && err.message, err); + } + + tries += 1; + + // stop the request implementation when: + if ( + // we did not generate this error, + // it comes from a throw in some other piece of code + err instanceof errors.Unknown || + + // server sent unparsable JSON + err instanceof errors.UnparsableJSON || + + // max tries and already using fallback or no fallback + tries >= client.hosts[initialOpts.hostType].length && + (usingFallback || !hasFallback)) { + // stop request implementation for this command + err.debugData = debugData; + return client._promise.reject(err); + } + + // When a timeout occurred, retry by raising timeout + if (err instanceof errors.RequestTimeout) { + return retryRequestWithHigherTimeout(); + } + + return retryRequest(); + } + + function retryRequest() { + requestDebug('retrying request'); + client._incrementHostIndex(initialOpts.hostType); + return doRequest(requester, reqOpts); + } + + function retryRequestWithHigherTimeout() { + requestDebug('retrying request with higher timeout'); + client._incrementHostIndex(initialOpts.hostType); + client._incrementTimeoutMultipler(); + reqOpts.timeouts = client._getTimeoutsForRequest(initialOpts.hostType); + return doRequest(requester, reqOpts); + } + } + + function isCacheValidWithCurrentID( + useRequestCache, + currentCache, + currentCacheID + ) { + return ( + client._useCache && + useRequestCache && + currentCache && + currentCache[currentCacheID] !== undefined + ); + } + + + function interopCallbackReturn(request, callback) { + if (isCacheValidWithCurrentID(client._useRequestCache, cache, cacheID)) { + request.catch(function() { + // Release the cache on error + delete cache[cacheID]; + }); + } + + if (typeof initialOpts.callback === 'function') { + // either we have a callback + request.then(function okCb(content) { + exitPromise(function() { + initialOpts.callback(null, callback(content)); + }, client._setTimeout || setTimeout); + }, function nookCb(err) { + exitPromise(function() { + initialOpts.callback(err); + }, client._setTimeout || setTimeout); + }); + } else { + // either we are using promises + return request.then(callback); + } + } + + if (client._useCache && client._useRequestCache) { + cacheID = initialOpts.url; + } + + // as we sometime use POST requests to pass parameters (like query='aa'), + // the cacheID must also include the body to be different between calls + if (client._useCache && client._useRequestCache && body) { + cacheID += '_body_' + body; + } + + if (isCacheValidWithCurrentID(client._useRequestCache, cache, cacheID)) { + requestDebug('serving request from cache'); + + var maybePromiseForCache = cache[cacheID]; + + // In case the cache is warmup with value that is not a promise + var promiseForCache = typeof maybePromiseForCache.then !== 'function' + ? client._promise.resolve({responseText: maybePromiseForCache}) + : maybePromiseForCache; + + return interopCallbackReturn(promiseForCache, function(content) { + // In case of the cache request, return the original value + return JSON.parse(content.responseText); + }); + } + + var request = doRequest( + client._request, { + url: initialOpts.url, + method: initialOpts.method, + body: body, + jsonBody: initialOpts.body, + timeouts: client._getTimeoutsForRequest(initialOpts.hostType), + forceAuthHeaders: initialOpts.forceAuthHeaders + } + ); + + if (client._useCache && client._useRequestCache && cache) { + cache[cacheID] = request; + } + + return interopCallbackReturn(request, function(content) { + // In case of the first request, return the JSON value + return content.body; + }); +}; + +/* +* Transform search param object in query string +* @param {object} args arguments to add to the current query string +* @param {string} params current query string +* @return {string} the final query string +*/ +AlgoliaSearchCore.prototype._getSearchParams = function(args, params) { + if (args === undefined || args === null) { + return params; + } + for (var key in args) { + if (key !== null && args[key] !== undefined && args.hasOwnProperty(key)) { + params += params === '' ? '' : '&'; + params += key + '=' + encodeURIComponent(Object.prototype.toString.call(args[key]) === '[object Array]' ? safeJSONStringify(args[key]) : args[key]); + } + } + return params; +}; + +/** + * Compute the headers for a request + * + * @param [string] options.additionalUA semi-colon separated string with other user agents to add + * @param [boolean=true] options.withApiKey Send the api key as a header + * @param [Object] options.headers Extra headers to send + */ +AlgoliaSearchCore.prototype._computeRequestHeaders = function(options) { + var forEach = require(5); + + var ua = options.additionalUA ? + this._ua + '; ' + options.additionalUA : + this._ua; + + var requestHeaders = { + 'x-algolia-agent': ua, + 'x-algolia-application-id': this.applicationID + }; + + // browser will inline headers in the url, node.js will use http headers + // but in some situations, the API KEY will be too long (big secured API keys) + // so if the request is a POST and the KEY is very long, we will be asked to not put + // it into headers but in the JSON body + if (options.withApiKey !== false) { + requestHeaders['x-algolia-api-key'] = this.apiKey; + } + + if (this.userToken) { + requestHeaders['x-algolia-usertoken'] = this.userToken; + } + + if (this.securityTags) { + requestHeaders['x-algolia-tagfilters'] = this.securityTags; + } + + forEach(this.extraHeaders, function addToRequestHeaders(value, key) { + requestHeaders[key] = value; + }); + + if (options.headers) { + forEach(options.headers, function addToRequestHeaders(value, key) { + requestHeaders[key] = value; + }); + } + + return requestHeaders; +}; + +/** + * Search through multiple indices at the same time + * @param {Object[]} queries An array of queries you want to run. + * @param {string} queries[].indexName The index name you want to target + * @param {string} [queries[].query] The query to issue on this index. Can also be passed into `params` + * @param {Object} queries[].params Any search param like hitsPerPage, .. + * @param {Function} callback Callback to be called + * @return {Promise|undefined} Returns a promise if no callback given + */ +AlgoliaSearchCore.prototype.search = function(queries, opts, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: client.search(arrayOfQueries[, callback])'; + + if (!isArray(queries)) { + throw new Error(usage); + } + + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var client = this; + + var postObj = { + requests: map(queries, function prepareRequest(query) { + var params = ''; + + // allow query.query + // so we are mimicing the index.search(query, params) method + // {indexName:, query:, params:} + if (query.query !== undefined) { + params += 'query=' + encodeURIComponent(query.query); + } + + return { + indexName: query.indexName, + params: client._getSearchParams(query.params, params) + }; + }) + }; + + var JSONPParams = map(postObj.requests, function prepareJSONPParams(request, requestId) { + return requestId + '=' + + encodeURIComponent( + '/1/indexes/' + encodeURIComponent(request.indexName) + '?' + + request.params + ); + }).join('&'); + + var url = '/1/indexes/*/queries'; + + if (opts.strategy !== undefined) { + postObj.strategy = opts.strategy; + } + + return this._jsonRequest({ + cache: this.cache, + method: 'POST', + url: url, + body: postObj, + hostType: 'read', + fallback: { + method: 'GET', + url: '/1/indexes/*', + body: { + params: JSONPParams + } + }, + callback: callback + }); +}; + +/** +* Search for facet values +* https://www.algolia.com/doc/rest-api/search#search-for-facet-values +* This is the top-level API for SFFV. +* +* @param {object[]} queries An array of queries to run. +* @param {string} queries[].indexName Index name, name of the index to search. +* @param {object} queries[].params Query parameters. +* @param {string} queries[].params.facetName Facet name, name of the attribute to search for values in. +* Must be declared as a facet +* @param {string} queries[].params.facetQuery Query for the facet search +* @param {string} [queries[].params.*] Any search parameter of Algolia, +* see https://www.algolia.com/doc/api-client/javascript/search#search-parameters +* Pagination is not supported. The page and hitsPerPage parameters will be ignored. +*/ +AlgoliaSearchCore.prototype.searchForFacetValues = function(queries) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])'; // eslint-disable-line max-len + + if (!isArray(queries)) { + throw new Error(usage); + } + + var client = this; + + return client._promise.all(map(queries, function performQuery(query) { + if ( + !query || + query.indexName === undefined || + query.params.facetName === undefined || + query.params.facetQuery === undefined + ) { + throw new Error(usage); + } + + var clone = require(26); + var omit = require(34); + + var indexName = query.indexName; + var params = query.params; + + var facetName = params.facetName; + var filteredParams = omit(clone(params), function(keyName) { + return keyName === 'facetName'; + }); + var searchParameters = client._getSearchParams(filteredParams, ''); + + return client._jsonRequest({ + cache: client.cache, + method: 'POST', + url: + '/1/indexes/' + + encodeURIComponent(indexName) + + '/facets/' + + encodeURIComponent(facetName) + + '/query', + hostType: 'read', + body: {params: searchParameters} + }); + })); +}; + +/** + * Set the extra security tagFilters header + * @param {string|array} tags The list of tags defining the current security filters + */ +AlgoliaSearchCore.prototype.setSecurityTags = function(tags) { + if (Object.prototype.toString.call(tags) === '[object Array]') { + var strTags = []; + for (var i = 0; i < tags.length; ++i) { + if (Object.prototype.toString.call(tags[i]) === '[object Array]') { + var oredTags = []; + for (var j = 0; j < tags[i].length; ++j) { + oredTags.push(tags[i][j]); + } + strTags.push('(' + oredTags.join(',') + ')'); + } else { + strTags.push(tags[i]); + } + } + tags = strTags.join(','); + } + + this.securityTags = tags; +}; + +/** + * Set the extra user token header + * @param {string} userToken The token identifying a uniq user (used to apply rate limits) + */ +AlgoliaSearchCore.prototype.setUserToken = function(userToken) { + this.userToken = userToken; +}; + +/** + * Clear all queries in client's cache + * @return undefined + */ +AlgoliaSearchCore.prototype.clearCache = function() { + this.cache = {}; +}; + +/** +* Set the number of milliseconds a request can take before automatically being terminated. +* @deprecated +* @param {Number} milliseconds +*/ +AlgoliaSearchCore.prototype.setRequestTimeout = function(milliseconds) { + if (milliseconds) { + this._timeouts.connect = this._timeouts.read = this._timeouts.write = milliseconds; + } +}; + +/** +* Set the three different (connect, read, write) timeouts to be used when requesting +* @param {Object} timeouts +*/ +AlgoliaSearchCore.prototype.setTimeouts = function(timeouts) { + this._timeouts = timeouts; +}; + +/** +* Get the three different (connect, read, write) timeouts to be used when requesting +* @param {Object} timeouts +*/ +AlgoliaSearchCore.prototype.getTimeouts = function() { + return this._timeouts; +}; + +AlgoliaSearchCore.prototype._getAppIdData = function() { + var data = store.get(this.applicationID); + if (data !== null) this._cacheAppIdData(data); + return data; +}; + +AlgoliaSearchCore.prototype._setAppIdData = function(data) { + data.lastChange = (new Date()).getTime(); + this._cacheAppIdData(data); + return store.set(this.applicationID, data); +}; + +AlgoliaSearchCore.prototype._checkAppIdData = function() { + var data = this._getAppIdData(); + var now = (new Date()).getTime(); + if (data === null || now - data.lastChange > RESET_APP_DATA_TIMER) { + return this._resetInitialAppIdData(data); + } + + return data; +}; + +AlgoliaSearchCore.prototype._resetInitialAppIdData = function(data) { + var newData = data || {}; + newData.hostIndexes = {read: 0, write: 0}; + newData.timeoutMultiplier = 1; + newData.shuffleResult = newData.shuffleResult || shuffle([1, 2, 3]); + return this._setAppIdData(newData); +}; + +AlgoliaSearchCore.prototype._cacheAppIdData = function(data) { + this._hostIndexes = data.hostIndexes; + this._timeoutMultiplier = data.timeoutMultiplier; + this._shuffleResult = data.shuffleResult; +}; + +AlgoliaSearchCore.prototype._partialAppIdDataUpdate = function(newData) { + var foreach = require(5); + var currentData = this._getAppIdData(); + foreach(newData, function(value, key) { + currentData[key] = value; + }); + + return this._setAppIdData(currentData); +}; + +AlgoliaSearchCore.prototype._getHostByType = function(hostType) { + return this.hosts[hostType][this._getHostIndexByType(hostType)]; +}; + +AlgoliaSearchCore.prototype._getTimeoutMultiplier = function() { + return this._timeoutMultiplier; +}; + +AlgoliaSearchCore.prototype._getHostIndexByType = function(hostType) { + return this._hostIndexes[hostType]; +}; + +AlgoliaSearchCore.prototype._setHostIndexByType = function(hostIndex, hostType) { + var clone = require(26); + var newHostIndexes = clone(this._hostIndexes); + newHostIndexes[hostType] = hostIndex; + this._partialAppIdDataUpdate({hostIndexes: newHostIndexes}); + return hostIndex; +}; + +AlgoliaSearchCore.prototype._incrementHostIndex = function(hostType) { + return this._setHostIndexByType( + (this._getHostIndexByType(hostType) + 1) % this.hosts[hostType].length, hostType + ); +}; + +AlgoliaSearchCore.prototype._incrementTimeoutMultipler = function() { + var timeoutMultiplier = Math.max(this._timeoutMultiplier + 1, 4); + return this._partialAppIdDataUpdate({timeoutMultiplier: timeoutMultiplier}); +}; + +AlgoliaSearchCore.prototype._getTimeoutsForRequest = function(hostType) { + return { + connect: this._timeouts.connect * this._timeoutMultiplier, + complete: this._timeouts[hostType] * this._timeoutMultiplier + }; +}; + +function prepareHost(protocol) { + return function prepare(host) { + return protocol + '//' + host.toLowerCase(); + }; +} + +// Prototype.js < 1.7, a widely used library, defines a weird +// Array.prototype.toJSON function that will fail to stringify our content +// appropriately +// refs: +// - https://groups.google.com/forum/#!topic/prototype-core/E-SAVvV_V9Q +// - https://github.com/sstephenson/prototype/commit/038a2985a70593c1a86c230fadbdfe2e4898a48c +// - http://stackoverflow.com/a/3148441/147079 +function safeJSONStringify(obj) { + /* eslint no-extend-native:0 */ + + if (Array.prototype.toJSON === undefined) { + return JSON.stringify(obj); + } + + var toJSON = Array.prototype.toJSON; + delete Array.prototype.toJSON; + var out = JSON.stringify(obj); + Array.prototype.toJSON = toJSON; + + return out; +} + +function shuffle(array) { + var currentIndex = array.length; + var temporaryValue; + var randomIndex; + + // While there remain elements to shuffle... + while (currentIndex !== 0) { + // Pick a remaining element... + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + // And swap it with the current element. + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +} + +function removeCredentials(headers) { + var newHeaders = {}; + + for (var headerName in headers) { + if (Object.prototype.hasOwnProperty.call(headers, headerName)) { + var value; + + if (headerName === 'x-algolia-api-key' || headerName === 'x-algolia-application-id') { + value = '**hidden for security purposes**'; + } else { + value = headers[headerName]; + } + + newHeaders[headerName] = value; + } + } + + return newHeaders; +} + +}).call(this,require(12)) +},{"1":1,"12":12,"20":20,"26":26,"30":30,"31":31,"32":32,"34":34,"36":36,"5":5,"8":8}],18:[function(require,module,exports){ +var inherits = require(7); +var IndexCore = require(20); +var deprecate = require(28); +var deprecatedMessage = require(29); +var exitPromise = require(31); +var errors = require(30); + +var deprecateForwardToSlaves = deprecate( + function() {}, + deprecatedMessage('forwardToSlaves', 'forwardToReplicas') +); + +module.exports = Index; + +function Index() { + IndexCore.apply(this, arguments); +} + +inherits(Index, IndexCore); + +/* +* Add an object in this index +* +* @param content contains the javascript object to add inside the index +* @param objectID (optional) an objectID you want to attribute to this object +* (if the attribute already exist the old object will be overwrite) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.addObject = function(content, objectID, callback) { + var indexObj = this; + + if (arguments.length === 1 || typeof objectID === 'function') { + callback = objectID; + objectID = undefined; + } + + return this.as._jsonRequest({ + method: objectID !== undefined ? + 'PUT' : // update or create + 'POST', // create (API generates an objectID) + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + // create + (objectID !== undefined ? '/' + encodeURIComponent(objectID) : ''), // update or create + body: content, + hostType: 'write', + callback: callback + }); +}; + +/* +* Add several objects +* +* @param objects contains an array of objects to add +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.addObjects = function(objects, callback) { + var isArray = require(8); + var usage = 'Usage: index.addObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: 'addObject', + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Update partially an object (only update attributes passed in argument) +* +* @param partialObject contains the javascript attributes to override, the +* object must contains an objectID attribute +* @param createIfNotExists (optional) if false, avoid an automatic creation of the object +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.partialUpdateObject = function(partialObject, createIfNotExists, callback) { + if (arguments.length === 1 || typeof createIfNotExists === 'function') { + callback = createIfNotExists; + createIfNotExists = undefined; + } + + var indexObj = this; + var url = '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(partialObject.objectID) + '/partial'; + if (createIfNotExists === false) { + url += '?createIfNotExists=false'; + } + + return this.as._jsonRequest({ + method: 'POST', + url: url, + body: partialObject, + hostType: 'write', + callback: callback + }); +}; + +/* +* Partially Override the content of several objects +* +* @param objects contains an array of objects to update (each object must contains a objectID attribute) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.partialUpdateObjects = function(objects, createIfNotExists, callback) { + if (arguments.length === 1 || typeof createIfNotExists === 'function') { + callback = createIfNotExists; + createIfNotExists = true; + } + + var isArray = require(8); + var usage = 'Usage: index.partialUpdateObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: createIfNotExists === true ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', + objectID: objects[i].objectID, + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Override the content of object +* +* @param object contains the javascript object to save, the object must contains an objectID attribute +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.saveObject = function(object, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(object.objectID), + body: object, + hostType: 'write', + callback: callback + }); +}; + +/* +* Override the content of several objects +* +* @param objects contains an array of objects to update (each object must contains a objectID attribute) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.saveObjects = function(objects, callback) { + var isArray = require(8); + var usage = 'Usage: index.saveObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: 'updateObject', + objectID: objects[i].objectID, + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete an object from the index +* +* @param objectID the unique identifier of object to delete +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.deleteObject = function(objectID, callback) { + if (typeof objectID === 'function' || typeof objectID !== 'string' && typeof objectID !== 'number') { + var err = new errors.AlgoliaSearchError( + objectID && typeof objectID !== 'function' + ? 'ObjectID must be a string' + : 'Cannot delete an object without an objectID' + ); + callback = objectID; + if (typeof callback === 'function') { + return callback(err); + } + + return this.as._promise.reject(err); + } + + var indexObj = this; + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(objectID), + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete several objects from an index +* +* @param objectIDs contains an array of objectID to delete +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.deleteObjects = function(objectIDs, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: index.deleteObjects(arrayOfObjectIDs[, callback])'; + + if (!isArray(objectIDs)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: map(objectIDs, function prepareRequest(objectID) { + return { + action: 'deleteObject', + objectID: objectID, + body: { + objectID: objectID + } + }; + }) + }; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete all objects matching a query +* +* @param query the query string +* @param params the optional query parameters +* @param callback (optional) the result callback called with one argument +* error: null or Error('message') +* @deprecated see index.deleteBy +*/ +Index.prototype.deleteByQuery = deprecate(function(query, params, callback) { + var clone = require(26); + var map = require(32); + + var indexObj = this; + var client = indexObj.as; + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = {}; + } else { + params = clone(params); + } + + params.attributesToRetrieve = 'objectID'; + params.hitsPerPage = 1000; + params.distinct = false; + + // when deleting, we should never use cache to get the + // search results + this.clearCache(); + + // there's a problem in how we use the promise chain, + // see how waitTask is done + var promise = this + .search(query, params) + .then(stopOrDelete); + + function stopOrDelete(searchContent) { + // stop here + if (searchContent.nbHits === 0) { + // return indexObj.as._request.resolve(); + return searchContent; + } + + // continue and do a recursive call + var objectIDs = map(searchContent.hits, function getObjectID(object) { + return object.objectID; + }); + + return indexObj + .deleteObjects(objectIDs) + .then(waitTask) + .then(doDeleteByQuery); + } + + function waitTask(deleteObjectsContent) { + return indexObj.waitTask(deleteObjectsContent.taskID); + } + + function doDeleteByQuery() { + return indexObj.deleteByQuery(query, params); + } + + if (!callback) { + return promise; + } + + promise.then(success, failure); + + function success() { + exitPromise(function exit() { + callback(null); + }, client._setTimeout || setTimeout); + } + + function failure(err) { + exitPromise(function exit() { + callback(err); + }, client._setTimeout || setTimeout); + } +}, deprecatedMessage('index.deleteByQuery()', 'index.deleteBy()')); + +/** +* Delete all objects matching a query +* +* the query parameters that can be used are: +* - filters (numeric, facet, tag) +* - geo +* +* you can not send an empty query or filters +* +* @param params the optional query parameters +* @param callback (optional) the result callback called with one argument +* error: null or Error('message') +*/ +Index.prototype.deleteBy = function(params, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/deleteByQuery', + body: {params: indexObj.as._getSearchParams(params, '')}, + hostType: 'write', + callback: callback + }); +}; + +/* +* Browse all content from an index using events. Basically this will do +* .browse() -> .browseFrom -> .browseFrom -> .. until all the results are returned +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @return {EventEmitter} +* @example +* var browser = index.browseAll('cool songs', { +* tagFilters: 'public,comments', +* hitsPerPage: 500 +* }); +* +* browser.on('result', function resultCallback(content) { +* console.log(content.hits); +* }); +* +* // if any error occurs, you get it +* browser.on('error', function(err) { +* throw err; +* }); +* +* // when you have browsed the whole index, you get this event +* browser.on('end', function() { +* console.log('finished'); +* }); +* +* // at any point if you want to stop the browsing process, you can stop it manually +* // otherwise it will go on and on +* browser.stop(); +* +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +Index.prototype.browseAll = function(query, queryParameters) { + if (typeof query === 'object') { + queryParameters = query; + query = undefined; + } + + var merge = require(33); + + var IndexBrowser = require(19); + + var browser = new IndexBrowser(); + var client = this.as; + var index = this; + var params = client._getSearchParams( + merge({}, queryParameters || {}, { + query: query + }), '' + ); + + // start browsing + browseLoop(); + + function browseLoop(cursor) { + if (browser._stopped) { + return; + } + + var body; + + if (cursor !== undefined) { + body = { + cursor: cursor + }; + } else { + body = { + params: params + }; + } + + client._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(index.indexName) + '/browse', + hostType: 'read', + body: body, + callback: browseCallback + }); + } + + function browseCallback(err, content) { + if (browser._stopped) { + return; + } + + if (err) { + browser._error(err); + return; + } + + browser._result(content); + + // no cursor means we are finished browsing + if (content.cursor === undefined) { + browser._end(); + return; + } + + browseLoop(content.cursor); + } + + return browser; +}; + +/* +* Get a Typeahead.js adapter +* @param searchParams contains an object with query parameters (see search for details) +*/ +Index.prototype.ttAdapter = deprecate(function(params) { + var self = this; + return function ttAdapter(query, syncCb, asyncCb) { + var cb; + + if (typeof asyncCb === 'function') { + // typeahead 0.11 + cb = asyncCb; + } else { + // pre typeahead 0.11 + cb = syncCb; + } + + self.search(query, params, function searchDone(err, content) { + if (err) { + cb(err); + return; + } + + cb(content.hits); + }); + }; +}, +'ttAdapter is not necessary anymore and will be removed in the next version,\n' + +'have a look at autocomplete.js (https://github.com/algolia/autocomplete.js)'); + +/* +* Wait the publication of a task on the server. +* All server task are asynchronous and you can check with this method that the task is published. +* +* @param taskID the id of the task returned by server +* @param callback the result callback with with two arguments: +* error: null or Error('message') +* content: the server answer that contains the list of results +*/ +Index.prototype.waitTask = function(taskID, callback) { + // wait minimum 100ms before retrying + var baseDelay = 100; + // wait maximum 5s before retrying + var maxDelay = 5000; + var loop = 0; + + // waitTask() must be handled differently from other methods, + // it's a recursive method using a timeout + var indexObj = this; + var client = indexObj.as; + + var promise = retryLoop(); + + function retryLoop() { + return client._jsonRequest({ + method: 'GET', + hostType: 'read', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/task/' + taskID + }).then(function success(content) { + loop++; + var delay = baseDelay * loop * loop; + if (delay > maxDelay) { + delay = maxDelay; + } + + if (content.status !== 'published') { + return client._promise.delay(delay).then(retryLoop); + } + + return content; + }); + } + + if (!callback) { + return promise; + } + + promise.then(successCb, failureCb); + + function successCb(content) { + exitPromise(function exit() { + callback(null, content); + }, client._setTimeout || setTimeout); + } + + function failureCb(err) { + exitPromise(function exit() { + callback(err); + }, client._setTimeout || setTimeout); + } +}; + +/* +* This function deletes the index content. Settings and index specific API keys are kept untouched. +* +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the settings object or the error message if a failure occurred +*/ +Index.prototype.clearIndex = function(callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/clear', + hostType: 'write', + callback: callback + }); +}; + +/* +* Get settings of this index +* +* @param opts an object of options to add +* @param opts.advanced get more settings like nbShards (useful for Enterprise) +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the settings object or the error message if a failure occurred +*/ +Index.prototype.getSettings = function(opts, callback) { + if (arguments.length === 1 && typeof opts === 'function') { + callback = opts; + opts = {}; + } + opts = opts || {}; + + var indexName = encodeURIComponent(this.indexName); + return this.as._jsonRequest({ + method: 'GET', + url: + '/1/indexes/' + + indexName + + '/settings?getVersion=2' + + (opts.advanced ? '&advanced=' + opts.advanced : ''), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.searchSynonyms = function(params, callback) { + if (typeof params === 'function') { + callback = params; + params = {}; + } else if (params === undefined) { + params = {}; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/search', + body: params, + hostType: 'read', + callback: callback + }); +}; + +function exportData(method, _hitsPerPage, callback) { + function search(page, _previous) { + var options = { + page: page || 0, + hitsPerPage: _hitsPerPage || 100 + }; + var previous = _previous || []; + + return method(options).then(function(result) { + var hits = result.hits; + var nbHits = result.nbHits; + var current = hits.map(function(s) { + delete s._highlightResult; + return s; + }); + var synonyms = previous.concat(current); + if (synonyms.length < nbHits) { + return search(options.page + 1, synonyms); + } + return synonyms; + }); + } + return search().then(function(data) { + if (typeof callback === 'function') { + callback(data); + return undefined; + } + return data; + }); +} + +/** + * Retrieve all the synonyms in an index + * @param [number=100] hitsPerPage The amount of synonyms to retrieve per batch + * @param [function] callback will be called after all synonyms are retrieved + */ +Index.prototype.exportSynonyms = function(hitsPerPage, callback) { + return exportData(this.searchSynonyms.bind(this), hitsPerPage, callback); +}; + +Index.prototype.saveSynonym = function(synonym, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(synonym.objectID) + + '?forwardToReplicas=' + forwardToReplicas, + body: synonym, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.getSynonym = function(objectID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(objectID), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.deleteSynonym = function(objectID, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(objectID) + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.clearSynonyms = function(opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/clear' + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.batchSynonyms = function(synonyms, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/batch' + + '?forwardToReplicas=' + forwardToReplicas + + '&replaceExistingSynonyms=' + (opts.replaceExistingSynonyms ? 'true' : 'false'), + hostType: 'write', + body: synonyms, + callback: callback + }); +}; + +Index.prototype.searchRules = function(params, callback) { + if (typeof params === 'function') { + callback = params; + params = {}; + } else if (params === undefined) { + params = {}; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/search', + body: params, + hostType: 'read', + callback: callback + }); +}; +/** + * Retrieve all the query rules in an index + * @param [number=100] hitsPerPage The amount of query rules to retrieve per batch + * @param [function] callback will be called after all query rules are retrieved + * error: null or Error('message') + */ +Index.prototype.exportRules = function(hitsPerPage, callback) { + return exportData(this.searchRules.bind(this), hitsPerPage, callback); +}; + +Index.prototype.saveRule = function(rule, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (!rule.objectID) { + throw new errors.AlgoliaSearchError('Missing or empty objectID field for rule'); + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(rule.objectID) + + '?forwardToReplicas=' + forwardToReplicas, + body: rule, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.getRule = function(objectID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(objectID), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.deleteRule = function(objectID, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(objectID) + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.clearRules = function(opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/clear' + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.batchRules = function(rules, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/batch' + + '?forwardToReplicas=' + forwardToReplicas + + '&clearExistingRules=' + (opts.clearExistingRules === true ? 'true' : 'false'), + hostType: 'write', + body: rules, + callback: callback + }); +}; + +Index.prototype.exists = function(callback) { + var result = this.getSettings().then(function() { + return true; + }).catch(function(err) { + if (err instanceof errors.AlgoliaSearchError && err.statusCode === 404) { + return false; + } + + throw err; + }); + + if (typeof callback !== 'function') { + return result; + } + + result.then(function(res) { + callback(null, res); + }).catch(function(err) { + callback(err); + }); +}; + +Index.prototype.findObject = function(findCallback, requestOptions, callback) { + requestOptions = requestOptions === undefined ? {} : requestOptions; + var paginate = requestOptions.paginate !== undefined ? requestOptions.paginate : true; + var query = requestOptions.query !== undefined ? requestOptions.query : ''; + + var that = this; + var page = 0; + + var paginateLoop = function() { + requestOptions.page = page; + + return that.search(query, requestOptions).then(function(result) { + var hits = result.hits; + + for (var position = 0; position < hits.length; position++) { + var hit = hits[position]; + if (findCallback(hit)) { + return { + object: hit, + position: position, + page: page + }; + } + } + + page += 1; + + // paginate if option was set and has next page + if (!paginate || page >= result.nbPages) { + throw new errors.ObjectNotFound('Object not found'); + } + + return paginateLoop(); + }); + }; + + var promise = paginateLoop(page); + + if (callback === undefined) { + return promise; + } + + promise + .then(function(res) { + callback(null, res); + }) + .catch(function(err) { + callback(err); + }); +}; + +Index.prototype.getObjectPosition = function(result, objectID) { + var hits = result.hits; + + for (var position = 0; position < hits.length; position++) { + if (hits[position].objectID === objectID) { + return position; + } + } + + return -1; +}; + +/* +* Set settings for this index +* +* @param settings the settings object that can contains : +* - minWordSizefor1Typo: (integer) the minimum number of characters to accept one typo (default = 3). +* - minWordSizefor2Typos: (integer) the minimum number of characters to accept two typos (default = 7). +* - hitsPerPage: (integer) the number of hits per page (default = 10). +* - attributesToRetrieve: (array of strings) default list of attributes to retrieve in objects. +* If set to null, all attributes are retrieved. +* - attributesToHighlight: (array of strings) default list of attributes to highlight. +* If set to null, all indexed attributes are highlighted. +* - attributesToSnippet**: (array of strings) default list of attributes to snippet alongside the number +* of words to return (syntax is attributeName:nbWords). +* By default no snippet is computed. If set to null, no snippet is computed. +* - attributesToIndex: (array of strings) the list of fields you want to index. +* If set to null, all textual and numerical attributes of your objects are indexed, +* but you should update it to get optimal results. +* This parameter has two important uses: +* - Limit the attributes to index: For example if you store a binary image in base64, +* you want to store it and be able to +* retrieve it but you don't want to search in the base64 string. +* - Control part of the ranking*: (see the ranking parameter for full explanation) +* Matches in attributes at the beginning of +* the list will be considered more important than matches in attributes further down the list. +* In one attribute, matching text at the beginning of the attribute will be +* considered more important than text after, you can disable +* this behavior if you add your attribute inside `unordered(AttributeName)`, +* for example attributesToIndex: ["title", "unordered(text)"]. +* - attributesForFaceting: (array of strings) The list of fields you want to use for faceting. +* All strings in the attribute selected for faceting are extracted and added as a facet. +* If set to null, no attribute is used for faceting. +* - attributeForDistinct: (string) The attribute name used for the Distinct feature. +* This feature is similar to the SQL "distinct" keyword: when enabled +* in query with the distinct=1 parameter, all hits containing a duplicate +* value for this attribute are removed from results. +* For example, if the chosen attribute is show_name and several hits have +* the same value for show_name, then only the best one is kept and others are removed. +* - ranking: (array of strings) controls the way results are sorted. +* We have six available criteria: +* - typo: sort according to number of typos, +* - geo: sort according to decreassing distance when performing a geo-location based search, +* - proximity: sort according to the proximity of query words in hits, +* - attribute: sort according to the order of attributes defined by attributesToIndex, +* - exact: +* - if the user query contains one word: sort objects having an attribute +* that is exactly the query word before others. +* For example if you search for the "V" TV show, you want to find it +* with the "V" query and avoid to have all popular TV +* show starting by the v letter before it. +* - if the user query contains multiple words: sort according to the +* number of words that matched exactly (and not as a prefix). +* - custom: sort according to a user defined formula set in **customRanking** attribute. +* The standard order is ["typo", "geo", "proximity", "attribute", "exact", "custom"] +* - customRanking: (array of strings) lets you specify part of the ranking. +* The syntax of this condition is an array of strings containing attributes +* prefixed by asc (ascending order) or desc (descending order) operator. +* For example `"customRanking" => ["desc(population)", "asc(name)"]` +* - queryType: Select how the query words are interpreted, it can be one of the following value: +* - prefixAll: all query words are interpreted as prefixes, +* - prefixLast: only the last word is interpreted as a prefix (default behavior), +* - prefixNone: no query word is interpreted as a prefix. This option is not recommended. +* - highlightPreTag: (string) Specify the string that is inserted before +* the highlighted parts in the query result (default to ""). +* - highlightPostTag: (string) Specify the string that is inserted after +* the highlighted parts in the query result (default to ""). +* - optionalWords: (array of strings) Specify a list of words that should +* be considered as optional when found in the query. +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the server answer or the error message if a failure occurred +*/ +Index.prototype.setSettings = function(settings, opts, callback) { + if (arguments.length === 1 || typeof opts === 'function') { + callback = opts; + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + var indexObj = this; + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/settings?forwardToReplicas=' + + forwardToReplicas, + hostType: 'write', + body: settings, + callback: callback + }); +}; + +/* +* @deprecated see client.listApiKeys() +*/ +Index.prototype.listUserKeys = deprecate(function(callback) { + return this.listApiKeys(callback); +}, deprecatedMessage('index.listUserKeys()', 'client.listApiKeys()')); + +/* +* List all existing API keys to this index +* +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with API keys belonging to the index +* +* @deprecated see client.listApiKeys() +*/ +Index.prototype.listApiKeys = deprecate(function(callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys', + hostType: 'read', + callback: callback + }); +}, deprecatedMessage('index.listApiKeys()', 'client.listApiKeys()')); + +/* +* @deprecated see client.getApiKey() +*/ +Index.prototype.getUserKeyACL = deprecate(function(key, callback) { + return this.getApiKey(key, callback); +}, deprecatedMessage('index.getUserKeyACL()', 'client.getApiKey()')); + + +/* +* Get an API key from this index +* +* @param key +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the right API key +* +* @deprecated see client.getApiKey() +*/ +Index.prototype.getApiKey = deprecate(function(key, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys/' + key, + hostType: 'read', + callback: callback + }); +}, deprecatedMessage('index.getApiKey()', 'client.getApiKey()')); + +/* +* @deprecated see client.deleteApiKey() +*/ +Index.prototype.deleteUserKey = deprecate(function(key, callback) { + return this.deleteApiKey(key, callback); +}, deprecatedMessage('index.deleteUserKey()', 'client.deleteApiKey()')); + +/* +* Delete an existing API key associated to this index +* +* @param key +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the deletion date +* +* @deprecated see client.deleteApiKey() +*/ +Index.prototype.deleteApiKey = deprecate(function(key, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys/' + key, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.deleteApiKey()', 'client.deleteApiKey()')); + +/* +* @deprecated see client.addApiKey() +*/ +Index.prototype.addUserKey = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('index.addUserKey()', 'client.addApiKey()')); + +/* +* Add a new API key to this index +* +* @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that +* can contains the following values: +* - search: allow to search (https and http) +* - addObject: allows to add/update an object in the index (https only) +* - deleteObject : allows to delete an existing object (https only) +* - deleteIndex : allows to delete index content (https only) +* - settings : allows to get index settings (https only) +* - editSettings : allows to change index settings (https only) +* @param {Object} [params] - Optionnal parameters to set for the key +* @param {number} params.validity - Number of seconds after which the key will +* be automatically removed (0 means no time limit for this key) +* @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour +* @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call +* @param {string} params.description - A description for your key +* @param {string[]} params.referers - A list of authorized referers +* @param {Object} params.queryParameters - Force the key to use specific query parameters +* @param {Function} callback - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the added API key +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.addUserKey(['search'], { +* validity: 300, +* maxQueriesPerIPPerHour: 2000, +* maxHitsPerQuery: 3, +* description: 'Eat three fruits', +* referers: ['*.algolia.com'], +* queryParameters: { +* tagFilters: ['public'], +* } +* }) +* @see {@link https://www.algolia.com/doc/rest_api#AddIndexKey|Algolia REST API Documentation} +* +* @deprecated see client.addApiKey() +*/ +Index.prototype.addApiKey = deprecate(function(acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: index.addApiKey(arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = null; + } + + var postObj = { + acl: acls + }; + + if (params) { + postObj.validity = params.validity; + postObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + postObj.maxHitsPerQuery = params.maxHitsPerQuery; + postObj.description = params.description; + + if (params.queryParameters) { + postObj.queryParameters = this.as._getSearchParams(params.queryParameters, ''); + } + + postObj.referers = params.referers; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/keys', + body: postObj, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.addApiKey()', 'client.addApiKey()')); + +/** +* @deprecated use client.addApiKey() +*/ +Index.prototype.addUserKeyWithValidity = deprecate(function deprecatedAddUserKeyWithValidity(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('index.addUserKeyWithValidity()', 'client.addApiKey()')); + +/* +* @deprecated see client.updateApiKey() +*/ +Index.prototype.updateUserKey = deprecate(function(key, acls, params, callback) { + return this.updateApiKey(key, acls, params, callback); +}, deprecatedMessage('index.updateUserKey()', 'client.updateApiKey()')); + +/** +* Update an existing API key of this index +* @param {string} key - The key to update +* @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that +* can contains the following values: +* - search: allow to search (https and http) +* - addObject: allows to add/update an object in the index (https only) +* - deleteObject : allows to delete an existing object (https only) +* - deleteIndex : allows to delete index content (https only) +* - settings : allows to get index settings (https only) +* - editSettings : allows to change index settings (https only) +* @param {Object} [params] - Optionnal parameters to set for the key +* @param {number} params.validity - Number of seconds after which the key will +* be automatically removed (0 means no time limit for this key) +* @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour +* @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call +* @param {string} params.description - A description for your key +* @param {string[]} params.referers - A list of authorized referers +* @param {Object} params.queryParameters - Force the key to use specific query parameters +* @param {Function} callback - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with user keys list +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.updateApiKey('APIKEY', ['search'], { +* validity: 300, +* maxQueriesPerIPPerHour: 2000, +* maxHitsPerQuery: 3, +* description: 'Eat three fruits', +* referers: ['*.algolia.com'], +* queryParameters: { +* tagFilters: ['public'], +* } +* }) +* @see {@link https://www.algolia.com/doc/rest_api#UpdateIndexKey|Algolia REST API Documentation} +* +* @deprecated see client.updateApiKey() +*/ +Index.prototype.updateApiKey = deprecate(function(key, acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: index.updateApiKey(key, arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 2 || typeof params === 'function') { + callback = params; + params = null; + } + + var putObj = { + acl: acls + }; + + if (params) { + putObj.validity = params.validity; + putObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + putObj.maxHitsPerQuery = params.maxHitsPerQuery; + putObj.description = params.description; + + if (params.queryParameters) { + putObj.queryParameters = this.as._getSearchParams(params.queryParameters, ''); + } + + putObj.referers = params.referers; + } + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/keys/' + key, + body: putObj, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.updateApiKey()', 'client.updateApiKey()')); + +},{"19":19,"20":20,"26":26,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"7":7,"8":8}],19:[function(require,module,exports){ +'use strict'; + +// This is the object returned by the `index.browseAll()` method + +module.exports = IndexBrowser; + +var inherits = require(7); +var EventEmitter = require(4).EventEmitter; + +function IndexBrowser() { +} + +inherits(IndexBrowser, EventEmitter); + +IndexBrowser.prototype.stop = function() { + this._stopped = true; + this._clean(); +}; + +IndexBrowser.prototype._end = function() { + this.emit('end'); + this._clean(); +}; + +IndexBrowser.prototype._error = function(err) { + this.emit('error', err); + this._clean(); +}; + +IndexBrowser.prototype._result = function(content) { + this.emit('result', content); +}; + +IndexBrowser.prototype._clean = function() { + this.removeAllListeners('stop'); + this.removeAllListeners('end'); + this.removeAllListeners('error'); + this.removeAllListeners('result'); +}; + +},{"4":4,"7":7}],20:[function(require,module,exports){ +var buildSearchMethod = require(25); +var deprecate = require(28); +var deprecatedMessage = require(29); + +module.exports = IndexCore; + +/* +* Index class constructor. +* You should not use this method directly but use initIndex() function +*/ +function IndexCore(algoliasearch, indexName) { + this.indexName = indexName; + this.as = algoliasearch; + this.typeAheadArgs = null; + this.typeAheadValueOption = null; + + // make sure every index instance has it's own cache + this.cache = {}; +} + +/* +* Clear all queries in cache +*/ +IndexCore.prototype.clearCache = function() { + this.cache = {}; +}; + +/* +* Search inside the index using XMLHttpRequest request (Using a POST query to +* minimize number of OPTIONS queries: Cross-Origin Resource Sharing). +* +* @param {string} [query] the full text query +* @param {object} [args] (optional) if set, contains an object with query parameters: +* - page: (integer) Pagination parameter used to select the page to retrieve. +* Page is zero-based and defaults to 0. Thus, +* to retrieve the 10th page you need to set page=9 +* - hitsPerPage: (integer) Pagination parameter used to select the number of hits per page. Defaults to 20. +* - attributesToRetrieve: a string that contains the list of object attributes +* you want to retrieve (let you minimize the answer size). +* Attributes are separated with a comma (for example "name,address"). +* You can also use an array (for example ["name","address"]). +* By default, all attributes are retrieved. You can also use '*' to retrieve all +* values when an attributesToRetrieve setting is specified for your index. +* - attributesToHighlight: a string that contains the list of attributes you +* want to highlight according to the query. +* Attributes are separated by a comma. You can also use an array (for example ["name","address"]). +* If an attribute has no match for the query, the raw value is returned. +* By default all indexed text attributes are highlighted. +* You can use `*` if you want to highlight all textual attributes. +* Numerical attributes are not highlighted. +* A matchLevel is returned for each highlighted attribute and can contain: +* - full: if all the query terms were found in the attribute, +* - partial: if only some of the query terms were found, +* - none: if none of the query terms were found. +* - attributesToSnippet: a string that contains the list of attributes to snippet alongside +* the number of words to return (syntax is `attributeName:nbWords`). +* Attributes are separated by a comma (Example: attributesToSnippet=name:10,content:10). +* You can also use an array (Example: attributesToSnippet: ['name:10','content:10']). +* By default no snippet is computed. +* - minWordSizefor1Typo: the minimum number of characters in a query word to accept one typo in this word. +* Defaults to 3. +* - minWordSizefor2Typos: the minimum number of characters in a query word +* to accept two typos in this word. Defaults to 7. +* - getRankingInfo: if set to 1, the result hits will contain ranking +* information in _rankingInfo attribute. +* - aroundLatLng: search for entries around a given +* latitude/longitude (specified as two floats separated by a comma). +* For example aroundLatLng=47.316669,5.016670). +* You can specify the maximum distance in meters with the aroundRadius parameter (in meters) +* and the precision for ranking with aroundPrecision +* (for example if you set aroundPrecision=100, two objects that are distant of +* less than 100m will be considered as identical for "geo" ranking parameter). +* At indexing, you should specify geoloc of an object with the _geoloc attribute +* (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}}) +* - insideBoundingBox: search entries inside a given area defined by the two extreme points +* of a rectangle (defined by 4 floats: p1Lat,p1Lng,p2Lat,p2Lng). +* For example insideBoundingBox=47.3165,4.9665,47.3424,5.0201). +* At indexing, you should specify geoloc of an object with the _geoloc attribute +* (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}}) +* - numericFilters: a string that contains the list of numeric filters you want to +* apply separated by a comma. +* The syntax of one filter is `attributeName` followed by `operand` followed by `value`. +* Supported operands are `<`, `<=`, `=`, `>` and `>=`. +* You can have multiple conditions on one attribute like for example numericFilters=price>100,price<1000. +* You can also use an array (for example numericFilters: ["price>100","price<1000"]). +* - tagFilters: filter the query by a set of tags. You can AND tags by separating them by commas. +* To OR tags, you must add parentheses. For example, tags=tag1,(tag2,tag3) means tag1 AND (tag2 OR tag3). +* You can also use an array, for example tagFilters: ["tag1",["tag2","tag3"]] +* means tag1 AND (tag2 OR tag3). +* At indexing, tags should be added in the _tags** attribute +* of objects (for example {"_tags":["tag1","tag2"]}). +* - facetFilters: filter the query by a list of facets. +* Facets are separated by commas and each facet is encoded as `attributeName:value`. +* For example: `facetFilters=category:Book,author:John%20Doe`. +* You can also use an array (for example `["category:Book","author:John%20Doe"]`). +* - facets: List of object attributes that you want to use for faceting. +* Comma separated list: `"category,author"` or array `['category','author']` +* Only attributes that have been added in **attributesForFaceting** index setting +* can be used in this parameter. +* You can also use `*` to perform faceting on all attributes specified in **attributesForFaceting**. +* - queryType: select how the query words are interpreted, it can be one of the following value: +* - prefixAll: all query words are interpreted as prefixes, +* - prefixLast: only the last word is interpreted as a prefix (default behavior), +* - prefixNone: no query word is interpreted as a prefix. This option is not recommended. +* - optionalWords: a string that contains the list of words that should +* be considered as optional when found in the query. +* Comma separated and array are accepted. +* - distinct: If set to 1, enable the distinct feature (disabled by default) +* if the attributeForDistinct index setting is set. +* This feature is similar to the SQL "distinct" keyword: when enabled +* in a query with the distinct=1 parameter, +* all hits containing a duplicate value for the attributeForDistinct attribute are removed from results. +* For example, if the chosen attribute is show_name and several hits have +* the same value for show_name, then only the best +* one is kept and others are removed. +* - restrictSearchableAttributes: List of attributes you want to use for +* textual search (must be a subset of the attributesToIndex index setting) +* either comma separated or as an array +* @param {function} [callback] the result callback called with two arguments: +* error: null or Error('message'). If false, the content contains the error. +* content: the server answer that contains the list of results. +*/ +IndexCore.prototype.search = buildSearchMethod('query'); + +/* +* -- BETA -- +* Search a record similar to the query inside the index using XMLHttpRequest request (Using a POST query to +* minimize number of OPTIONS queries: Cross-Origin Resource Sharing). +* +* @param {string} [query] the similar query +* @param {object} [args] (optional) if set, contains an object with query parameters. +* All search parameters are supported (see search function), restrictSearchableAttributes and facetFilters +* are the two most useful to restrict the similar results and get more relevant content +*/ +IndexCore.prototype.similarSearch = deprecate( + buildSearchMethod('similarQuery'), + deprecatedMessage( + 'index.similarSearch(query[, callback])', + 'index.search({ similarQuery: query }[, callback])' + ) +); + +/* +* Browse index content. The response content will have a `cursor` property that you can use +* to browse subsequent pages for this query. Use `index.browseFrom(cursor)` when you want. +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @param {Function} [callback] - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the browse result +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.browse('cool songs', { +* tagFilters: 'public,comments', +* hitsPerPage: 500 +* }, callback); +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +IndexCore.prototype.browse = function(query, queryParameters, callback) { + var merge = require(33); + + var indexObj = this; + + var page; + var hitsPerPage; + + // we check variadic calls that are not the one defined + // .browse()/.browse(fn) + // => page = 0 + if (arguments.length === 0 || arguments.length === 1 && typeof arguments[0] === 'function') { + page = 0; + callback = arguments[0]; + query = undefined; + } else if (typeof arguments[0] === 'number') { + // .browse(2)/.browse(2, 10)/.browse(2, fn)/.browse(2, 10, fn) + page = arguments[0]; + if (typeof arguments[1] === 'number') { + hitsPerPage = arguments[1]; + } else if (typeof arguments[1] === 'function') { + callback = arguments[1]; + hitsPerPage = undefined; + } + query = undefined; + queryParameters = undefined; + } else if (typeof arguments[0] === 'object') { + // .browse(queryParameters)/.browse(queryParameters, cb) + if (typeof arguments[1] === 'function') { + callback = arguments[1]; + } + queryParameters = arguments[0]; + query = undefined; + } else if (typeof arguments[0] === 'string' && typeof arguments[1] === 'function') { + // .browse(query, cb) + callback = arguments[1]; + queryParameters = undefined; + } + + // otherwise it's a .browse(query)/.browse(query, queryParameters)/.browse(query, queryParameters, cb) + + // get search query parameters combining various possible calls + // to .browse(); + queryParameters = merge({}, queryParameters || {}, { + page: page, + hitsPerPage: hitsPerPage, + query: query + }); + + var params = this.as._getSearchParams(queryParameters, ''); + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/browse', + body: {params: params}, + hostType: 'read', + callback: callback + }); +}; + +/* +* Continue browsing from a previous position (cursor), obtained via a call to `.browse()`. +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @param {Function} [callback] - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the browse result +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.browseFrom('14lkfsakl32', callback); +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +IndexCore.prototype.browseFrom = function(cursor, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/browse', + body: {cursor: cursor}, + hostType: 'read', + callback: callback + }); +}; + +/* +* Search for facet values +* https://www.algolia.com/doc/rest-api/search#search-for-facet-values +* +* @param {string} params.facetName Facet name, name of the attribute to search for values in. +* Must be declared as a facet +* @param {string} params.facetQuery Query for the facet search +* @param {string} [params.*] Any search parameter of Algolia, +* see https://www.algolia.com/doc/api-client/javascript/search#search-parameters +* Pagination is not supported. The page and hitsPerPage parameters will be ignored. +* @param callback (optional) +*/ +IndexCore.prototype.searchForFacetValues = function(params, callback) { + var clone = require(26); + var omit = require(34); + var usage = 'Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])'; + + if (params.facetName === undefined || params.facetQuery === undefined) { + throw new Error(usage); + } + + var facetName = params.facetName; + var filteredParams = omit(clone(params), function(keyName) { + return keyName === 'facetName'; + }); + var searchParameters = this.as._getSearchParams(filteredParams, ''); + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + + encodeURIComponent(this.indexName) + '/facets/' + encodeURIComponent(facetName) + '/query', + hostType: 'read', + body: {params: searchParameters}, + callback: callback + }); +}; + +IndexCore.prototype.searchFacet = deprecate(function(params, callback) { + return this.searchForFacetValues(params, callback); +}, deprecatedMessage( + 'index.searchFacet(params[, callback])', + 'index.searchForFacetValues(params[, callback])' +)); + +IndexCore.prototype._search = function(params, url, callback, additionalUA) { + return this.as._jsonRequest({ + cache: this.cache, + method: 'POST', + url: url || '/1/indexes/' + encodeURIComponent(this.indexName) + '/query', + body: {params: params}, + hostType: 'read', + fallback: { + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName), + body: {params: params} + }, + callback: callback, + additionalUA: additionalUA + }); +}; + +/* +* Get an object from this index +* +* @param objectID the unique identifier of the object to retrieve +* @param attrs (optional) if set, contains the array of attribute names to retrieve +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the object to retrieve or the error message if a failure occurred +*/ +IndexCore.prototype.getObject = function(objectID, attrs, callback) { + var indexObj = this; + + if (arguments.length === 1 || typeof attrs === 'function') { + callback = attrs; + attrs = undefined; + } + + var params = ''; + if (attrs !== undefined) { + params = '?attributes='; + for (var i = 0; i < attrs.length; ++i) { + if (i !== 0) { + params += ','; + } + params += attrs[i]; + } + } + + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(objectID) + params, + hostType: 'read', + callback: callback + }); +}; + +/* +* Get several objects from this index +* +* @param objectIDs the array of unique identifier of objects to retrieve +*/ +IndexCore.prototype.getObjects = function(objectIDs, attributesToRetrieve, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: index.getObjects(arrayOfObjectIDs[, callback])'; + + if (!isArray(objectIDs)) { + throw new Error(usage); + } + + var indexObj = this; + + if (arguments.length === 1 || typeof attributesToRetrieve === 'function') { + callback = attributesToRetrieve; + attributesToRetrieve = undefined; + } + + var body = { + requests: map(objectIDs, function prepareRequest(objectID) { + var request = { + indexName: indexObj.indexName, + objectID: objectID + }; + + if (attributesToRetrieve) { + request.attributesToRetrieve = attributesToRetrieve.join(','); + } + + return request; + }) + }; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/*/objects', + hostType: 'read', + body: body, + callback: callback + }); +}; + +IndexCore.prototype.as = null; +IndexCore.prototype.indexName = null; +IndexCore.prototype.typeAheadArgs = null; +IndexCore.prototype.typeAheadValueOption = null; + +},{"25":25,"26":26,"28":28,"29":29,"32":32,"33":33,"34":34,"8":8}],21:[function(require,module,exports){ +'use strict'; + +var AlgoliaSearch = require(16); +var createAlgoliasearch = require(22); + +module.exports = createAlgoliasearch(AlgoliaSearch, 'Browser'); + +},{"16":16,"22":22}],22:[function(require,module,exports){ +(function (process){ +'use strict'; + +var global = require(6); +var Promise = global.Promise || require(3).Promise; + +// This is the standalone browser build entry point +// Browser implementation of the Algolia Search JavaScript client, +// using XMLHttpRequest, XDomainRequest and JSONP as fallback +module.exports = function createAlgoliasearch(AlgoliaSearch, uaSuffix) { + var inherits = require(7); + var errors = require(30); + var inlineHeaders = require(23); + var jsonpRequest = require(24); + var places = require(35); + uaSuffix = uaSuffix || ''; + + if (process.env.NODE_ENV === 'debug') { + require(1).enable('algoliasearch*'); + } + + function algoliasearch(applicationID, apiKey, opts) { + var cloneDeep = require(26); + + opts = cloneDeep(opts || {}); + + opts._ua = opts._ua || algoliasearch.ua; + + return new AlgoliaSearchBrowser(applicationID, apiKey, opts); + } + + algoliasearch.version = require(37); + + algoliasearch.ua = + 'Algolia for JavaScript (' + algoliasearch.version + '); ' + uaSuffix; + + algoliasearch.initPlaces = places(algoliasearch); + + // we expose into window no matter how we are used, this will allow + // us to easily debug any website running algolia + global.__algolia = { + debug: require(1), + algoliasearch: algoliasearch + }; + + var support = { + hasXMLHttpRequest: 'XMLHttpRequest' in global, + hasXDomainRequest: 'XDomainRequest' in global + }; + + if (support.hasXMLHttpRequest) { + support.cors = 'withCredentials' in new XMLHttpRequest(); + } + + function AlgoliaSearchBrowser() { + // call AlgoliaSearch constructor + AlgoliaSearch.apply(this, arguments); + } + + inherits(AlgoliaSearchBrowser, AlgoliaSearch); + + AlgoliaSearchBrowser.prototype._request = function request(url, opts) { + return new Promise(function wrapRequest(resolve, reject) { + // no cors or XDomainRequest, no request + if (!support.cors && !support.hasXDomainRequest) { + // very old browser, not supported + reject(new errors.Network('CORS not supported')); + return; + } + + url = inlineHeaders(url, opts.headers); + + var body = opts.body; + var req = support.cors ? new XMLHttpRequest() : new XDomainRequest(); + var reqTimeout; + var timedOut; + var connected = false; + + reqTimeout = setTimeout(onTimeout, opts.timeouts.connect); + // we set an empty onprogress listener + // so that XDomainRequest on IE9 is not aborted + // refs: + // - https://github.com/algolia/algoliasearch-client-js/issues/76 + // - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment + req.onprogress = onProgress; + if ('onreadystatechange' in req) req.onreadystatechange = onReadyStateChange; + req.onload = onLoad; + req.onerror = onError; + + // do not rely on default XHR async flag, as some analytics code like hotjar + // breaks it and set it to false by default + if (req instanceof XMLHttpRequest) { + req.open(opts.method, url, true); + + // The Analytics API never accepts Auth headers as query string + // this option exists specifically for them. + if (opts.forceAuthHeaders) { + req.setRequestHeader( + 'x-algolia-application-id', + opts.headers['x-algolia-application-id'] + ); + req.setRequestHeader( + 'x-algolia-api-key', + opts.headers['x-algolia-api-key'] + ); + } + } else { + req.open(opts.method, url); + } + + // headers are meant to be sent after open + if (support.cors) { + if (body) { + if (opts.method === 'POST') { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Simple_requests + req.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); + } else { + req.setRequestHeader('content-type', 'application/json'); + } + } + req.setRequestHeader('accept', 'application/json'); + } + + if (body) { + req.send(body); + } else { + req.send(); + } + + // event object not received in IE8, at least + // but we do not use it, still important to note + function onLoad(/* event */) { + // When browser does not supports req.timeout, we can + // have both a load and timeout event, since handled by a dumb setTimeout + if (timedOut) { + return; + } + + clearTimeout(reqTimeout); + + var out; + + try { + out = { + body: JSON.parse(req.responseText), + responseText: req.responseText, + statusCode: req.status, + // XDomainRequest does not have any response headers + headers: req.getAllResponseHeaders && req.getAllResponseHeaders() || {} + }; + } catch (e) { + out = new errors.UnparsableJSON({ + more: req.responseText + }); + } + + if (out instanceof errors.UnparsableJSON) { + reject(out); + } else { + resolve(out); + } + } + + function onError(event) { + if (timedOut) { + return; + } + + clearTimeout(reqTimeout); + + // error event is trigerred both with XDR/XHR on: + // - DNS error + // - unallowed cross domain request + reject( + new errors.Network({ + more: event + }) + ); + } + + function onTimeout() { + timedOut = true; + req.abort(); + + reject(new errors.RequestTimeout()); + } + + function onConnect() { + connected = true; + clearTimeout(reqTimeout); + reqTimeout = setTimeout(onTimeout, opts.timeouts.complete); + } + + function onProgress() { + if (!connected) onConnect(); + } + + function onReadyStateChange() { + if (!connected && req.readyState > 1) onConnect(); + } + }); + }; + + AlgoliaSearchBrowser.prototype._request.fallback = function requestFallback(url, opts) { + url = inlineHeaders(url, opts.headers); + + return new Promise(function wrapJsonpRequest(resolve, reject) { + jsonpRequest(url, opts, function jsonpRequestDone(err, content) { + if (err) { + reject(err); + return; + } + + resolve(content); + }); + }); + }; + + AlgoliaSearchBrowser.prototype._promise = { + reject: function rejectPromise(val) { + return Promise.reject(val); + }, + resolve: function resolvePromise(val) { + return Promise.resolve(val); + }, + delay: function delayPromise(ms) { + return new Promise(function resolveOnTimeout(resolve/* , reject*/) { + setTimeout(resolve, ms); + }); + }, + all: function all(promises) { + return Promise.all(promises); + } + }; + + return algoliasearch; +}; + +}).call(this,require(12)) +},{"1":1,"12":12,"23":23,"24":24,"26":26,"3":3,"30":30,"35":35,"37":37,"6":6,"7":7}],23:[function(require,module,exports){ +'use strict'; + +module.exports = inlineHeaders; + +var encode = require(14); + +function inlineHeaders(url, headers) { + if (/\?/.test(url)) { + url += '&'; + } else { + url += '?'; + } + + return url + encode(headers); +} + +},{"14":14}],24:[function(require,module,exports){ +'use strict'; + +module.exports = jsonpRequest; + +var errors = require(30); + +var JSONPCounter = 0; + +function jsonpRequest(url, opts, cb) { + if (opts.method !== 'GET') { + cb(new Error('Method ' + opts.method + ' ' + url + ' is not supported by JSONP.')); + return; + } + + opts.debug('JSONP: start'); + + var cbCalled = false; + var timedOut = false; + + JSONPCounter += 1; + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + var cbName = 'algoliaJSONP_' + JSONPCounter; + var done = false; + + window[cbName] = function(data) { + removeGlobals(); + + if (timedOut) { + opts.debug('JSONP: Late answer, ignoring'); + return; + } + + cbCalled = true; + + clean(); + + cb(null, { + body: data, + responseText: JSON.stringify(data)/* , + // We do not send the statusCode, there's no statusCode in JSONP, it will be + // computed using data.status && data.message like with XDR + statusCode*/ + }); + }; + + // add callback by hand + url += '&callback=' + cbName; + + // add body params manually + if (opts.jsonBody && opts.jsonBody.params) { + url += '&' + opts.jsonBody.params; + } + + var ontimeout = setTimeout(timeout, opts.timeouts.complete); + + // script onreadystatechange needed only for + // <= IE8 + // https://github.com/angular/angular.js/issues/4523 + script.onreadystatechange = readystatechange; + script.onload = success; + script.onerror = error; + + script.async = true; + script.defer = true; + script.src = url; + head.appendChild(script); + + function success() { + opts.debug('JSONP: success'); + + if (done || timedOut) { + return; + } + + done = true; + + // script loaded but did not call the fn => script loading error + if (!cbCalled) { + opts.debug('JSONP: Fail. Script loaded but did not call the callback'); + clean(); + cb(new errors.JSONPScriptFail()); + } + } + + function readystatechange() { + if (this.readyState === 'loaded' || this.readyState === 'complete') { + success(); + } + } + + function clean() { + clearTimeout(ontimeout); + script.onload = null; + script.onreadystatechange = null; + script.onerror = null; + head.removeChild(script); + } + + function removeGlobals() { + try { + delete window[cbName]; + delete window[cbName + '_loaded']; + } catch (e) { + window[cbName] = window[cbName + '_loaded'] = undefined; + } + } + + function timeout() { + opts.debug('JSONP: Script timeout'); + timedOut = true; + clean(); + cb(new errors.RequestTimeout()); + } + + function error() { + opts.debug('JSONP: Script error'); + + if (done || timedOut) { + return; + } + + clean(); + cb(new errors.JSONPScriptError()); + } +} + +},{"30":30}],25:[function(require,module,exports){ +module.exports = buildSearchMethod; + +var errors = require(30); + +/** + * Creates a search method to be used in clients + * @param {string} queryParam the name of the attribute used for the query + * @param {string} url the url + * @return {function} the search method + */ +function buildSearchMethod(queryParam, url) { + /** + * The search method. Prepares the data and send the query to Algolia. + * @param {string} query the string used for query search + * @param {object} args additional parameters to send with the search + * @param {function} [callback] the callback to be called with the client gets the answer + * @return {undefined|Promise} If the callback is not provided then this methods returns a Promise + */ + return function search(query, args, callback) { + // warn V2 users on how to search + if (typeof query === 'function' && typeof args === 'object' || + typeof callback === 'object') { + // .search(query, params, cb) + // .search(cb, params) + throw new errors.AlgoliaSearchError('index.search usage is index.search(query, params, cb)'); + } + + // Normalizing the function signature + if (arguments.length === 0 || typeof query === 'function') { + // Usage : .search(), .search(cb) + callback = query; + query = ''; + } else if (arguments.length === 1 || typeof args === 'function') { + // Usage : .search(query/args), .search(query, cb) + callback = args; + args = undefined; + } + // At this point we have 3 arguments with values + + // Usage : .search(args) // careful: typeof null === 'object' + if (typeof query === 'object' && query !== null) { + args = query; + query = undefined; + } else if (query === undefined || query === null) { // .search(undefined/null) + query = ''; + } + + var params = ''; + + if (query !== undefined) { + params += queryParam + '=' + encodeURIComponent(query); + } + + var additionalUA; + if (args !== undefined) { + if (args.additionalUA) { + additionalUA = args.additionalUA; + delete args.additionalUA; + } + // `_getSearchParams` will augment params, do not be fooled by the = versus += from previous if + params = this.as._getSearchParams(args, params); + } + + + return this._search(params, url, callback, additionalUA); + }; +} + +},{"30":30}],26:[function(require,module,exports){ +module.exports = function clone(obj) { + return JSON.parse(JSON.stringify(obj)); +}; + +},{}],27:[function(require,module,exports){ +module.exports = createAnalyticsClient; + +var algoliasearch = require(21); + +function createAnalyticsClient(appId, apiKey, opts) { + var analytics = {}; + + opts = opts || {}; + // there need to be 4 hosts, like on the client, since if requests fail, + // the counter goes up by 1, so we need to have the same amount of hosts + // 4 because: -dsn, -1, -2, -3 + // This is done because the APPID used for search will be the same for the analytics client created, + // and since the state of available hosts is shared by APPID globally for the module, we had issues + // where the hostIndex would be 1 while the array was only one entry (you got an empty host) + opts.hosts = opts.hosts || [ + 'analytics.algolia.com', + 'analytics.algolia.com', + 'analytics.algolia.com', + 'analytics.algolia.com' + ]; + opts.protocol = opts.protocol || 'https:'; + + analytics.as = algoliasearch(appId, apiKey, opts); + + analytics.getABTests = function(_params, callback) { + var params = params || {}; + var offset = params.offset || 0; + var limit = params.limit || 10; + + return this.as._jsonRequest({ + method: 'GET', + url: '/2/abtests?offset=' + encodeURIComponent(offset) + '&limit=' + encodeURIComponent(limit), + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.getABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/2/abtests/' + encodeURIComponent(abTestID), + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.addABTest = function(abTest, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/2/abtests', + body: abTest, + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.stopABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/2/abtests/' + encodeURIComponent(abTestID) + '/stop', + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.deleteABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'DELETE', + url: '/2/abtests/' + encodeURIComponent(abTestID), + hostType: 'write', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.waitTask = function(indexName, taskID, callback) { + return this.as.initIndex(indexName).waitTask(taskID, callback); + }; + + return analytics; +} + +},{"21":21}],28:[function(require,module,exports){ +module.exports = function deprecate(fn, message) { + var warned = false; + + function deprecated() { + if (!warned) { + /* eslint no-console:0 */ + console.warn(message); + warned = true; + } + + return fn.apply(this, arguments); + } + + return deprecated; +}; + +},{}],29:[function(require,module,exports){ +module.exports = function deprecatedMessage(previousUsage, newUsage) { + var githubAnchorLink = previousUsage.toLowerCase() + .replace(/[\.\(\)]/g, ''); + + return 'algoliasearch: `' + previousUsage + '` was replaced by `' + newUsage + + '`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#' + githubAnchorLink; +}; + +},{}],30:[function(require,module,exports){ +'use strict'; + +// This file hosts our error definitions +// We use custom error "types" so that we can act on them when we need it +// e.g.: if error instanceof errors.UnparsableJSON then.. + +var inherits = require(7); + +function AlgoliaSearchError(message, extraProperties) { + var forEach = require(5); + + var error = this; + + // try to get a stacktrace + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + error.stack = (new Error()).stack || 'Cannot get a stacktrace, browser is too old'; + } + + this.name = 'AlgoliaSearchError'; + this.message = message || 'Unknown error'; + + if (extraProperties) { + forEach(extraProperties, function addToErrorObject(value, key) { + error[key] = value; + }); + } +} + +inherits(AlgoliaSearchError, Error); + +function createCustomError(name, message) { + function AlgoliaSearchCustomError() { + var args = Array.prototype.slice.call(arguments, 0); + + // custom message not set, use default + if (typeof args[0] !== 'string') { + args.unshift(message); + } + + AlgoliaSearchError.apply(this, args); + this.name = 'AlgoliaSearch' + name + 'Error'; + } + + inherits(AlgoliaSearchCustomError, AlgoliaSearchError); + + return AlgoliaSearchCustomError; +} + +// late exports to let various fn defs and inherits take place +module.exports = { + AlgoliaSearchError: AlgoliaSearchError, + UnparsableJSON: createCustomError( + 'UnparsableJSON', + 'Could not parse the incoming response as JSON, see err.more for details' + ), + RequestTimeout: createCustomError( + 'RequestTimeout', + 'Request timed out before getting a response' + ), + Network: createCustomError( + 'Network', + 'Network issue, see err.more for details' + ), + JSONPScriptFail: createCustomError( + 'JSONPScriptFail', + '"),window.ALGOLIA_SUPPORTS_DOCWRITE===!0?(document.write(''),n("document.write")()):r(o,n("DOMElement"))}catch(s){r(o,n("DOMElement"))}}function n(e){return function(){var t="AlgoliaSearch: loaded V2 script using "+e;window.console&&window.console.log&&window.console.log(t)}}t.exports=o},{1:1}],4:[function(e,t,r){"use strict";function o(){var e="-- AlgoliaSearch V2 => V3 error --\nYou are trying to use a new version of the AlgoliaSearch JavaScript client with an old notation.\nPlease read our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Migration-guide-from-2.x.x-to-3.x.x\n-- /AlgoliaSearch V2 => V3 error --";window.AlgoliaSearch=function(){throw new Error(e)},window.AlgoliaSearchHelper=function(){throw new Error(e)},window.AlgoliaExplainResults=function(){throw new Error(e)}}t.exports=o},{}],5:[function(e,t,r){"use strict";function o(t){var r=e(2),o=e(3),n=e(4);r(t)?o(t):n()}o("algoliasearch")},{2:2,3:3,4:4}]},{},[5])(5)}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.algoliasearch=e()}}(function(){var e;return function t(e,r,o){function n(s,a){if(!r[s]){if(!e[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(i)return i(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};e[s][0].call(l.exports,function(t){var r=e[s][1][t];return n(r?r:t)},l,l.exports,t,e,r,o)}return r[s].exports}for(var i="function"==typeof require&&require,s=0;s=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+r.humanize(this.diff),t){var o="color: "+this.color;e.splice(1,0,o,"color: inherit");var n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(i=n))}),e.splice(i,0,o)}}function s(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(e){try{null==e?r.storage.removeItem("debug"):r.storage.debug=e}catch(t){}}function c(){var e;try{e=r.storage.debug}catch(t){}return!e&&"undefined"!=typeof o&&"env"in o&&(e=o.env.DEBUG),e}function u(){try{return window.localStorage}catch(e){}}r=t.exports=e(2),r.log=s,r.formatArgs=i,r.save=a,r.load=c,r.useColors=n,r.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),r.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],r.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},r.enable(c())}).call(this,e(12))},{12:12,2:2}],2:[function(e,t,r){function o(e){var t,o=0;for(t in e)o=(o<<5)-o+e.charCodeAt(t),o|=0;return r.colors[Math.abs(o)%r.colors.length]}function n(e){function t(){if(t.enabled){var e=t,o=+new Date,n=o-(u||o);e.diff=n,e.prev=u,e.curr=o,u=o;for(var i=new Array(arguments.length),s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},o.prototype.on=o.prototype.addListener,o.prototype.once=function(e,t){function r(){this.removeListener(e,r),o||(o=!0,t.apply(this,arguments))}if(!n(t))throw TypeError("listener must be a function");var o=!1;return r.listener=t,this.on(e,r),this},o.prototype.removeListener=function(e,t){var r,o,i,a;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],i=r.length,o=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(a=i;a-- >0;)if(r[a]===t||r[a].listener&&r[a].listener===t){o=a;break}if(o<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},o.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],n(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},o.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},o.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},o.listenerCount=function(e,t){return e.listenerCount(t)}},{}],5:[function(e,t,r){var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString;t.exports=function(e,t,r){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var i=e.length;if(i===+i)for(var s=0;s100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),o=(t[2]||"ms").toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return r*p;case"days":case"day":case"d":return r*l;case"hours":case"hour":case"hrs":case"hr":case"h":return r*u;case"minutes":case"minute":case"mins":case"min":case"m":return r*c;case"seconds":case"second":case"secs":case"sec":case"s":return r*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function n(e){return e>=l?Math.round(e/l)+"d":e>=u?Math.round(e/u)+"h":e>=c?Math.round(e/c)+"m":e>=a?Math.round(e/a)+"s":e+"ms"}function i(e){return s(e,l,"day")||s(e,u,"hour")||s(e,c,"minute")||s(e,a,"second")||e+" ms"}function s(e,t,r){if(!(e0)return o(e);if("number"===r&&isNaN(e)===!1)return t["long"]?i(e):n(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],10:[function(e,t,r){"use strict";var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Array.prototype.slice,s=e(11),a=Object.prototype.propertyIsEnumerable,c=!a.call({toString:null},"toString"),u=a.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(e){var t=e.constructor;return t&&t.prototype===e},d={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{p(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),f=function(e){if("undefined"==typeof window||!h)return p(e);try{return p(e)}catch(t){return!1}},y=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===n.call(e),i=s(e),a=t&&"[object String]"===n.call(e),p=[];if(!t&&!r&&!i)throw new TypeError("Object.keys called on a non-object");var d=u&&r;if(a&&e.length>0&&!o.call(e,0))for(var h=0;h0)for(var y=0;y=0&&"[object Function]"===o.call(e.callee)),r}},{}],12:[function(e,t,r){function o(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(p===setTimeout)return setTimeout(e,0);if((p===o||!p)&&setTimeout)return p=setTimeout,setTimeout(e,0);try{return p(e,0)}catch(t){try{return p.call(null,e,0)}catch(t){return p.call(this,e,0)}}}function s(e){if(d===clearTimeout)return clearTimeout(e);if((d===n||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function a(){m&&f&&(m=!1,f.length?y=f.concat(y):v=-1,y.length&&c())}function c(){if(!m){var e=i(a);m=!0;for(var t=y.length;t;){for(f=y,y=[];++v1)for(var r=1;r0&&u>c&&(u=c);for(var l=0;l=0?(p=y.substr(0,m),d=y.substr(m+1)):(p=y,d=""),h=decodeURIComponent(p),f=decodeURIComponent(d),o(s,h)?n(s[h])?s[h].push(f):s[h]=[s[h],f]:s[h]=f}return s};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],14:[function(e,t,r){"use strict";function o(e,t){if(e.map)return e.map(t);for(var r=[],o=0;o0)n.scope=r;else if("undefined"!=typeof r)throw new Error("the scope given to `copyIndex` was not an array with settings, synonyms or rules");return this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(e)+"/operation",body:n,hostType:"write",callback:i})},o.prototype.getLogs=function(t,r,o){var n=e(26),i={};return"object"==typeof t?(i=n(t),o=r):0===arguments.length||"function"==typeof t?o=t:1===arguments.length||"function"==typeof r?(o=r,i.offset=t):(i.offset=t,i.length=r),void 0===i.offset&&(i.offset=0),void 0===i.length&&(i.length=10),this._jsonRequest({method:"GET",url:"/1/logs?"+this._getSearchParams(i,""),hostType:"read",callback:o})},o.prototype.listIndexes=function(e,t){var r="";return void 0===e||"function"==typeof e?t=e:r="?page="+e,this._jsonRequest({method:"GET",url:"/1/indexes"+r,hostType:"read",callback:t})},o.prototype.initIndex=function(e){return new i(this,e)},o.prototype.initAnalytics=function(t){var r=e(27);return r(this.applicationID,this.apiKey,t)},o.prototype.listUserKeys=s(function(e){return this.listApiKeys(e)},a("client.listUserKeys()","client.listApiKeys()")),o.prototype.listApiKeys=function(e){return this._jsonRequest({method:"GET",url:"/1/keys",hostType:"read",callback:e})},o.prototype.getUserKeyACL=s(function(e,t){return this.getApiKey(e,t)},a("client.getUserKeyACL()","client.getApiKey()")),o.prototype.getApiKey=function(e,t){return this._jsonRequest({method:"GET",url:"/1/keys/"+e,hostType:"read",callback:t})},o.prototype.deleteUserKey=s(function(e,t){return this.deleteApiKey(e,t)},a("client.deleteUserKey()","client.deleteApiKey()")),o.prototype.deleteApiKey=function(e,t){return this._jsonRequest({method:"DELETE",url:"/1/keys/"+e,hostType:"write",callback:t})},o.prototype.restoreApiKey=function(e,t){return this._jsonRequest({method:"POST",url:"/1/keys/"+e+"/restore",hostType:"write",callback:t})},o.prototype.addUserKey=s(function(e,t,r){return this.addApiKey(e,t,r)},a("client.addUserKey()","client.addApiKey()")),o.prototype.addApiKey=function(t,r,o){var n=e(8),i="Usage: client.addApiKey(arrayOfAcls[, params, callback])";if(!n(t))throw new Error(i);1!==arguments.length&&"function"!=typeof r||(o=r,r=null);var s={acl:t};return r&&(s.validity=r.validity,s.maxQueriesPerIPPerHour=r.maxQueriesPerIPPerHour,s.maxHitsPerQuery=r.maxHitsPerQuery,s.indexes=r.indexes,s.description=r.description,r.queryParameters&&(s.queryParameters=this._getSearchParams(r.queryParameters,"")),s.referers=r.referers),this._jsonRequest({method:"POST",url:"/1/keys",body:s,hostType:"write",callback:o})},o.prototype.addUserKeyWithValidity=s(function(e,t,r){return this.addApiKey(e,t,r)},a("client.addUserKeyWithValidity()","client.addApiKey()")),o.prototype.updateUserKey=s(function(e,t,r,o){return this.updateApiKey(e,t,r,o)},a("client.updateUserKey()","client.updateApiKey()")),o.prototype.updateApiKey=function(t,r,o,n){var i=e(8),s="Usage: client.updateApiKey(key, arrayOfAcls[, params, callback])";if(!i(r))throw new Error(s);2!==arguments.length&&"function"!=typeof o||(n=o,o=null);var a={acl:r};return o&&(a.validity=o.validity,a.maxQueriesPerIPPerHour=o.maxQueriesPerIPPerHour,a.maxHitsPerQuery=o.maxHitsPerQuery,a.indexes=o.indexes,a.description=o.description,o.queryParameters&&(a.queryParameters=this._getSearchParams(o.queryParameters,"")),a.referers=o.referers),this._jsonRequest({method:"PUT",url:"/1/keys/"+t,body:a,hostType:"write",callback:n})},o.prototype.startQueriesBatch=s(function(){this._batch=[]},a("client.startQueriesBatch()","client.search()")),o.prototype.addQueryInBatch=s(function(e,t,r){this._batch.push({indexName:e,query:t,params:r})},a("client.addQueryInBatch()","client.search()")),o.prototype.sendQueriesBatch=s(function(e){return this.search(this._batch,e)},a("client.sendQueriesBatch()","client.search()")),o.prototype.batch=function(t,r){var o=e(8),n="Usage: client.batch(operations[, callback])";if(!o(t))throw new Error(n);return this._jsonRequest({method:"POST",url:"/1/indexes/*/batch",body:{requests:t},hostType:"write",callback:r})},o.prototype.assignUserID=function(e,t){if(!e.userID||!e.cluster)throw new l.AlgoliaSearchError("You have to provide both a userID and cluster",e);return this._jsonRequest({method:"POST",url:"/1/clusters/mapping",hostType:"write",body:{cluster:e.cluster},callback:t,headers:{"x-algolia-user-id":e.userID}})},o.prototype.assignUserIDs=function(e,t){if(!e.userIDs||!e.cluster)throw new l.AlgoliaSearchError("You have to provide both an array of userIDs and cluster",e);return this._jsonRequest({method:"POST",url:"/1/clusters/mapping/batch",hostType:"write",body:{cluster:e.cluster,users:e.userIDs},callback:t})},o.prototype.getTopUserID=function(e){return this._jsonRequest({method:"GET",url:"/1/clusters/mapping/top",hostType:"read",callback:e})},o.prototype.getUserID=function(e,t){if(!e.userID)throw new l.AlgoliaSearchError("You have to provide a userID",{debugData:e});return this._jsonRequest({method:"GET",url:"/1/clusters/mapping/"+e.userID,hostType:"read",callback:t})},o.prototype.listClusters=function(e){return this._jsonRequest({method:"GET",url:"/1/clusters",hostType:"read",callback:e})},o.prototype.listUserIDs=function(e,t){return this._jsonRequest({method:"GET",url:"/1/clusters/mapping",body:e,hostType:"read",callback:t})},o.prototype.removeUserID=function(e,t){if(!e.userID)throw new l.AlgoliaSearchError("You have to provide a userID",{debugData:e});return this._jsonRequest({method:"DELETE",url:"/1/clusters/mapping",hostType:"write",callback:t,headers:{"x-algolia-user-id":e.userID}})},o.prototype.searchUserIDs=function(e,t){return this._jsonRequest({method:"POST",url:"/1/clusters/mapping/search",body:e,hostType:"read",callback:t})},o.prototype.setPersonalizationStrategy=function(e,t){return this._jsonRequest({method:"POST",url:"/1/recommendation/personalization/strategy",body:e,hostType:"write",callback:t})},o.prototype.getPersonalizationStrategy=function(e){return this._jsonRequest({method:"GET",url:"/1/recommendation/personalization/strategy",hostType:"read",callback:e})},o.prototype.destroy=n,o.prototype.enableRateLimitForward=n,o.prototype.disableRateLimitForward=n,o.prototype.useSecuredAPIKey=n,o.prototype.disableSecuredAPIKey=n,o.prototype.generateSecuredApiKey=n,o.prototype.getSecuredApiKeyRemainingValidity=n},{17:17,18:18,26:26,27:27,28:28,29:29,30:30,7:7,8:8}],17:[function(e,t,r){ +(function(r){function o(t,r,o){var i=e(1)("algoliasearch"),s=e(26),a=e(8),u=e(32),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(o._allowEmptyCredentials!==!0&&!t)throw new c.AlgoliaSearchError("Please provide an application ID. "+l);if(o._allowEmptyCredentials!==!0&&!r)throw new c.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=r,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var p=o.protocol||"https:";if(/:$/.test(p)||(p+=":"),"http:"!==p&&"https:"!==p)throw new c.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+o.protocol+"`)");if(this._checkAppIdData(),o.hosts)a(o.hosts)?(this.hosts.read=s(o.hosts),this.hosts.write=s(o.hosts)):(this.hosts.read=s(o.hosts.read),this.hosts.write=s(o.hosts.write));else{var d=u(this._shuffleResult,function(e){return t+"-"+e+".algolianet.com"}),h=(o.dsn===!1?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+h].concat(d),this.hosts.write=[this.applicationID+".algolia.net"].concat(d)}this.hosts.read=u(this.hosts.read,n(p)),this.hosts.write=u(this.hosts.write,n(p)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,i("init done, %j",this)}function n(e){return function(t){return e+"//"+t.toLowerCase()}}function i(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var r=JSON.stringify(e);return Array.prototype.toJSON=t,r}function s(e){for(var t,r,o=e.length;0!==o;)r=Math.floor(Math.random()*o),o-=1,t=e[o],e[o]=e[r],e[r]=t;return e}function a(e){var t={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var o;o="x-algolia-api-key"===r||"x-algolia-application-id"===r?"**hidden for security purposes**":e[r],t[r]=o}return t}t.exports=o;var c=e(30),u=e(31),l=e(20),p=e(36),d=500,h=r.env.RESET_APP_DATA_TIMER&&parseInt(r.env.RESET_APP_DATA_TIMER,10)||12e4;o.prototype.initIndex=function(e){return new l(this,e)},o.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},o.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},o.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},o.prototype.addAlgoliaAgent=function(e){var t="; "+e;this._ua.indexOf(t)===-1&&(this._ua+=t)},o.prototype._jsonRequest=function(t){function r(e,n){function u(e){var t=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;h("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,t,e.headers);var r=2===Math.floor(t/100),o=new Date;if(w.push({currentHost:A,headers:a(p),content:s||null,contentLength:void 0!==s?s.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:x,endTime:o,duration:o-x,statusCode:t}),r)return m._useCache&&!m._useRequestCache&&y&&(y[l]=e.responseText),{responseText:e.responseText,body:e.body};var i=4!==Math.floor(t/100);if(i)return v+=1,_();h("unrecoverable error");var u=new c.AlgoliaSearchError(e.body&&e.body.message,{debugData:w,statusCode:t});return m._promise.reject(u)}function d(e){h("error: %s, stack: %s",e.message,e.stack);var r=new Date;return w.push({currentHost:A,headers:a(p),content:s||null,contentLength:void 0!==s?s.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:x,endTime:r,duration:r-x}),e instanceof c.AlgoliaSearchError||(e=new c.Unknown(e&&e.message,e)),v+=1,e instanceof c.Unknown||e instanceof c.UnparsableJSON||v>=m.hosts[t.hostType].length&&(g||!b)?(e.debugData=w,m._promise.reject(e)):e instanceof c.RequestTimeout?T():_()}function _(){return h("retrying request"),m._incrementHostIndex(t.hostType),r(e,n)}function T(){return h("retrying request with higher timeout"),m._incrementHostIndex(t.hostType),m._incrementTimeoutMultipler(),n.timeouts=m._getTimeoutsForRequest(t.hostType),r(e,n)}m._checkAppIdData();var x=new Date;if(m._useCache&&!m._useRequestCache&&(l=t.url),m._useCache&&!m._useRequestCache&&s&&(l+="_body_"+n.body),o(!m._useRequestCache,y,l)){h("serving response from cache");var R=y[l];return m._promise.resolve({body:JSON.parse(R),responseText:R})}if(v>=m.hosts[t.hostType].length)return!b||g?(h("could not get any response"),m._promise.reject(new c.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+m.applicationID,{debugData:w}))):(h("switching to fallback"),v=0,n.method=t.fallback.method,n.url=t.fallback.url,n.jsonBody=t.fallback.body,n.jsonBody&&(n.body=i(n.jsonBody)),p=m._computeRequestHeaders({additionalUA:f,headers:t.headers}),n.timeouts=m._getTimeoutsForRequest(t.hostType),m._setHostIndexByType(0,t.hostType),g=!0,r(m._request.fallback,n));var A=m._getHostByType(t.hostType),j=A+n.url,S={body:n.body,jsonBody:n.jsonBody,method:n.method,headers:p,timeouts:n.timeouts,debug:h,forceAuthHeaders:n.forceAuthHeaders};return h("method: %s, url: %s, headers: %j, timeouts: %d",S.method,j,S.headers,S.timeouts),e===m._request.fallback&&h("using fallback"),e.call(m,j,S).then(u,d)}function o(e,t,r){return m._useCache&&e&&t&&void 0!==t[r]}function n(e,r){return o(m._useRequestCache,y,l)&&e["catch"](function(){delete y[l]}),"function"!=typeof t.callback?e.then(r):void e.then(function(e){u(function(){t.callback(null,r(e))},m._setTimeout||setTimeout)},function(e){u(function(){t.callback(e)},m._setTimeout||setTimeout)})}this._checkAppIdData();var s,l,p,h=e(1)("algoliasearch:"+t.url),f=t.additionalUA||"",y=t.cache,m=this,v=0,g=!1,b=m._useFallback&&m._request.fallback&&t.fallback;this.apiKey.length>d&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,p=this._computeRequestHeaders({additionalUA:f,withApiKey:!1,headers:t.headers})):p=this._computeRequestHeaders({additionalUA:f,headers:t.headers}),void 0!==t.body&&(s=i(t.body)),h("request start");var w=[];if(m._useCache&&m._useRequestCache&&(l=t.url),m._useCache&&m._useRequestCache&&s&&(l+="_body_"+s),o(m._useRequestCache,y,l)){h("serving request from cache");var _=y[l],T="function"!=typeof _.then?m._promise.resolve({responseText:_}):_;return n(T,function(e){return JSON.parse(e.responseText)})}var x=r(m._request,{url:t.url,method:t.method,body:s,jsonBody:t.body,timeouts:m._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return m._useCache&&m._useRequestCache&&y&&(y[l]=x),n(x,function(e){return e.body})},o.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var r in e)null!==r&&void 0!==e[r]&&e.hasOwnProperty(r)&&(t+=""===t?"":"&",t+=r+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[r])?i(e[r]):e[r]));return t},o.prototype._computeRequestHeaders=function(t){var r=e(5),o=t.additionalUA?this._ua+"; "+t.additionalUA:this._ua,n={"x-algolia-agent":o,"x-algolia-application-id":this.applicationID};return t.withApiKey!==!1&&(n["x-algolia-api-key"]=this.apiKey),this.userToken&&(n["x-algolia-usertoken"]=this.userToken),this.securityTags&&(n["x-algolia-tagfilters"]=this.securityTags),r(this.extraHeaders,function(e,t){n[t]=e}),t.headers&&r(t.headers,function(e,t){n[t]=e}),n},o.prototype.search=function(t,r,o){var n=e(8),i=e(32),s="Usage: client.search(arrayOfQueries[, callback])";if(!n(t))throw new Error(s);"function"==typeof r?(o=r,r={}):void 0===r&&(r={});var a=this,c={requests:i(t,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:a._getSearchParams(e.params,t)}})},u=i(c.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&"),l="/1/indexes/*/queries";return void 0!==r.strategy&&(c.strategy=r.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:l,body:c,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:o})},o.prototype.searchForFacetValues=function(t){var r=e(8),o=e(32),n="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!r(t))throw new Error(n);var i=this;return i._promise.all(o(t,function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(n);var r=e(26),o=e(34),s=t.indexName,a=t.params,c=a.facetName,u=o(r(a),function(e){return"facetName"===e}),l=i._getSearchParams(u,"");return i._jsonRequest({cache:i.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(c)+"/query",hostType:"read",body:{params:l}})}))},o.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],r=0;rh?this._resetInitialAppIdData(e):e},o.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||s([1,2,3]),this._setAppIdData(t)},o.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},o.prototype._partialAppIdDataUpdate=function(t){var r=e(5),o=this._getAppIdData();return r(t,function(e,t){o[t]=e}),this._setAppIdData(o)},o.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},o.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},o.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},o.prototype._setHostIndexByType=function(t,r){var o=e(26),n=o(this._hostIndexes);return n[r]=t,this._partialAppIdDataUpdate({hostIndexes:n}),t},o.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},o.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},o.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}}).call(this,e(12))},{1:1,12:12,20:20,26:26,30:30,31:31,32:32,34:34,36:36,5:5,8:8}],18:[function(e,t,r){function o(){s.apply(this,arguments)}function n(e,t,r){function o(r,n){var i={page:r||0,hitsPerPage:t||100},s=n||[];return e(i).then(function(e){var t=e.hits,r=e.nbHits,n=t.map(function(e){return delete e._highlightResult,e}),a=s.concat(n);return a.lengths&&(t=s),"published"!==e.status?l._promise.delay(t).then(r):e})}function o(e){u(function(){t(null,e)},l._setTimeout||setTimeout)}function n(e){u(function(){t(e)},l._setTimeout||setTimeout)}var i=100,s=5e3,a=0,c=this,l=c.as,p=r();return t?void p.then(o,n):p},o.prototype.clearIndex=function(e){var t=this;return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/clear",hostType:"write",callback:e})},o.prototype.getSettings=function(e,t){1===arguments.length&&"function"==typeof e&&(t=e,e={}),e=e||{};var r=encodeURIComponent(this.indexName);return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+r+"/settings?getVersion=2"+(e.advanced?"&advanced="+e.advanced:""),hostType:"read",callback:t})},o.prototype.searchSynonyms=function(e,t){return"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/search",body:e,hostType:"read",callback:t})},o.prototype.exportSynonyms=function(e,t){return n(this.searchSynonyms.bind(this),e,t)},o.prototype.saveSynonym=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e.objectID)+"?forwardToReplicas="+o,body:e,hostType:"write",callback:r})},o.prototype.getSynonym=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e),hostType:"read",callback:t})},o.prototype.deleteSynonym=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e)+"?forwardToReplicas="+o,hostType:"write",callback:r})},o.prototype.clearSynonyms=function(e,t){"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),void 0!==e.forwardToSlaves&&p();var r=e.forwardToSlaves||e.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/clear?forwardToReplicas="+r,hostType:"write",callback:t})},o.prototype.batchSynonyms=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/batch?forwardToReplicas="+o+"&replaceExistingSynonyms="+(t.replaceExistingSynonyms?"true":"false"),hostType:"write",body:e,callback:r})},o.prototype.searchRules=function(e,t){return"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/search",body:e,hostType:"read",callback:t})},o.prototype.exportRules=function(e,t){return n(this.searchRules.bind(this),e,t)},o.prototype.saveRule=function(e,t,r){if("function"==typeof t?(r=t,t={}):void 0===t&&(t={}),!e.objectID)throw new l.AlgoliaSearchError("Missing or empty objectID field for rule");var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e.objectID)+"?forwardToReplicas="+o,body:e,hostType:"write",callback:r})},o.prototype.getRule=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e),hostType:"read",callback:t})},o.prototype.deleteRule=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e)+"?forwardToReplicas="+o,hostType:"write",callback:r})},o.prototype.clearRules=function(e,t){"function"==typeof e?(t=e,e={}):void 0===e&&(e={});var r=e.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/clear?forwardToReplicas="+r,hostType:"write",callback:t})},o.prototype.batchRules=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/batch?forwardToReplicas="+o+"&clearExistingRules="+(t.clearExistingRules===!0?"true":"false"),hostType:"write",body:e,callback:r})},o.prototype.exists=function(e){var t=this.getSettings().then(function(){return!0})["catch"](function(e){if(e instanceof l.AlgoliaSearchError&&404===e.statusCode)return!1;throw e});return"function"!=typeof e?t:void t.then(function(t){e(null,t)})["catch"](function(t){e(t)})},o.prototype.findObject=function(e,t,r){t=void 0===t?{}:t;var o=void 0===t.paginate||t.paginate,n=void 0!==t.query?t.query:"",i=this,s=0,a=function(){return t.page=s,i.search(n,t).then(function(t){for(var r=t.hits,n=0;n=t.nbPages)throw new l.ObjectNotFound("Object not found");return a()})},c=a(s);return void 0===r?c:void c.then(function(e){r(null,e)})["catch"](function(e){r(e)})},o.prototype.getObjectPosition=function(e,t){for(var r=e.hits,o=0;o1&&a()}if(!h.cors&&!h.hasXDomainRequest)return void o(new u.Network("CORS not supported"));e=l(e,t.headers);var d,f,y=t.body,m=h.cors?new XMLHttpRequest:new XDomainRequest,v=!1;d=setTimeout(s,t.timeouts.connect),m.onprogress=c,"onreadystatechange"in m&&(m.onreadystatechange=p),m.onload=n,m.onerror=i,m instanceof XMLHttpRequest?(m.open(t.method,e,!0),t.forceAuthHeaders&&(m.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),m.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):m.open(t.method,e),h.cors&&(y&&("POST"===t.method?m.setRequestHeader("content-type","application/x-www-form-urlencoded"):m.setRequestHeader("content-type","application/json")),m.setRequestHeader("accept","application/json")),y?m.send(y):m.send()})},a.prototype._request.fallback=function(e,t){return e=l(e,t.headers),new n(function(r,o){p(e,t,function(e,t){return e?void o(e):void r(t)})})},a.prototype._promise={reject:function(e){return n.reject(e)},resolve:function(e){return n.resolve(e)},delay:function(e){return new n(function(t){setTimeout(t,e)})},all:function(e){return n.all(e)}},s}}).call(this,e(12))},{1:1,12:12,23:23,24:24,26:26,3:3,30:30,35:35,37:37,6:6,7:7}],23:[function(e,t,r){"use strict";function o(e,t){return e+=/\?/.test(e)?"&":"?",e+n(t)}t.exports=o;var n=e(14)},{14:14}],24:[function(e,t,r){"use strict";function o(e,t,r){function o(){t.debug("JSONP: success"),m||d||(m=!0,p||(t.debug("JSONP: Fail. Script loaded but did not call the callback"), +a(),r(new n.JSONPScriptFail)))}function s(){"loaded"!==this.readyState&&"complete"!==this.readyState||o()}function a(){clearTimeout(v),f.onload=null,f.onreadystatechange=null,f.onerror=null,h.removeChild(f)}function c(){try{delete window[y],delete window[y+"_loaded"]}catch(e){window[y]=window[y+"_loaded"]=void 0}}function u(){t.debug("JSONP: Script timeout"),d=!0,a(),r(new n.RequestTimeout)}function l(){t.debug("JSONP: Script error"),m||d||(a(),r(new n.JSONPScriptError))}if("GET"!==t.method)return void r(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var p=!1,d=!1;i+=1;var h=document.getElementsByTagName("head")[0],f=document.createElement("script"),y="algoliaJSONP_"+i,m=!1;window[y]=function(e){return c(),d?void t.debug("JSONP: Late answer, ignoring"):(p=!0,a(),void r(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+y,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var v=setTimeout(u,t.timeouts.complete);f.onreadystatechange=s,f.onload=o,f.onerror=l,f.async=!0,f.defer=!0,f.src=e,h.appendChild(f)}t.exports=o;var n=e(30),i=0},{30:30}],25:[function(e,t,r){function o(e,t){return function(r,o,i){if("function"==typeof r&&"object"==typeof o||"object"==typeof i)throw new n.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof r?(i=r,r=""):1!==arguments.length&&"function"!=typeof o||(i=o,o=void 0),"object"==typeof r&&null!==r?(o=r,r=void 0):void 0!==r&&null!==r||(r="");var s="";void 0!==r&&(s+=e+"="+encodeURIComponent(r));var a;return void 0!==o&&(o.additionalUA&&(a=o.additionalUA,delete o.additionalUA),s=this.as._getSearchParams(o,s)),this._search(s,t,i,a)}}t.exports=o;var n=e(30)},{30:30}],26:[function(e,t,r){t.exports=function(e){return JSON.parse(JSON.stringify(e))}},{}],27:[function(e,t,r){function o(e,t,r){var o={};return r=r||{},r.hosts=r.hosts||["analytics.algolia.com","analytics.algolia.com","analytics.algolia.com","analytics.algolia.com"],r.protocol=r.protocol||"https:",o.as=n(e,t,r),o.getABTests=function(e,t){var r=r||{},o=r.offset||0,n=r.limit||10;return this.as._jsonRequest({method:"GET",url:"/2/abtests?offset="+encodeURIComponent(o)+"&limit="+encodeURIComponent(n),hostType:"read",forceAuthHeaders:!0,callback:t})},o.getABTest=function(e,t){return this.as._jsonRequest({method:"GET",url:"/2/abtests/"+encodeURIComponent(e),hostType:"read",forceAuthHeaders:!0,callback:t})},o.addABTest=function(e,t){return this.as._jsonRequest({method:"POST",url:"/2/abtests",body:e,hostType:"read",forceAuthHeaders:!0,callback:t})},o.stopABTest=function(e,t){return this.as._jsonRequest({method:"POST",url:"/2/abtests/"+encodeURIComponent(e)+"/stop",hostType:"read",forceAuthHeaders:!0,callback:t})},o.deleteABTest=function(e,t){return this.as._jsonRequest({method:"DELETE",url:"/2/abtests/"+encodeURIComponent(e),hostType:"write",forceAuthHeaders:!0,callback:t})},o.waitTask=function(e,t,r){return this.as.initIndex(e).waitTask(t,r)},o}t.exports=o;var n=e(21)},{21:21}],28:[function(e,t,r){t.exports=function(e,t){function r(){return o||(console.warn(t),o=!0),e.apply(this,arguments)}var o=!1;return r}},{}],29:[function(e,t,r){t.exports=function(e,t){var r=e.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+r}},{}],30:[function(e,t,r){"use strict";function o(t,r){var o=e(5),n=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):n.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",r&&o(r,function(e,t){n[t]=e})}function n(e,t){function r(){var r=Array.prototype.slice.call(arguments,0);"string"!=typeof r[0]&&r.unshift(t),o.apply(this,r),this.name="AlgoliaSearch"+e+"Error"}return i(r,o),r}var i=e(7);i(o,Error),t.exports={AlgoliaSearchError:o,UnparsableJSON:n("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:n("RequestTimeout","Request timed out before getting a response"),Network:n("Network","Network issue, see err.more for details"),JSONPScriptFail:n("JSONPScriptFail"," +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/2fa/index.html b/categories/2fa/index.html new file mode 100644 index 000000000..45dcf1855 --- /dev/null +++ b/categories/2fa/index.html @@ -0,0 +1,553 @@ +分类: 2fa | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/IT/Cloudreve/index.html b/categories/IT/Cloudreve/index.html new file mode 100644 index 000000000..400d48170 --- /dev/null +++ b/categories/IT/Cloudreve/index.html @@ -0,0 +1,553 @@ +分类: Cloudreve | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/IT/GitHub/index.html b/categories/IT/GitHub/index.html new file mode 100644 index 000000000..c7136d4aa --- /dev/null +++ b/categories/IT/GitHub/index.html @@ -0,0 +1,553 @@ +分类: GitHub | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/IT/Hexo/index.html b/categories/IT/Hexo/index.html new file mode 100644 index 000000000..3ebe0db0c --- /dev/null +++ b/categories/IT/Hexo/index.html @@ -0,0 +1,553 @@ +分类: Hexo | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/IT/Vercel/index.html b/categories/IT/Vercel/index.html new file mode 100644 index 000000000..0f1c0135c --- /dev/null +++ b/categories/IT/Vercel/index.html @@ -0,0 +1,553 @@ +分类: Vercel | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/IT/index.html b/categories/IT/index.html new file mode 100644 index 000000000..3a8edc0d6 --- /dev/null +++ b/categories/IT/index.html @@ -0,0 +1,553 @@ +分类: IT | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/categories/IT/\345\205\215\350\264\271/index.html" "b/categories/IT/\345\205\215\350\264\271/index.html" new file mode 100644 index 000000000..ea8b035de --- /dev/null +++ "b/categories/IT/\345\205\215\350\264\271/index.html" @@ -0,0 +1,553 @@ +分类: 免费 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/categories/IT/\347\237\255\351\223\276\346\216\245/index.html" "b/categories/IT/\347\237\255\351\223\276\346\216\245/index.html" new file mode 100644 index 000000000..12e461c2c --- /dev/null +++ "b/categories/IT/\347\237\255\351\223\276\346\216\245/index.html" @@ -0,0 +1,553 @@ +分类: 短链接 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/freenom/index.html b/categories/freenom/index.html new file mode 100644 index 000000000..8263e653d --- /dev/null +++ b/categories/freenom/index.html @@ -0,0 +1,553 @@ +分类: freenom | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 000000000..350e3788b --- /dev/null +++ b/categories/index.html @@ -0,0 +1,541 @@ +光速大佬的小站 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/categories/\350\255\246\345\221\212/index.html" "b/categories/\350\255\246\345\221\212/index.html" new file mode 100644 index 000000000..5bc307a7a --- /dev/null +++ "b/categories/\350\255\246\345\221\212/index.html" @@ -0,0 +1,553 @@ +分类: 警告 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/categories/\351\254\274\347\225\234/index.html" "b/categories/\351\254\274\347\225\234/index.html" new file mode 100644 index 000000000..2f9e34872 --- /dev/null +++ "b/categories/\351\254\274\347\225\234/index.html" @@ -0,0 +1,553 @@ +分类: 鬼畜 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/copyright/index.html b/copyright/index.html new file mode 100644 index 000000000..2535362c6 --- /dev/null +++ b/copyright/index.html @@ -0,0 +1,526 @@ +Copyright | 光速大佬的小站 +
加载头像

Copyright

本站使用知识共享许可协议(CC) 4.0协议

+

知识共享 (Creative Commons) 署名—相同方式共享 4.0公共许可协议国际版
通过行使本协议所授予的权利(定义如下),您接受并同意受到知识共享(Creative Commons)署名—相同方式共享4.0国际公共许可协议(以下简称“本公共许可协议”)的约束。从合同解释的角度来看,您获得授权的对价是接受本协议的条款,许可人授予您这些权利的对价是可以通过采用本协议条款发布授权作品(material)而获得利益。

+

第一条 定义

+

演绎作品(Adapted Material): 指受到著作权与类似权利保护的,基于授权作品(Licensed Material)而创作的作品(material),例如对授权作品(Licensed Material)的翻译、改编、编排、改写或其他依据著作权与类似权利需要获得所有人许可的修改。为本公共许可协议之目的,当授权作品(Licensed Material)为音乐作品、表演或录音时,将其依时间序列关系与动态影像配合一致而形成的作品,视为演绎作品(Adapted Material)。
演绎作者的许可: 指您依据本公共许可协议对在演绎作品(Adapted Material)中自己所贡献的部分所享有的著作权与类似权利进行授权的协议。
署名—相同方式共享兼容协议: 指在 creativecommons.org/compatiblelicenses 上列出且经知识共享组织(Creative Commons)认可、实质上与本公共许可协议相当的协议。
著作权与类似权利: 指著作权和/或与著作权紧密联系的类似权利。类似权利包括但不限于:表演者权、广播组织权、录音录像制作者权、以及数据库特别权利,而不论上述权利的定义和归类如何。为本公共许可协议之目的, 第二条b款第(1)项与第(2)项 所列权利不属于著作权与类似权利。
有效的技术措施: 指根据各司法管辖区遵循《世界知识产权组织版权条约》(1996年12月20日通过)第十一条或类似国际协定项下的义务所制定的法律,在没有适当的授权的情况下,禁止使用者规避的技术措施。
例外与限制: 指合理使用(Fair Dealing and Fair Use)和/或其他适用于您对授权作品(Licensed Material)的使用的著作权与类似权利的例外或限制。
授权要素: 指知识共享公共许可协议(CCPL)名称中所包含的协议特征。本公共许可协议的授权要素包括:署名和相同方式共享。
授权作品(Licensed Material): 指许可人通过本公共许可协议授权的文学、艺术作品(artistic or literary work),数据库或其他作品(material)。
协议所授予的权利: 指依据本公共许可协议的条款和条件所授予您的各项权利,限于适用于您对授权作品(Licensed Material)的使用且许可人有权许可的著作权与类似权利。
许可人: 指通过本公共许可协议进行授权的个人或组织。
分享: 指以需要“协议所授予的权利”许可的任何方法或程序向公众提供作品(material),包括复制、公共展示、公开表演、发行、散布、传播、进口或提供作品(material)给公众以便其能在其选定的时间和地点接收作品(material)。
数据库特别权利: 指除了著作权之外,衍生于1996年3月11日通过的《欧洲议会与欧盟理事会关于数据库法律保护的指令》(Directive 96/9/EC)及其修改或后续版本的权利,或其他国家或地区本质上与之等同的权利。
您: 指依据本公共许可协议行使其所获得授予之权利的个人或机构。 “您的” 有相应的含义。
第二条 授权范围

+

授权
根据本公共许可协议的条款,许可人授予您在全球范围内,免费的、不可再许可、非独占、不可撤销的许可,以对授权作品(Licensed Material)行使以下“协议所授予的权利”:
复制和分享授权作品(Licensed Material)的全部或部分;以及
创作、复制和分享演绎作品(Adapted Material)。
例外和限制 为避免疑义,若著作权的例外和限制适用于您对授权作品(Licensed Material)的使用,本公共许可协议将不适用,您也无须遵守本公共许可协议之条款。
期限 本公共许可协议的期限规定于第六条 a 款。
媒介和形式;允许的技术修改 许可人授权您在任何媒介以任何形式(不论目前已知的或未来出现的)行使本协议授予的权利,并为之进行必要的技术修改。许可人放弃和/或同意不主张任何权利以阻止您为了行使协议项下权利进行必要的技术修改,包括为规避有效技术措施所必须的技术修改。为了本公共许可协议之目的, 基于第二条a款第(4)项 进行的技术修改不构成演绎作品(Adapted Material)。
后续接受者
来自许可人的要约——授权作品(Licensed Material) 本授权作品(Licensed Material)的每一个后续接受者都自动取得许可人的要约,以按照本公共许可协议的条款行使协议授予的权利。
来自许可人的额外要约——演绎作品(Adapted Material) 您基于授权作品(Licensed Material)创作的演绎作品(Adapted Material)的每一个后续接受者都自动取得许可人的要约,以按照您所适用的“演绎作者的许可”协议的条款行使协议所授予的权利。
禁止下游限制 若会限制授权作品(Licensed Material)后续接受者行使本协议所授予的权利,则您不得对授权作品(Licensed Material)提出或增加任何额外的或不同的条款,或使用任何有效技术措施。
并非背书 本公共许可协议不构成、或不得被解释为允许您声明或主张:您或您对授权作品(Licensed Material)的使用与许可人或 第三条a款第(1)项(A)目(i)所规定要求提供署名的权利人相关联,或得到其赞助、同意或被授予正式地位。
其他权利

+

依据本公共许可协议,著作人身权,例如保护作品完整权、形象权、隐私权或其他类似的人格权利,不在许可范围内。但是,在条件允许的情况下,许可人可以在必要范围内放弃和/或同意不主张其权利,以便您行使本协议所授予的权利。
本公共许可协议不适用于任何专利权或商标权许可。
在自愿的或可放弃的法定或强制许可机制下,许可人在最大可能范围内放弃对您因行使本协议所授予的权利而产生的使用费的权利,不论是直接收取或通过集体管理组织收取。在其他任何情况下,许可人明确保留收取使用费的任何权利。
第三条 授权条件

+

您行使被许可的权利明确受以下条件限制:

+

署名

+

若您分享本授权作品(Licensed Material)(包含修改格式),您必须:

+

保留如下标识(如果许可人提供授权作品(Licensed Material)的同时提供如下标识):
以许可人要求的任何合理方式,标识本授权作品(Licensed Material)创作者和其他被指定署名的人的身份(包括指定的笔名);
著作权声明;
有关本公共许可协议的声明;
有关免责的声明;
在合理可行情况下,本授权作品(Licensed Material)的网址(URI)或超链接;
表明您是否修改本授权作品(Licensed Material)及保留任何先前修改的标记;及
表明授权作品(Licensed Material)依据本公共许可协议授权,并提供本公共许可协议全文,或者本公共许可协议的网址(URI)或超链接。
依据您分享本授权作品(Licensed Material)的媒介、方法及情況,您可以采用任何合理方式满足第三条a款第(1)项的条件 。 例如,提供包含所要求信息来源的网址(URI)或超链接可算是合理地满足此处的条件。
如果许可人要求,您必须在合理可行的范围内移除第三条a款第(1)项(A)目 所要求的任何信息。
相同方式共享
除第三条a款的条件外,如果您分享您创作的演绎作品(Adapted Material),则下列条件也适用:

+

您适用的“演绎作者的许可”协议必须是与本许可协议具有相同授权要素的知识共享(Creative Commons)许可协议(可以是本版本或后续版本),或者其他与“署名-相同方式共享”协议兼容的许可协议。
您必须提供您适用的“演绎作者的许可”协议全文或者该许可协议的网址(URI)或超链接。依据您分享您的演绎作品(Adapted Material)所使用的媒介、方法及情況,您可以采用任何合理方式满足此条件。
您不得提出或施加任何附加或不同的条款或条件、或在演绎作品(Adapted Material)上应用任何有效的技术措施,以限制使用者行使依您所适用的“演绎作者的许可”协议所授予的权利。
第四条 数据库特别权利

+

当协议所授予的权利包含数据库特别权利,而该数据库特别权利适用于您对授权作品(Licensed Material)的使用时:

+

为避免疑义, 第二条a款第(1) 项授权您,摘录、再利用、复制和分享全部或绝大部分数据库资料;
如果您将数据库资料的全部或绝大部分纳入您享有数据库特别权利的另一数据库,则您享有数据库特别权利的该数据库(而非其中的单个内容)视为演绎作品(Adapted Material),适用第三条b款的要求;
如果您分享全部或大部分该数据库的资料,您必须遵守 第三条a款 规定的条件。
为避免疑义,当协议所授予的权利包含其他著作权与类似权利时,第四条补充且不取代本公共许可协议所规定的您的义务。
第五条 免责声明及责任限制条款

+

除非许可人另有保证,否则在最大可能范围内,许可人按其现状和现有之基础提供授权作品(Licensed Material),且没有就授权作品(Licensed Material)做出任何形式的陈述或保证:无论明示、默示、法定或其他形式,包括但不限于任何有关本授权作品(Licensed Material)的权属保证、可交易性、适于特定目的、未侵害他人权利、没有潜在或其他瑕疵、精确性或是否有错误,不管是否已知或可发现。当免责声明全部或部分不被允许时,此免责声明可能不适用于您。
在最大可能范围内, 对于任何因本公共许可协议或使用授权作品(Licensed Material)引起的直接的、特殊的、间接的、附随的、连带的、惩罚性的、警告性的,或其他的损失、成本、费用或损害,许可人不对您负任何法律上或其他的责任(包括但不限于过失责任)。当责任限制部分或全部不被允许时,该限制不适用于您。
前述免责及责任限制声明,应尽可能以最接近于完全排除全部责任的方式解释。
第六条 期限与终止

+

本公共许可协议在著作权与类似权利存续期间内有效。然而,如果您没有遵守此公共许可协议,则您依据此公共许可协议享有的权利自动终止。
当您使用本授权作品(Licensed Material)的权利根据第六条a款终止时,您的权利在下述情况下恢复:

+

自违反协议的行为纠正之日起自动恢复,但须在您发现违反情形后30日内纠正;或
根据许可人明示恢复权利的意思表达。
为避免疑义,本公共许可协议第六条b款 不影响许可人就您违反本公共许可协议的行为寻求法律救济。
为避免疑义,许可人也可在任何时间,以另外的条款或条件提供本授权作品(Licensed Material),或者停止传播本授权作品(Licensed Material);然而,许可人此种行为不会终止本公共许可协议。
本协议第一、五、六、七及第八条,不因本公共许可协议终止而失效。
第七条 其他条款和条件

+

除非明示同意,否则许可人不受您表达的任何附加或不同条款或条件约束。
本公共许可协议未提及的关于授权作品(Licensed Material)之任何安排、共识或协议,不属于且独立于本公共许可协议的条款及条件。
第八条 解释

+

为避免疑义,本许可协议不会也不应被解释为减少、限制、约束或施加条件于无需本公共许可协议授权即可依法行使的对授权作品(Licensed Material)的任何使用。
在最大可能范围内,如果本公共许可协议的任何条款被视为无法执行,该条款在必要的最小限度内,自动调整至可以执行。如果该条款不能被调整,其应自本公共许可协议中排除适用,不影响其余条款的效力。
除非许可人明示同意,本公共许可协议的任何条款或条件均不得放弃。
本公共许可协议条款不构成、也不得被解释为限制或者放弃适用于许可人或您的特权或豁免,包括豁免于任何司法管辖区或行政机构的法律程序。
知识共享组织(Creative Commons)不是其公共许可协议的一方 。尽管如此,知识共享组织(Creative Commons)可以选择其中一种公共许可协议适用于其发表的作品(material),在此种情况下被视为许可人。知识共享公共许可协议 (CCPL)的文本属于公共领域,适用CC0公共许可协议。 除用于向公众表明本作品(material)是依照知识共享(Creative Commons)公共许可协议授权,或发布于creativecommons.org/policies的知识共享组织(Creative Commons)政策另有规定允许以外,如未经知识共享组织(Creative Commons)事先书面同意,任何一方均不得使用“知识共享”(Creative Commons)商标和其他相关商标及标识。包括但不限于,将该商标或标识用于对知识共享公共许可协议(CCPL)做出的未经同意的修改,或与授权作品(Licensed Material)使用有关的其他安排、共识或协议。为避免疑义,本段关于商标的限制性规定不构成公共许可协议之一部分。

+

引用到评论
\ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 000000000..0517a438c --- /dev/null +++ b/css/index.css @@ -0,0 +1,27655 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; +} + +/* 滚动条轨道样式 */ +::-webkit-scrollbar-track { + background-color: transparent; +} + +/* 滚动条滑块样式 */ +::-webkit-scrollbar-thumb { + background-color: #888; + opacity: 1; + transition: opacity 0.5s; +} + +/* 滚动条消失动画 */ +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +/* 在滚动容器上应用动画 */ +html:hover::-webkit-scrollbar-thumb { + animation: fadeOut 1s 1s forwards; +} + +body { + margin: 0; + padding: 0; + overflow-x: clip; + overscroll-behavior: none; +} + +main { + display: block; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +a { + background-color: transparent; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: bolder; +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +img { + border-style: none; + border-radius: 8px; + max-width: 100%; + transition: all 0.2s ease 0s; + -webkit-user-drag: none; /* WebKit */ + -khtml-user-drag: none; /* KHTML */ + -moz-user-drag: none; /* Gecko */ + -ms-user-drag: none; /* Trident/Edge */ + user-drag: none; +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="button"], +[type="reset"], +[type="submit"], +button { + -webkit-appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0; +} + +img.fancybox__image { + border-radius: 0; +} +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +details { + display: block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none; +} + +.limit-one-line, +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-name, +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-desc, +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span, +.site-data > a .headline, +#pagination .prev_info, +#pagination .next_info, +#sidebar #sidebar-menus .menus_items .site-page { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} +.limit-more-line, +.error404 #error-wrap .error-content .error-info .error_subtitle, +.article-sort-item-title, +#recent-posts > .recent-post-item >.recent-post-info > .content, +#aside-content .aside-list > .aside-list-item .content > .name, +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment, +#post-info .post-title, +.relatedPosts > .relatedPosts-list .content .title, +#content-inner figure.gallery-group p, +#content-inner figure.gallery-group .gallery-group-name { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +.fontbold { + font-weight: bold; +} +.anzhiyu-icon-spinner { + margin: 0; + width: 16px; + line-height: 16px; + height: 16px; +} +.anzhiyufont, +hr:before, +#article-container a.headerlink::before, +#post .post-outdate-notice:before, +.note:not(.no-icon)::before { + font-family: "anzhiyufont"; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.anzhiyufont::before { + font-family: "anzhiyufont" !important; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.cardHover, +.error404 #error-wrap .error-content, +#recent-posts > .recent-post-item, +#aside-content .card-widget, +.layout > .recent-posts .pagination > *:not(.space):not(pangu) { + border-radius: 8px; + background: var(--card-bg); + -webkit-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.imgHover, +.error404 #error-wrap .error-content .error-img img, +.article-sort-item-img img, +#aside-content .aside-list > .aside-list-item .thumbnail > img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.6s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.6s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.6s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.6s; + transition: filter 375ms ease-in 0.2s, transform 0.6s; + object-fit: cover; +} +.imgHover:hover, +.error404 #error-wrap .error-content .error-img img:hover, +.article-sort-item-img img:hover, +#aside-content .aside-list > .aside-list-item .thumbnail > img:hover { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover:hover img, +#pagination .prev-post:hover img, +#pagination .next-post:hover img, +.relatedPosts > .relatedPosts-list > div:hover img { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover img, +#pagination .prev-post img, +#pagination .next-post img, +.relatedPosts > .relatedPosts-list > div img { + position: absolute; + width: 100%; + height: 100%; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transition: all 0.6s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.6s, filter 375ms ease-in 0.2s; + -o-transition: all 0.6s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.6s, filter 375ms ease-in 0.2s; + transition: all 0.6s, filter 375ms ease-in 0.2s; + object-fit: cover; + border-radius: 0; +} +.list-beauty, +.category-lists ul, +#algolia-search .search-dialog .ais-Hits-list { + list-style: none; +} +.list-beauty li, +.category-lists ul li, +#algolia-search .search-dialog .ais-Hits-list li { + position: relative; + padding: 0.12em 0.4em 0.12em 1.4em; +} +.list-beauty li:hover:before, +.category-lists ul li:hover:before, +#algolia-search .search-dialog .ais-Hits-list li:hover:before { + border-color: var(--pseudo-hover); +} +.list-beauty li:before, +.category-lists ul li:before, +#algolia-search .search-dialog .ais-Hits-list li:before { + position: absolute; + top: 0.67em; + left: 0; + width: 0.43em; + height: 0.43em; + border: 0.215em solid #425aef; + border-radius: 0.43em; + background: transparent; + content: ''; + cursor: pointer; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.scroll-down-effects { + -webkit-animation: scroll-down-effect 1.5s infinite; + -moz-animation: scroll-down-effect 1.5s infinite; + -o-animation: scroll-down-effect 1.5s infinite; + -ms-animation: scroll-down-effect 1.5s infinite; + animation: scroll-down-effect 1.5s infinite; +} +.anzhiyu-spin { + display: inline-block; + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-animation-name: anzhiyu-spin; + -moz-animation-name: anzhiyu-spin; + -o-animation-name: anzhiyu-spin; + -ms-animation-name: anzhiyu-spin; + animation-name: anzhiyu-spin; + -webkit-animation-duration: var(--anzhiyu-animation-duration, 2s); + -moz-animation-duration: var(--anzhiyu-animation-duration, 2s); + -o-animation-duration: var(--anzhiyu-animation-duration, 2s); + -ms-animation-duration: var(--anzhiyu-animation-duration, 2s); + animation-duration: var(--anzhiyu-animation-duration, 2s); + -webkit-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -moz-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -o-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -ms-animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + animation-iteration-count: var(--anzhiyu-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--anzhiyu-animation-timing, linear); + -moz-animation-timing-function: var(--anzhiyu-animation-timing, linear); + -o-animation-timing-function: var(--anzhiyu-animation-timing, linear); + -ms-animation-timing-function: var(--anzhiyu-animation-timing, linear); + animation-timing-function: var(--anzhiyu-animation-timing, linear); +} +.anzhiyu-pulse-icon { + -webkit-animation: anzhiyu-pulse-animation 1s infinite linear; + -moz-animation: anzhiyu-pulse-animation 1s infinite linear; + -o-animation: anzhiyu-pulse-animation 1s infinite linear; + -ms-animation: anzhiyu-pulse-animation 1s infinite linear; + animation: anzhiyu-pulse-animation 1s infinite linear; +} +.anzhiyu-shake:hover { + -webkit-animation: shake 0.8s; + -moz-animation: shake 0.8s; + -o-animation: shake 0.8s; + -ms-animation: shake 0.8s; + animation: shake 0.8s; +} +.reward-main { + -webkit-animation: donate_effcet 0.3s 0.1s ease both; + -moz-animation: donate_effcet 0.3s 0.1s ease both; + -o-animation: donate_effcet 0.3s 0.1s ease both; + -ms-animation: donate_effcet 0.3s 0.1s ease both; + animation: donate_effcet 0.3s 0.1s ease both; +} +@property --anzhiyu-header-translateY { + syntax: ""; + inherits: true; + initial-value: 0px; +} +@property --anzhiyu-header-info-scale { + syntax: ""; + inherits: true; + initial-value: 1; +} +@property --anzhiyu-header-cover-scale { + syntax: ""; + inherits: true; + initial-value: 2; +} +@-moz-keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@-webkit-keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@-o-keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@keyframes anzhiyu-shake { + 0% { + -webkit-transform: translate(1px, 1px) rotate(0deg); + -moz-transform: translate(1px, 1px) rotate(0deg); + -o-transform: translate(1px, 1px) rotate(0deg); + -ms-transform: translate(1px, 1px) rotate(0deg); + transform: translate(1px, 1px) rotate(0deg); + } + 10% { + -webkit-transform: translate(-1px, -2px) rotate(-1deg); + -moz-transform: translate(-1px, -2px) rotate(-1deg); + -o-transform: translate(-1px, -2px) rotate(-1deg); + -ms-transform: translate(-1px, -2px) rotate(-1deg); + transform: translate(-1px, -2px) rotate(-1deg); + } + 20% { + -webkit-transform: translate(-3px, 0px) rotate(1deg); + -moz-transform: translate(-3px, 0px) rotate(1deg); + -o-transform: translate(-3px, 0px) rotate(1deg); + -ms-transform: translate(-3px, 0px) rotate(1deg); + transform: translate(-3px, 0px) rotate(1deg); + } + 30% { + -webkit-transform: translate(3px, 2px) rotate(0deg); + -moz-transform: translate(3px, 2px) rotate(0deg); + -o-transform: translate(3px, 2px) rotate(0deg); + -ms-transform: translate(3px, 2px) rotate(0deg); + transform: translate(3px, 2px) rotate(0deg); + } + 40% { + -webkit-transform: translate(1px, -1px) rotate(1deg); + -moz-transform: translate(1px, -1px) rotate(1deg); + -o-transform: translate(1px, -1px) rotate(1deg); + -ms-transform: translate(1px, -1px) rotate(1deg); + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + -webkit-transform: translate(-1px, 2px) rotate(-1deg); + -moz-transform: translate(-1px, 2px) rotate(-1deg); + -o-transform: translate(-1px, 2px) rotate(-1deg); + -ms-transform: translate(-1px, 2px) rotate(-1deg); + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + -webkit-transform: translate(-3px, 1px) rotate(0deg); + -moz-transform: translate(-3px, 1px) rotate(0deg); + -o-transform: translate(-3px, 1px) rotate(0deg); + -ms-transform: translate(-3px, 1px) rotate(0deg); + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + -webkit-transform: translate(3px, 1px) rotate(-1deg); + -moz-transform: translate(3px, 1px) rotate(-1deg); + -o-transform: translate(3px, 1px) rotate(-1deg); + -ms-transform: translate(3px, 1px) rotate(-1deg); + transform: translate(3px, 1px) rotate(-1deg); + } + 80% { + -webkit-transform: translate(-1px, -1px) rotate(1deg); + -moz-transform: translate(-1px, -1px) rotate(1deg); + -o-transform: translate(-1px, -1px) rotate(1deg); + -ms-transform: translate(-1px, -1px) rotate(1deg); + transform: translate(-1px, -1px) rotate(1deg); + } + 90% { + -webkit-transform: translate(1px, 2px) rotate(0deg); + -moz-transform: translate(1px, 2px) rotate(0deg); + -o-transform: translate(1px, 2px) rotate(0deg); + -ms-transform: translate(1px, 2px) rotate(0deg); + transform: translate(1px, 2px) rotate(0deg); + } + 100% { + -webkit-transform: translate(1px, -2px) rotate(-1deg); + -moz-transform: translate(1px, -2px) rotate(-1deg); + -o-transform: translate(1px, -2px) rotate(-1deg); + -ms-transform: translate(1px, -2px) rotate(-1deg); + transform: translate(1px, -2px) rotate(-1deg); + } +} +@-moz-keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes anzhiyu-pulse-animation { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@-webkit-keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@-o-keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@keyframes anzhiyu-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + -moz-transform: rotate(1turn); + -o-transform: rotate(1turn); + -ms-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@-moz-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-webkit-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-o-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } + 50% { + top: -16px; + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + top: 0; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-moz-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes bottom-top { + 0% { + margin-top: 50px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + margin-top: 0; + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@-webkit-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@-o-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} +@-moz-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-moz-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes sidebarItem { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes barrageIn { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes barrageOut { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes toLeftFull { + 0% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@-webkit-keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@-o-keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@keyframes toRightFull { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 100% { + -webkit-transform: translateX(200%); + -moz-transform: translateX(200%); + -o-transform: translateX(200%); + -ms-transform: translateX(200%); + transform: translateX(200%); + } +} +@-moz-keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@-webkit-keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@-o-keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@keyframes breathe { + 0% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + 100% { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +@-moz-keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-webkit-keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-o-keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@keyframes animate-in-and-out { + entry 0% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scaleX(0.9); + -moz-transform: scaleX(0.9); + -o-transform: scaleX(0.9); + -ms-transform: scaleX(0.9); + transform: scaleX(0.9); + } + entry 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-moz-keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@-webkit-keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@-o-keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@keyframes header { + entry 0% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + entry 100% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } + exit 100% { + --anzhiyu-header-translateY: 160px; + --anzhiyu-header-info-scale: 0.7; + --anzhiyu-header-cover-scale: 1; + } + exit 0% { + --anzhiyu-header-translateY: 0px; + --anzhiyu-header-info-scale: 1; + --anzhiyu-header-cover-scale: 2; + } +} +@-moz-keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes post-info-slide-in { + 0% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes slide-in { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +@-webkit-keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +@-o-keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +@keyframes floating { + 0% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } + 50% { + -webkit-transform: translate(0, 4px); + -moz-transform: translate(0, 4px); + -o-transform: translate(0, 4px); + -ms-transform: translate(0, 4px); + transform: translate(0, 4px); + } + 100% { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + } +} +i.anzhiyu-icon-hashtag { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + font-size: 13px; +} +:root { + --animation-on: cubic-bezier(0.6, 0.1, 0, 1); + --animation-in: cubic-bezier(0.6, 0.2, 0.25, 1); + --animation-ot: opacity 0.5s var(--animation-in) backwards, transform 1s var(--animation-in) backwards; + --animation-otf: opacity 0.5s var(--animation-in) backwards, transform 1s var(--animation-in) backwards, filter 0.7s var(--animation-in) backwards; + --global-font-size: 16px; + --global-bg: #fff; + --font-color: #4c4948; + --hr-border: rgba(161,172,247,0.137); + --hr-before-color: rgba(123,139,244,0.137); + --search-bg: #f6f8fa; + --search-input-color: #4c4948; + --search-result-title: #4c4948; + --preloader-bg: #37474f; + --preloader-color: #fff; + --tab-border-color: #f0f0f0; + --tab-botton-bg: #f0f0f0; + --tab-botton-color: #1f2d3d; + --tab-button-hover-bg: #dcdcdc; + --tab-button-active-bg: #fff; + --card-bg: #fff; + --sidebar-bg: #f6f8fa; + --btn-hover-color: #ff7242; + --btn-color: #fff; + --btn-bg: var(--anzhiyu-main); + --text-bg-hover: rgba(66,90,239,0.7); + --light-grey: #eee; + --dark-grey: #cacaca; + --white: #fff; + --text-highlight-color: #1f2d3d; + --blockquote-color: #6a737d; + --blockquote-bg: rgba(66,90,239,0.1); + --reward-pop: #f5f5f5; + --toc-link-color: #666261; + --card-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.05); + --card-hover-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.09); + --pseudo-hover: #ff7242; + --headline-presudo: var(--anzhiyu-fontcolor); + --scrollbar-color: var(--anzhiyu-scrollbar); + --anzhiyu-snackbar-time: 2000ms; + --anzhiyu-deep-purple: #405589; + --anzhiyu-meta-theme-color: #f7f9fe; + --anzhiyu-bar-background: var(--anzhiyu-main); + --anzhiyu-theme-op: rgba(66,89,239,0.137); + --anzhiyu-card-bg-none: rgba(255,255,255,0); + --anzhiyu-main-op-deep: var(--anzhiyu-theme-op-deep) !important; + --anzhiyu-gray-op: rgba(153,153,153,0.169); + --anzhiyu-theme-top: var(--anzhiyu-theme); + --anzhiyu-white: #fff; + --anzhiyu-white-op: rgba(255,255,255,0.2); + --anzhiyu-black: #000; + --anzhiyu-black-op: rgba(0,0,0,0.2); + --anzhiyu-none: rgba(0,0,0,0); + --anzhiyu-gray: #999; + --anzhiyu-yellow: #ffc93e; + --anzhiyu-orange: #e38100; + --anzhiyu-blue-hover: #5390e6; + --anzhiyu-radius-full: 50px; + --anzhiyu-radius: 8px; + --anzhiyu-border-radius: 8px; + --anzhiyu-main: var(--anzhiyu-theme); + --anzhiyu-main-op: var(--anzhiyu-theme-op); + --anzhiyu-shadow-theme: 0 8px 12px -3px var(--anzhiyu-theme-op); + --anzhiyu-shadow-main: 0 8px 12px -3px var(--anzhiyu-main-op); + --anzhiyu-shadow-blue: 0 8px 12px -3px rgba(40,109,234,0.2); + --anzhiyu-shadow-white: 0 8px 12px -3px rgba(255,255,255,0.2); + --anzhiyu-shadow-black: 0 0 12px 4px rgba(0,0,0,0.05); + --anzhiyu-shadow-yellow: 0px 38px 77px -26px rgba(255,201,62,0.12); + --anzhiyu-shadow-red: 0 8px 12px -3px rgba(238,125,121,0.212); + --anzhiyu-shadow-green: 0 8px 12px -3px rgba(135,238,121,0.212); + --anzhiyu-shadow-border: 0 8px 16px -4px rgba(44,45,48,0.047); + --anzhiyu-shadow-blackdeep: 0 2px 16px -3px rgba(0,0,0,0.15); + --anzhiyu-logo-color: linear-gradient(215deg, #4584ff 0%, #cf0db9 100%); + --anzhiyu-code-stress: var(--anzhiyu-main); + --style-border: 1px solid var(--anzhiyu-card-border); + --anzhiyu-blue-main: #425aef; + --style-border-hover: 1px solid var(--anzhiyu-main); + --style-border-dashed: 1px dashed var(--anzhiyu-theme-op); + --style-border-avatar: 5px solid var(--anzhiyu-white); + --style-border-always: 1px solid var(--anzhiyu-card-border); + --style-border-none: 1px solid transparent; + --style-border-deep-ash: 1px solid #d0d7de; + --style-border-hover-always: 1px solid var(--anzhiyu-main); + --anzhiyu-main-none: rgba(184,184,184,0) !important; + --anzhiyu-wihite-font: #fff; +} +@media (prefers-color-scheme: light) { +} +[data-theme="light"] { + --anzhiyu-meta-theme-post-color: #fff; + --anzhiyu-meta-theme-color: #f7f9fe; + --anzhiyu-theme-op-deep: rgba(66,89,239,0.867); + --global-bg: #f7f9fe; + --anzhiyu-theme: #425aef; + --anzhiyu-theme-deep: #1856fb; + --anzhiyu-theme-op: rgba(66,89,239,0.137); + --anzhiyu-blue: #5ca1ff; + --anzhiyu-blue-tint: rgba(92,161,255,0.1); + --anzhiyu-red: #d8213c; + --anzhiyu-pink: #ff7c7c; + --anzhiyu-green: #57bd6a; + --anzhiyu-fontcolor: #363636; + --anzhiyu-background: #f7f9fe; + --anzhiyu-reverse: #000; + --anzhiyu-maskbg: rgba(255,255,255,0.6); + --anzhiyu-maskbgdeep: rgba(255,255,255,0.85); + --anzhiyu-scrollbar: rgba(60,60,67,0.4); + --anzhiyu-hovertext: var(--anzhiyu-theme); + --anzhiyu-ahoverbg: #f7f7fa; + --anzhiyu-lighttext: var(--anzhiyu-main); + --anzhiyu-secondtext: rgba(60,60,67,0.8); + --anzhiyu-scrollbar: rgba(60,60,67,0.4); + --anzhiyu-card-btn-bg: #edf0f7; + --anzhiyu-post-blockquote-bg: #fafcff; + --anzhiyu-post-tabs-bg: #f2f5f8; + --anzhiyu-secondbg: #f7f7f9; + --anzhiyu-shadow-nav: 0 5px 12px -5px rgba(102,68,68,0.05); + --anzhiyu-card-bg: #fff; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-card-border: #e3e8f7; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-wihite-font: #fff; +} +@media (prefers-color-scheme: dark) { +} +[data-theme="dark"] { + --anzhiyu-meta-theme-post-color: #1d1e22; + --anzhiyu-meta-theme-color: #000; + --anzhiyu-blue: #5ca1ff; + --anzhiyu-blue-tint: rgba(92,161,255,0.1); + --anzhiyu-theme-op-deep: rgba(0,132,255,0.867); + --global-bg: #18171d; + --anzhiyu-theme: #f2b94b; + --anzhiyu-theme-deep: #0076e5; + --anzhiyu-theme-op: rgba(242,185,75,0.137); + --anzhiyu-blue: #0084ff; + --anzhiyu-red: #ff3842; + --anzhiyu-pink: #ff7c7c; + --anzhiyu-green: #57bd6a; + --anzhiyu-fontcolor: #f7f7fa; + --anzhiyu-background: #18171d; + --anzhiyu-reverse: #fff; + --anzhiyu-maskbg: rgba(0,0,0,0.6); + --anzhiyu-maskbgdeep: rgba(0,0,0,0.85); + --anzhiyu-hovertext: #0a84ff; + --anzhiyu-ahoverbg: #fff; + --anzhiyu-scrollbar: rgba(200,200,223,0.4); + --anzhiyu-lighttext: #f2b94b; + --anzhiyu-secondtext: #a1a2b8; + --anzhiyu-scrollbar: rgba(200,200,223,0.4); + --anzhiyu-card-btn-bg: #30343f; + --anzhiyu-post-blockquote-bg: #000; + --anzhiyu-post-tabs-bg: #121212; + --anzhiyu-secondbg: #21232a; + --anzhiyu-shadow-nav: 0 5px 20px 0px rgba(28,28,28,0.4); + --anzhiyu-card-bg: #1d1e22; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-card-border: #42444a; + --anzhiyu-shadow-lightblack: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-shadow-light2black: 0 5px 12px -5px rgba(102,68,68,0); + --anzhiyu-wihite-font: #f6f6f6; +} +body { + position: relative; + min-height: 100%; + background: var(--global-bg); + color: var(--font-color); + font-size: var(--global-font-size); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; + line-height: 2; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +*::-webkit-scrollbar { + width: 6px; + height: 6px; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); + border-radius: 8px; + cursor: pointer; +} +*::-webkit-scrollbar-track { + background-color: transparent; +} +::-webkit-scrollbar-corner { + background-color: transparent; +} +* { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-color) transparent; +} +input::placeholder { + color: var(--font-color); +} +#web_bg { + position: fixed; + z-index: -999; + width: 200%; + height: 200%; + top: -50%; + left: -50%; + -webkit-transform: rotate(-1deg); + -moz-transform: rotate(-1deg); + -o-transform: rotate(-1deg); + -ms-transform: rotate(-1deg); + transform: rotate(-1deg); + -webkit-overflow-scrolling: touch; + background: var(--anzhiyu-background); + background-attachment: local; + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin: 20px 0 14px; + color: var(--text-highlight-color); + font-weight: bold; +} +h1 code, +h2 code, +h3 code, +h4 code, +h5 code, +h6 code { + font-size: inherit !important; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +hr { + position: relative; + margin: 40px auto; + border: 2px dashed var(--hr-border); + width: calc(100% - 4px); +} +hr:hover:before { + left: calc(95% - 20px); +} +hr:before { + position: absolute; + top: -10px; + left: 5%; + z-index: 1; + color: var(--hr-before-color); + content: '\f0c4'; + font-size: 16px; + line-height: 1; + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + -ms-transition: all 1s ease-in-out; + transition: all 1s ease-in-out; +} +html { + overflow-y: overlay; +} +.table-wrap { + overflow-x: scroll; + margin: 1rem 0; + border-radius: 8px; +} +table { + display: table; + width: 100%; + border-spacing: 0; + border-collapse: collapse; + empty-cells: show; +} +table thead { + background: var(--anzhiyu-secondbg); +} +table th, +table td { + padding: 0.3rem 0.6rem; + vertical-align: middle; + border: var(--style-border-always); +} +*::selection { + background: #2128bd; + color: #f7f7f7; +} +button { + padding: 0; + outline: 0; + border: none; + background: none; + cursor: pointer; + touch-action: manipulation; +} +a { + color: var(--anzhiyu-fontcolor); + text-decoration: none; + word-wrap: break-word; + -webkit-transition: all 0.2s ease 0s; + -moz-transition: all 0.2s ease 0s; + -o-transition: all 0.2s ease 0s; + -ms-transition: all 0.2s ease 0s; + transition: all 0.2s ease 0s; + overflow-wrap: break-word; +} +a:hover { + color: #425aef; +} +#site-title, +#site-subtitle, +#site-name, +#aside-content .author-info__name, +#aside-content .author-info__description { + font-family: PingFang SC, 'Hiragino Sans GB', 'Microsoft JhengHei', 'Microsoft YaHei', sans-serif; +} +.is-center { + text-align: center; +} +.copy-true { + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; +} +.pull-left { + float: left; +} +.pull-right { + float: right; +} +img[src=''], +img:not([src]) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +img[data-lazy-src]:not(.loaded) { + filter: blur(8px) brightness(1); +} +img[data-lazy-src].error { + filter: none; + opacity: 1 !important; + -ms-filter: none !important; + filter: none !important; +} +img[data-lazy-src]:not(.loaded) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +img[src=''], +img:not([src]) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.img-alt { + font-size: 12px; + margin: 0; + margin-top: 8px; + color: var(--anzhiyu-secondtext); +} +.img-alt:hover { + text-decoration: none !important; +} +blockquote { + margin: 0 0 20px; + padding: 12px 15px; + border-left: 3px solid #425aef; + background-color: var(--blockquote-bg); + color: var(--blockquote-color); +} +blockquote footer cite:before { + padding: 0 5px; + content: '—'; +} +blockquote > :last-child { + margin-bottom: 0 !important; +} +.time_hidden { + display: none !important; +} +#single_top { + padding: 1.875rem 1.5rem 0; + max-width: 1400px; + width: 100%; + margin: 0 auto; +} +@media screen and (max-width: 768px) { + #single_top + #content-inner { + padding: 1.875rem 0rem 0; + } +} +.loading-bg { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + height: 100%; + position: fixed; + background: var(--anzhiyu-card-bg); + z-index: 1001; + opacity: 1; + -ms-filter: none; + filter: none; + overflow: hidden; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + -ms-transition: 0.2s; + transition: 0.2s; + -webkit-animation: showLoading 0.3s 0s backwards; + -moz-animation: showLoading 0.3s 0s backwards; + -o-animation: showLoading 0.3s 0s backwards; + -ms-animation: showLoading 0.3s 0s backwards; + animation: showLoading 0.3s 0s backwards; +} +.loading-bg::-webkit-scrollbar { + display: none; +} +#loading-box { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#loading-box .loading-img { + width: 100px; + height: 100px; + border-radius: 50%; + margin: auto; + border: 4px solid #f0f0f2; + -webkit-animation-duration: 0.2s; + -moz-animation-duration: 0.2s; + -o-animation-duration: 0.2s; + -ms-animation-duration: 0.2s; + animation-duration: 0.2s; + -webkit-animation-name: loadingAction; + -moz-animation-name: loadingAction; + -o-animation-name: loadingAction; + -ms-animation-name: loadingAction; + animation-name: loadingAction; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + -o-animation-iteration-count: infinite; + -ms-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-direction: alternate; + -moz-animation-direction: alternate; + -o-animation-direction: alternate; + -ms-animation-direction: alternate; + animation-direction: alternate; +} +#loading-box .loading-image-dot { + width: 30px; + height: 30px; + background: #6bdf8f; + position: absolute; + border-radius: 50%; + border: 6px solid #fff; + top: 50%; + left: 50%; + -webkit-transform: translate(18px, 24px); + -moz-transform: translate(18px, 24px); + -o-transform: translate(18px, 24px); + -ms-transform: translate(18px, 24px); + transform: translate(18px, 24px); +} +#loading-box.loaded .loading-bg { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + z-index: -1000; +} +@-moz-keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-webkit-keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@-o-keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +@keyframes loadingAction { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + } +} +:root { + --hl-color: #90a4ae; + --hl-bg: #f6f8fa; + --hltools-bg: var(--anzhiyu-secondbg); + --hltools-color: var(--anzhiyu-fontcolor); + --hlnumber-bg: #f6f8fa; + --hlnumber-color: rgba(144,164,174,0.5); + --hlscrollbar-bg: #dce4eb; + --hlexpand-bg: linear-gradient(180deg, rgba(246,248,250,0.6), rgba(246,248,250,0.9)); +} +[data-theme='dark'] { + --hl-color: rgba(255,255,255,0.7); + --hl-bg: #171717; + --hltools-bg: #1a1a1a; + --hltools-color: #90a4ae; + --hlnumber-bg: #171717; + --hlnumber-color: rgba(255,255,255,0.4); + --hlscrollbar-bg: #1f1f1f; + --hlexpand-bg: linear-gradient(180deg, rgba(23,23,23,0.6), rgba(23,23,23,0.9)); +} +figure.highlight table { + scrollbar-color: var(--hlscrollbar-bg) transparent; +} +figure.highlight table::-webkit-scrollbar-thumb { + background: var(--hlscrollbar-bg); +} +figure.highlight pre .deletion { + color: #bf42bf; +} +figure.highlight pre .addition { + color: #105ede; +} +figure.highlight pre .meta { + color: #7c4dff; +} +figure.highlight pre .comment { + color: #969896; +} +figure.highlight pre .variable, +figure.highlight pre .attribute, +figure.highlight pre .regexp, +figure.highlight pre .ruby .constant, +figure.highlight pre .xml .tag .title, +figure.highlight pre .xml .pi, +figure.highlight pre .xml .doctype, +figure.highlight pre .html .doctype, +figure.highlight pre .css .id, +figure.highlight pre .tag .name, +figure.highlight pre .css .class, +figure.highlight pre .css .pseudo { + color: #e53935; +} +figure.highlight pre .tag { + color: #39adb5; +} +figure.highlight pre .number, +figure.highlight pre .preprocessor, +figure.highlight pre .literal, +figure.highlight pre .params, +figure.highlight pre .constant, +figure.highlight pre .command { + color: #f76d47; +} +figure.highlight pre .built_in { + color: #ffb62c; +} +figure.highlight pre .ruby .class .title, +figure.highlight pre .css .rules .attribute, +figure.highlight pre .string, +figure.highlight pre .value, +figure.highlight pre .inheritance, +figure.highlight pre .header, +figure.highlight pre .ruby .symbol, +figure.highlight pre .xml .cdata, +figure.highlight pre .special, +figure.highlight pre .number, +figure.highlight pre .formula { + color: #91b859; +} +figure.highlight pre .keyword, +figure.highlight pre .title, +figure.highlight pre .css .hexcolor { + color: #39adb5; +} +figure.highlight pre .function, +figure.highlight pre .python .decorator, +figure.highlight pre .python .title, +figure.highlight pre .ruby .function .title, +figure.highlight pre .ruby .title .keyword, +figure.highlight pre .perl .sub, +figure.highlight pre .javascript .title, +figure.highlight pre .coffeescript .title { + color: #6182b8; +} +figure.highlight pre .tag .attr, +figure.highlight pre .javascript .function { + color: #7c4dff; +} +#article-container figure.highlight .line.marked { + background-color: rgba(128,203,196,0.251); +} +#article-container figure.highlight table { + display: block; + overflow: auto; + border: none; +} +#article-container figure.highlight table td { + padding: 0; + border: none; +} +#article-container figure.highlight .gutter pre { + padding-right: 0.625rem; + padding-left: 1.25rem; + background: var(--anzhiyu-secondbg); + background-color: var(--anzhiyu-secondbg); + border-right: var(--style-border-always); + padding-right: 0.5rem; + padding-left: 0.5rem; + color: var(--hlnumber-color); + text-align: right; +} +#article-container figure.highlight .code pre { + padding-right: 10px; + padding-left: 10px; + width: 100%; +} +#article-container pre, +#article-container figure.highlight { + overflow: auto; + margin: 0 0 20px; + padding: 0; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + color: var(--hl-color); + line-height: 1.6; +} +#article-container pre, +#article-container code { + font-size: var(--global-font-size); + font-family: consolas, Menlo, "PingFang SC", "Microsoft JhengHei", "Microsoft YaHei", sans-serif !important; +} +#article-container code { + padding: 2px 4px; + background: var(--anzhiyu-code-stress); + color: #fff; +} +#article-container pre { + padding: 10px 20px; +} +#article-container pre code { + padding: 0; + background: none; + color: var(--hl-color); + text-shadow: none; +} +#article-container figure.highlight { + position: relative; +} +#article-container figure.highlight pre { + margin: 0; + padding: 8px 0; + border: none; +} +#article-container figure.highlight figcaption, +#article-container figure.highlight .caption { + padding: 6px 0 2px 14px; + font-size: var(--global-font-size); + line-height: 1em; +} +#article-container figure.highlight figcaption a, +#article-container figure.highlight .caption a { + float: right; + padding-right: 10px; + color: var(--hl-color); +} +#article-container figure.highlight figcaption a:hover, +#article-container figure.highlight .caption a:hover { + border-bottom-color: var(--hl-color); +} +#article-container .highlight-tools { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + overflow: hidden; + min-height: 24px; + height: 2.15em; + background: var(--hltools-bg); + color: var(--hltools-color); + font-size: var(--global-font-size); + border-bottom: var(--style-border-always); +} +#article-container .highlight-tools.closed { + border-bottom: 1px solid transparent; + height: calc(2.15em - 1px); +} +#article-container .highlight-tools.closed ~ * { + display: none; +} +#article-container .highlight-tools.closed .expand { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: rotate(-90deg) !important; + -moz-transform: rotate(-90deg) !important; + -o-transform: rotate(-90deg) !important; + -ms-transform: rotate(-90deg) !important; + transform: rotate(-90deg) !important; +} +#article-container .highlight-tools .expand { + position: absolute; + padding: 0.57em 0.7em; + cursor: pointer; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#article-container .highlight-tools .expand + .code-lang { + left: 1.7em; +} +#article-container .highlight-tools .code-lang { + position: absolute; + left: 14px; + text-transform: uppercase; + font-weight: bold; + font-size: 1.15em; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#article-container .highlight-tools .copy-notice { + position: absolute; + right: 2.4em; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.4s; + -moz-transition: opacity 0.4s; + -o-transition: opacity 0.4s; + -ms-transition: opacity 0.4s; + transition: opacity 0.4s; +} +#article-container .highlight-tools .copy-button { + position: absolute; + right: 14px; + cursor: pointer; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -o-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; +} +#article-container .highlight-tools .copy-button:hover { + color: var(--anzhiyu-main); +} +#article-container .gutter { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#article-container .gist table { + width: auto; +} +#article-container .gist table td { + border: none; +} +#article-container .code-expand-btn { + position: absolute; + bottom: 0px; + z-index: 10; + width: 100%; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + font-size: 20px; + background: var(--anzhiyu-secondbg); + text-align: center; + font-size: var(--global-font-size); + cursor: pointer; + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + height: 32px; + font-size: 16px; +} +#article-container .code-expand-btn:hover { + background: var(--anzhiyu-main); +} +#article-container .code-expand-btn:hover i { + color: var(--anzhiyu-white); +} +#article-container .code-expand-btn i { + color: var(--anzhiyu-fontcolor); + -webkit-animation: 1.2s ease 0s infinite normal none running code-expand-key; + -moz-animation: 1.2s ease 0s infinite normal none running code-expand-key; + -o-animation: 1.2s ease 0s infinite normal none running code-expand-key; + -ms-animation: 1.2s ease 0s infinite normal none running code-expand-key; + animation: 1.2s ease 0s infinite normal none running code-expand-key; +} +#article-container .code-expand-btn.expand-done { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: all 0s, background 0.3s; + -moz-transition: all 0s, background 0.3s; + -o-transition: all 0s, background 0.3s; + -ms-transition: all 0s, background 0.3s; + transition: all 0s, background 0.3s; +} +#article-container .code-expand-btn.expand-done + table, +#article-container .code-expand-btn.expand-done + pre { + margin-bottom: 1.8em; +} +#article-container .code-expand-btn:not(.expand-done) ~ table, +#article-container .code-expand-btn:not(.expand-done) ~ pre { + overflow: hidden; + height: 330px; +} +@-moz-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +.error404 #error-wrap { + position: absolute; + top: 50%; + right: 0; + left: 0; + margin: 0 auto; + padding: 60px 20px 0; + max-width: 1000px; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.error404 #error-wrap .error-content { + overflow: hidden; + margin: 0 20px; + height: 360px; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content { + margin: 0; + height: 500px; + } +} +.error404 #error-wrap .error-content .error-img { + display: inline-block; + overflow: hidden; + width: 50%; + height: 100%; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content .error-img { + width: 100%; + height: 45%; + } +} +.error404 #error-wrap .error-content .error-img img { + background-color: #425aef; +} +.error404 #error-wrap .error-content .error-info { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + width: 50%; + height: 100%; + vertical-align: top; + text-align: center; + font-family: PingFang SC, 'Hiragino Sans GB', 'Microsoft JhengHei', 'Microsoft YaHei', sans-serif; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content .error-info { + width: 100%; + height: 55%; + } +} +.error404 #error-wrap .error-content .error-info .error_title { + margin-top: -0.6em; + font-size: 9em; +} +@media screen and (max-width: 768px) { + .error404 #error-wrap .error-content .error-info .error_title { + font-size: 8em; + } +} +.error404 #error-wrap .error-content .error-info .error_subtitle { + margin-top: -3em; + word-break: break-word; + font-size: 1.6em; + -webkit-line-clamp: 2; +} +.error404 + #rightside { + display: none; +} +body[data-type='about'] #page { + border: 0; + -webkit-box-shadow: none !important; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type='about'] #page .page-title { + display: none; +} +body[data-type='about'] .page #footer-wrap { + opacity: 1; + -ms-filter: none; + filter: none; + overflow: visible; + height: auto !important; + min-height: 16px; + color: #666; +} +body[data-type='about'] #web_bg { + background: var(--anzhiyu-background); +} +#about-page { + padding-top: 1rem; +} +#about-page .author-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin: 0 0 16px 0; +} +#about-page .author-box .author-tag-left { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-tag-left { + display: none; + } +} +#about-page .author-box .author-tag-left .author-tag:first-child, +#about-page .author-box .author-tag-left .author-tag:last-child { + margin-right: -16px; +} +#about-page .author-box .author-tag-right { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-tag-right { + display: none; + } +} +#about-page .author-box .author-tag-right .author-tag:first-child, +#about-page .author-box .author-tag-right .author-tag:last-child { + margin-left: -16px; +} +#about-page .author-box .author-tag { + -webkit-transform: translate(0, -4px); + -moz-transform: translate(0, -4px); + -o-transform: translate(0, -4px); + -ms-transform: translate(0, -4px); + transform: translate(0, -4px); + padding: 1px 8px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + border-radius: 40px; + margin-top: 6px; + font-size: 14px; + font-weight: 700; + -webkit-box-shadow: var(--anzhiyu-shadow-lightblack); + box-shadow: var(--anzhiyu-shadow-lightblack); + -webkit-animation: 6s ease-in-out 0s infinite normal none running floating; + -moz-animation: 6s ease-in-out 0s infinite normal none running floating; + -o-animation: 6s ease-in-out 0s infinite normal none running floating; + -ms-animation: 6s ease-in-out 0s infinite normal none running floating; + animation: 6s ease-in-out 0s infinite normal none running floating; +} +#about-page .author-box .author-tag:nth-child(1) { + -webkit-animation-delay: 0s; + -moz-animation-delay: 0s; + -o-animation-delay: 0s; + -ms-animation-delay: 0s; + animation-delay: 0s; +} +#about-page .author-box .author-tag:nth-child(2) { + -webkit-animation-delay: 0.6s; + -moz-animation-delay: 0.6s; + -o-animation-delay: 0.6s; + -ms-animation-delay: 0.6s; + animation-delay: 0.6s; +} +#about-page .author-box .author-tag:nth-child(3) { + -webkit-animation-delay: 1.2s; + -moz-animation-delay: 1.2s; + -o-animation-delay: 1.2s; + -ms-animation-delay: 1.2s; + animation-delay: 1.2s; +} +#about-page .author-box .author-tag:nth-child(4) { + -webkit-animation-delay: 1.8s; + -moz-animation-delay: 1.8s; + -o-animation-delay: 1.8s; + -ms-animation-delay: 1.8s; + animation-delay: 1.8s; +} +#about-page .author-box .author-img { + margin: 0 30px; + border-radius: 50%; + width: 180px; + height: 180px; + position: relative; + background: var(--anzhiyu-secondbg); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-img { + width: 120px; + height: 120px; + } +} +#about-page .author-box .author-img img { + border-radius: 50%; + overflow: hidden; + width: 180px; + height: 180px; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-img img { + width: 120px; + height: 120px; + } +} +#about-page .author-box .author-img:hover { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +#about-page .author-box .author-img:before { + content: ''; + -webkit-transition: 1s; + -moz-transition: 1s; + -o-transition: 1s; + -ms-transition: 1s; + transition: 1s; + width: 30px; + height: 30px; + background: var(--anzhiyu-green); + position: absolute; + border-radius: 50%; + border: 5px solid var(--anzhiyu-background); + bottom: 5px; + right: 10px; + z-index: 2; +} +@media screen and (max-width: 768px) { + #about-page .author-box .author-img:before { + bottom: -5px; + right: -5px; + } +} +.author-content { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; + margin-top: 1rem; +} +#about-page .myInfoAndSayHello { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + color: var(--anzhiyu-white); + background: -webkit-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: -moz-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: -o-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: -ms-linear-gradient(330deg, #5b27ff 0, #00d4ff 100%); + background: linear-gradient(120deg, #5b27ff 0, #00d4ff 100%); + background-size: 200%; + -webkit-animation: gradient 15s ease infinite; + -moz-animation: gradient 15s ease infinite; + -o-animation: gradient 15s ease infinite; + -ms-animation: gradient 15s ease infinite; + animation: gradient 15s ease infinite; + width: 59%; +} +.author-content-item { + width: 49%; + border-radius: 24px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + position: relative; + padding: 1rem 2rem; + overflow: hidden; +} +#about-page .myInfoAndSayHello .title1 { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + line-height: 1.3; +} +#about-page .myInfoAndSayHello .title2 { + font-size: 36px; + font-weight: 700; + line-height: 1.1; + margin: 0.5rem 0; +} +.inline-word { + word-break: keep-all; + white-space: nowrap; +} +#about-page .myInfoAndSayHello .title1 { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + line-height: 1.3; +} +.author-content-item.aboutsiteTips { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 39%; +} +.aboutsiteTips h2 { + margin-right: auto; + font-size: 36px; + font-family: Helvetica; + line-height: 1.06; + letter-spacing: -0.02em; + color: var(--font-color); + margin-top: 0; +} +.aboutsiteTips .mask { + height: 36px; + position: relative; + overflow: hidden; + margin-top: 4px; +} +.aboutsiteTips .mask span { + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: absolute; + top: 36px; + padding-bottom: var(--offset); + background-size: 100% 100%; + -webkit-background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-repeat: no-repeat; +} +.aboutsiteTips .mask span[data-show] { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); + -webkit-transition: 0.5s -webkit-transform ease-in-out; + -moz-transition: 0.5s -moz-transform ease-in-out; + -o-transition: 0.5s -o-transform ease-in-out; + -ms-transition: 0.5s -ms-transform ease-in-out; + transition: 0.5s transform ease-in-out; +} +.aboutsiteTips .mask span[data-up] { + -webkit-transform: translateY(-200%); + -moz-transform: translateY(-200%); + -o-transform: translateY(-200%); + -ms-transform: translateY(-200%); + transform: translateY(-200%); + -webkit-transition: 0.5s -webkit-transform ease-in-out; + -moz-transition: 0.5s -moz-transform ease-in-out; + -o-transition: 0.5s -o-transform ease-in-out; + -ms-transition: 0.5s -ms-transform ease-in-out; + transition: 0.5s transform ease-in-out; +} +.aboutsiteTips .mask span:nth-child(1) { + background-image: -webkit-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: -moz-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: -o-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: -ms-linear-gradient(45deg, #0ecffe 50%, #07a6f1); + background-image: linear-gradient(45deg, #0ecffe 50%, #07a6f1); +} +.aboutsiteTips .mask span:nth-child(2) { + background-image: -webkit-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: -moz-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: -o-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: -ms-linear-gradient(45deg, #18e198 50%, #0ec15d); + background-image: linear-gradient(45deg, #18e198 50%, #0ec15d); +} +.aboutsiteTips .mask span:nth-child(3) { + background-image: -webkit-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: -moz-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: -o-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: -ms-linear-gradient(45deg, #8a7cfb 50%, #633e9c); + background-image: linear-gradient(45deg, #8a7cfb 50%, #633e9c); +} +.aboutsiteTips .mask span:nth-child(4) { + background-image: -webkit-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: -moz-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: -o-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: -ms-linear-gradient(45deg, #fa7671 50%, #f45f7f); + background-image: linear-gradient(45deg, #fa7671 50%, #f45f7f); +} +@media screen and (max-width: 768px) { + .author-content-item.map { + margin-bottom: 0; + } +} +#about-page .about-statistic { + min-height: 380px; + width: 39%; + background-size: cover; + color: var(--anzhiyu-white); + overflow: hidden; +} +#about-page .about-statistic::after { + -webkit-box-shadow: 0 -159px 173px 71px #0c1c2c inset; + box-shadow: 0 -159px 173px 71px #0c1c2c inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.author-content-item .card-content { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 1rem 2rem; +} +.author-content-item .card-content .author-content-item-title { + margin-bottom: 0.5rem; +} +.author-content-item .author-content-item-title { + font-size: 36px; + font-weight: 700; + line-height: 1; +} +#statistic { + font-size: 16px; + border-radius: 15px; + width: 100%; + color: var(--anzhiyu-white); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-top: 1rem; + margin-bottom: 2rem; +} +#statistic div span:first-child { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 12px; +} +#statistic div span:last-child { + font-weight: 700; + font-size: 34px; + line-height: 1; + white-space: nowrap; +} +#statistic div { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 50%; + margin-bottom: 0.5rem; +} +.post-tips { + color: var(--anzhiyu-gray); + font-size: 14px; + position: absolute; + bottom: 1rem; + left: 2rem; +} +.post-tips a { + color: var(--anzhiyu-gray) !important; + border: none !important; +} +.author-content-item .card-content .banner-button-group { + position: absolute; + bottom: 1.5rem; + right: 2rem; +} +.author-content-item .card-content .banner-button-group .banner-button { + height: 40px; + border-radius: 20px; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + z-index: 1; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + cursor: pointer; + border-bottom: 0 !important; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.author-content-item .card-content .banner-button-group .banner-button i, +.author-content-item .card-content .banner-button-group .banner-button svg { + margin-right: 0.25rem; + font-size: 22px; +} +.author-content-item .card-content .banner-button-group .banner-button .banner-button-text { + margin-left: 4px; +} +#about-page .author-content-item .card-content .banner-button-group .banner-button i, +#about-page .author-content-item .card-content .banner-button-group .banner-button svg { + font-size: 22px; + margin-right: 0.25rem; + height: 40px; + max-width: 40px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 50px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.author-content-item .card-content .banner-button-group .banner-button:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + border-radius: 20px !important; +} +.author-content-item .card-content .banner-button-group .banner-button:hover i, +.author-content-item .card-content .banner-button-group .banner-button:hover svg .author-content-item.personalities { + background: none !important; +} +.author-content-item.personalities { + width: 59%; +} +.author-content-item.personalities .image { + position: absolute; + right: 30px; + top: 10px; + width: 220px; + -webkit-transition: -webkit-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + -moz-transition: -moz-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + -o-transition: -o-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + -ms-transition: -ms-transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); + transition: transform 2s cubic-bezier(0.13, 0.45, 0.21, 1.02); +} +.author-content-item.personalities .image img { + display: block; + margin: 0 auto 20px; + max-width: 100%; + -webkit-transition: filter 375ms ease-in 0.2s; + -moz-transition: filter 375ms ease-in 0.2s; + -o-transition: filter 375ms ease-in 0.2s; + -ms-transition: filter 375ms ease-in 0.2s; + transition: filter 375ms ease-in 0.2s; +} +.author-content-item.personalities:hover .image { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + transform: rotate(-10deg); +} +.author-content-item.myphoto { + height: 60%; + min-height: 240px; + position: relative; + overflow: hidden; + width: 39%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.author-content-item.myphoto img { + position: absolute; + min-width: 100%; + object-fit: cover; + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + -webkit-animation: coverIn 2s ease-out forwards; + -moz-animation: coverIn 2s ease-out forwards; + -o-animation: coverIn 2s ease-out forwards; + -ms-animation: coverIn 2s ease-out forwards; + animation: coverIn 2s ease-out forwards; + -webkit-transition: -webkit-transform 2s ease-out !important; + -moz-transition: -moz-transform 2s ease-out !important; + -o-transition: -o-transform 2s ease-out !important; + -ms-transition: -ms-transform 2s ease-out !important; + transition: transform 2s ease-out !important; +} +.author-content-item.myphoto:hover img { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.author-content-item:hover .card-background-icon { + -webkit-transform: rotate(20deg); + -moz-transform: rotate(20deg); + -o-transform: rotate(20deg); + -ms-transform: rotate(20deg); + transform: rotate(20deg); +} +.author-content-item.personalities .title2 { + font-size: 36px; + font-weight: 700; + line-height: 1.1; +} +.author-content-item.map { + min-height: 160px; + max-height: 400px; + position: relative; + overflow: hidden; + margin-bottom: 0.5rem; + height: 60%; + -webkit-transition: 1s ease-in-out; + -moz-transition: 1s ease-in-out; + -o-transition: 1s ease-in-out; + -ms-transition: 1s ease-in-out; + transition: 1s ease-in-out; + background-size: 100%; + background-repeat: no-repeat; + background-position: center; +} +.author-content-item.single { + width: 100%; +} +.author-content-item.map .map-title { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + color: var(--font-color); + background: var(--anzhiyu-maskbg); + padding: 0.5rem 2rem; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-transition: all 1s, color 0s ease-in-out; + -moz-transition: all 1s, color 0s ease-in-out; + -o-transition: all 1s, color 0s ease-in-out; + -ms-transition: all 1s, color 0s ease-in-out; + transition: all 1s, color 0s ease-in-out; + font-size: 20px; +} +.author-content-item.map .map-title b { + color: var(--font-color); +} +.author-content-item.selfInfo { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + min-height: 100px; + max-height: 400px; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + height: -webkit-fill-available; + height: 40%; +} +.author-content-item.selfInfo div { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 0.5rem 2rem 0.5rem 0; + min-width: 120px; +} +.author-content-item.selfInfo .selfInfo-title { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 12px; + line-height: 1; + margin-bottom: 8px; +} +.author-content-item.selfInfo .selfInfo-content { + font-weight: 700; + font-size: 34px; + line-height: 1; +} +.author-content-item-group.column.mapAndInfo { + width: 59%; +} +.author-content-item.map:hover { + background-size: 120%; + -webkit-transition: 4s ease-in-out; + -moz-transition: 4s ease-in-out; + -o-transition: 4s ease-in-out; + -ms-transition: 4s ease-in-out; + transition: 4s ease-in-out; + background-position-x: 0; + background-position-y: 36%; +} +.author-content-item.map:hover .map-title { + bottom: -100%; +} +.author-content-item-group.column { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 49%; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.post-tips a:hover { + color: var(--anzhiyu-main) !important; + background: none !important; +} +.author-content-item.single.reward .reward-list-updateDate { + color: var(--anzhiyu-gray); + font-size: 14px; +} +.author-content-item.maxim { + font-size: 36px; + font-weight: 700; + line-height: 1.1; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 39%; +} +.author-content-item .author-content-item-tips { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 12px; + margin-bottom: 0.5rem; +} +.author-content-item.maxim .maxim-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.author-content-item.buff { + height: 200px; + font-size: 36px; + font-weight: 700; + line-height: 1.1; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + background: -webkit-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: -moz-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: -o-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: -ms-linear-gradient(330deg, #ff27e8 0, #ff8000 100%); + background: linear-gradient(120deg, #ff27e8 0, #ff8000 100%); + color: var(--anzhiyu-white); + background-size: 200%; + -webkit-animation: gradient 15s ease infinite; + -moz-animation: gradient 15s ease infinite; + -o-animation: gradient 15s ease infinite; + -ms-animation: gradient 15s ease infinite; + animation: gradient 15s ease infinite; + min-height: 200px; + height: fit-content; + width: 59%; +} +.author-content-item.buff .card-content { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.author-content-item.buff .buff-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.card-background-icon { + font-size: 12rem; + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; + filter: alpha(opacity=20); + position: absolute; + right: 0; + bottom: -40%; + -webkit-transform: rotate(30deg); + -moz-transform: rotate(30deg); + -o-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); + -webkit-transition: 2s ease-in-out; + -moz-transition: 2s ease-in-out; + -o-transition: 2s ease-in-out; + -ms-transition: 2s ease-in-out; + transition: 2s ease-in-out; +} +.card-background-icon i { + font-size: 12rem; +} +.author-content-item.game-yuanshen { + background-size: cover; + min-height: 300px; + overflow: hidden; + color: var(--anzhiyu-white); + width: 59%; +} +.author-content-item .content-bottom { + margin-top: auto; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.author-content-item .content-bottom .icon-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; +} +.author-content-item .content-bottom .icon-group i { + display: inline-block; + width: 143px; + height: 18px; + margin-right: 0.5rem; +} +.author-content-item.game-yuanshen::after { + -webkit-box-shadow: 0 -69px 203px 11px #575d8b inset; + box-shadow: 0 -69px 203px 11px #575d8b inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.author-content-item.comic-content { + width: 39%; + min-height: 300px; + overflow: hidden; +} +.author-content-item.comic-content .comic-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 120%; + height: 100%; + position: absolute; + left: 50%; + top: 0; + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -o-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); +} +.author-content-item.comic-content .author-content-item-tips, +.author-content-item.comic-content .author-content-item-title { + z-index: 2; + color: var(--anzhiyu-white); + pointer-events: none; +} +.author-content-item.comic-content .comic-item { + height: 100%; + color: #fff; + width: 20%; + -webkit-transform: skew(-10deg, 0deg); + -moz-transform: skew(-10deg, 0deg); + -o-transform: skew(-10deg, 0deg); + -ms-transform: skew(-10deg, 0deg); + transform: skew(-10deg, 0deg); + -webkit-transition: 0.8s; + -moz-transition: 0.8s; + -o-transition: 0.8s; + -ms-transition: 0.8s; + transition: 0.8s; + position: relative; + overflow: hidden; +} +.author-content-item.comic-content .comic-item:hover { + width: 46%; +} +.author-content-item.comic-content .comic-item:hover .comic-item-cover { + left: 16%; + -webkit-transform: skew(10deg, 0deg) scale(1.6); + -moz-transform: skew(10deg, 0deg) scale(1.6); + -o-transform: skew(10deg, 0deg) scale(1.6); + -ms-transform: skew(10deg, 0deg) scale(1.6); + transform: skew(10deg, 0deg) scale(1.6); +} +.author-content-item.comic-content .comic-item .comic-item-cover { + position: absolute; + top: 0; + left: -50%; + height: 100%; + -webkit-transform: skew(10deg, 0deg); + -moz-transform: skew(10deg, 0deg); + -o-transform: skew(10deg, 0deg); + -ms-transform: skew(10deg, 0deg); + transform: skew(10deg, 0deg); + object-fit: cover; + -webkit-transition: scale 0.2s, all 0.8s; + -moz-transition: scale 0.2s, all 0.8s; + -o-transition: scale 0.2s, all 0.8s; + -ms-transition: scale 0.2s, all 0.8s; + transition: scale 0.2s, all 0.8s; +} +.author-content-item.comic-content .comic-item .comic-item-cover img { + height: 100%; + -webkit-transition: 0.8s; + -moz-transition: 0.8s; + -o-transition: 0.8s; + -ms-transition: 0.8s; + transition: 0.8s; + max-width: none; + border-radius: 0px; +} +.author-content-item.comic-content::after { + -webkit-box-shadow: 0 -48px 203px 11px #fbe9b8 inset; + box-shadow: 0 -48px 203px 11px #fbe9b8 inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +.author-content-item.like-technology { + min-height: 230px; + color: var(--anzhiyu-white); +} +.author-content-item.like-music { + min-height: 400px; + color: var(--anzhiyu-white); + overflow: hidden; +} +.author-content-item.like-music::after { + -webkit-box-shadow: 0 -69px 203px 11px #453e38 inset; + box-shadow: 0 -69px 203px 11px #453e38 inset; + position: absolute; + content: ''; + width: 100%; + height: 100%; + top: 0; + left: 0; +} +@media screen and (max-width: 1200px) { + .author-content-item.personalities .image { + width: 180px; + } +} +@media screen and (max-width: 768px) { + #gitcalendar { + display: none; + } + [data-theme='dark'] .author-content-item .card-content .banner-button-group .banner-button { + color: var(--anzhiyu-black) !important; + } + .author-content-item .card-content .banner-button-group .banner-button:hover { + background: none !important; + } + .author-content-item.game-yuanshen .content-bottom { + padding-bottom: 10px; + } + .author-content-item.game-yuanshen .game-yuanshen-uid { + display: none; + } + .author-content { + margin-top: 0; + } + .author-content-item { + width: 100% !important; + margin-top: 1rem; + padding: 1rem; + } + .author-content-item.map { + margin-bottom: 0; + } + .author-content-item-group.column { + width: 100% !important; + } + .author-content-item.selfInfo { + height: 95%; + } + .author-content-item.personalities { + height: 200px; + } + .post-tips { + left: auto; + } + .author-content-item.personalities .image { + width: 125px; + } + .site-card-group > a { + width: 100% !important; + } + body[data-type='about'] .post-reward { + display: none; + } + .reward-list-item { + width: 100% !important; + } + .author-content-item .card-content .banner-button-group .banner-button-text { + display: none; + } + .author-content-item .card-content .banner-button-group { + right: 1rem; + bottom: 1rem; + } + .author-content-item .card-content .banner-button-group .banner-button { + background: none; + padding: 0; + width: auto; + backdrop-filter: unset; + } + .author-content-item .card-content .banner-button-group .banner-button i, + .author-content-item .card-content .banner-button-group .banner-button svg { + margin-right: 0.25rem; + font-size: 1.5rem; + background: #fff; + border-radius: 50%; + padding: 6px; + margin-left: 80px; + height: 40px; + width: 40px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + color: var(--anzhiyu-fontcolor); + } + .author-content-item .card-content .banner-button-group .banner-button:hover i { + background: var(--anzhiyu-background) !important; + color: var(--anzhiyu-theme); + } + #selfInfo-content-year { + width: 90px; + } +} +@media screen and (min-width: 768px) and (max-width: 896px) { + .author-content-item.like-music .content-bottom .tips { + display: none; + } +} +.reward-list-all { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + margin-top: 1rem; + margin-bottom: 0.5rem; + margin-left: -0.25rem; + margin-right: -0.25rem; +} +.reward-list-item { + padding: 1rem; + border-radius: 12px; + border: var(--style-border-always); + width: calc((100% / 5) - 0.5rem); + margin: 0 0.25rem 0.5rem 0.25rem; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +@media screen and (max-width: 1200px) { + .reward-list-item { + width: calc((100% / 3) - 0.5rem); + } +} +.reward-list-item .reward-list-item-name { + font-size: 1rem; + font-weight: 700; + line-height: 1; + margin-bottom: 0.5rem; +} +.reward-list-item .reward-list-bottom-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.reward-list-item .reward-list-item-money { + padding: 4px; + background: var(--font-color); + color: var(--card-bg); + font-size: 12px; + line-height: 1; + border-radius: 4px; + margin-right: 4px; + white-space: nowrap; +} +.reward-list-item .reward-list-item-time { + font-size: 12px; + color: var(--anzhiyu-secondtext); + white-space: nowrap; +} +.skills { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 50%; + min-height: 450px; +} +.skills .skill-icon { + width: 32px; + height: 32px; + border-radius: 32px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-right: 8px; +} +.skills .skills-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + position: absolute; + width: 100%; + top: 0; + left: 0; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + margin-top: 10px; +} +.skills .skill-info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-right: 10px; + margin-top: 10px; + background: var(--anzhiyu-background); + border-radius: 40px; + padding: 4px 12px 4px 8px; + border: var(--style-border); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +.skills .skill-icon img { + width: 18px; + height: 18px; + margin: 0 auto !important; +} +.skills .skills-style-group { + position: relative; +} +.author-content-item.skills .skills-style-group { + position: relative; +} +.skills:hover .skills-style-group #skills-tags-group-all { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.skills:hover .skills-style-group .skills-list { + opacity: 1; + -ms-filter: none; + filter: none; +} +.author-content-item.careers { + min-height: 400px; + background-size: contain; + background-repeat: no-repeat; + background-position-x: right; + background-position-y: bottom; +} +.author-content-item.careers .careers-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; + margin-top: 12px; + margin-bottom: 12px; +} +.author-content-item.careers .career-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.author-content-item.careers .career-item .circle { + width: 16px; + height: 16px; + margin-top: 3px; + margin-right: 8px; + border-radius: 50%; +} +.author-content-item.careers .career-item .text { + color: var(--anzhiyu-secondtext); +} +.author-content-item.careers .careers-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.author-content-item.careers .careers-item .circle { + width: 16px; + height: 16px; + margin-right: 8px; + border-radius: 16px; +} +.author-content-item.careers .careers-item .name { + color: var(--anzhiyu-secondtext); +} +.author-content-item.careers img { + position: absolute; + left: 0; + bottom: 20px; + width: 100%; + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + z-index: -1; +} +:root { + --loadingbar-background-color: #2c2b30; + --loadingbar-prospect-color: #ece5d8; +} +.loading-bar { + position: absolute; + top: 50%; + left: 50%; + width: 500px; + height: 62.5px; + -webkit-transform: translate(-25%, -50%) scale(0.5); + -moz-transform: translate(-25%, -50%) scale(0.5); + -o-transform: translate(-25%, -50%) scale(0.5); + -ms-transform: translate(-25%, -50%) scale(0.5); + transform: translate(-25%, -50%) scale(0.5); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; +} +.loading-bar::after { + content: ''; + position: absolute; + top: 500px; + left: 0; + filter: drop-shadow(0 -500px 0 var(--loadingbar-prospect-color)); + width: 500px; + height: 62.5px; + background: url("https://yuanshen.site/imgs/loading-bar.png") no-repeat left 100%; + background-size: 500px 62.5px; + background-position-x: 0; +} +.author-content-item.game-yuanshen:hover .loading-bar::after { + -webkit-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + -moz-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + -o-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + -ms-animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; + animation: loading-bar 3.5s cubic-bezier(0.28, 0.11, 0.32, 1) infinite forwards; +} +@media screen and (max-width: 719px) { + .loading-bar .loading-bar { + display: none; + } +} +@media screen and (max-width: 719px) and (orientation: landscape) { + .loading-bar .loading-bar { + display: block !important; + -webkit-transform: translate(-50%, -50%) scale(0.7) !important; + -moz-transform: translate(-50%, -50%) scale(0.7) !important; + -o-transform: translate(-50%, -50%) scale(0.7) !important; + -ms-transform: translate(-50%, -50%) scale(0.7) !important; + transform: translate(-50%, -50%) scale(0.7) !important; + } +} +@supports not (filter: drop-shadow(0 0 0 #fff)) { + .loading-bar:before { + content: 'Your browser does not support the animation'; + } +} +.hello-about { + margin: 20px auto; + border-radius: 24px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + position: relative; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.shapes { + position: relative; + height: 315px; + width: 100%; + background: #2128bd; + overflow: hidden; +} +.shape { + will-change: transform; + position: absolute; + border-radius: 50%; +} +.shape.shape-1 { + background: #005ffe; + width: 650px; + height: 650px; + margin: -325px 0 0 -325px; +} +.shape.shape-2 { + background: #ffe5e3; + width: 440px; + height: 440px; + margin: -220px 0 0 -220px; +} +.shape.shape-3 { + background: #ffcc57; + width: 270px; + height: 270px; + margin: -135px 0 0 -135px; +} +.hello-about .content { + top: 0; + left: 0; + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + height: 315px; + width: 100%; + background: #fff; + mix-blend-mode: screen; +} +[data-theme='dark'] .hello-about .content { + background: transparent; +} +[data-theme='dark'] .hello-about h1 { + color: var(--anzhiyu-white); +} +.hello-about h1 { + font-size: 200px; + color: #000; + margin: 0; + text-align: center; + font: inherit; + vertical-align: baseline; + line-height: 1; + font-size: calc(0.0989119683 * 100vw + 58.5558852621px); + width: 100%; + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +@media (min-width: 419px) { + .hello-about h1 { + font-size: calc(0.0989119683 * 100vw + 58.5558852621px); + } +} +@media (max-width: 768px) { + .hello-about { + margin: 20px 0 auto; + } +} +.cursor { + position: absolute; + background: #2128bd; + width: 20px; + height: 20px; + margin: -10px 0 0 -10px; + border-radius: 50%; + will-change: transform; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + z-index: 3; +} + { + body: 1; +} +@-moz-keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +@-webkit-keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +@-o-keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +@keyframes loading-bar { + 0% { + width: 0; + background-size: 500px 62.5px; + } + 83% { + width: 475px; + } + 83.1% { + width: 475px; + } + 83.2% { + width: 475px; + } + 83.3% { + width: 475px; + } + 83.4% { + width: 475px; + } + 83.5% { + width: 475px; + } + 83.6% { + width: 475px; + } + 83.7% { + width: 475px; + } + 83.8% { + width: 475px; + } + 83.9% { + width: 475px; + } + 84% { + width: 475px; + } + 85% { + width: 475px; + } + 86% { + width: 475px; + } + 87% { + width: 475px; + } + 100% { + width: 500px; + } +} +.article-sort { + margin: 0.25rem; +} +.article-sort-title { + margin: 0.25rem; + padding: 0; + border: none; + font-weight: bold; + font-size: 2em; +} +.article-sort-item { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; + -o-transition: all 0.2s ease-in-out 0s; + -ms-transition: all 0.2s ease-in-out 0s; + transition: all 0.2s ease-in-out 0s; + border: none; + margin: 0 0 1rem 0rem; + overflow: hidden; + border-radius: 12px; +} +.article-sort-item.no-article-cover { + height: 80px; +} +.article-sort-item.no-article-cover .article-sort-item-info { + padding: 0; +} +.article-sort-item.year { + font-size: 1rem; + color: var(--anzhiyu-secondtext); + margin-bottom: 0.25rem; +} +.article-sort-item.year:hover:before { + border-color: #425aef; +} +.article-sort-item.year:before { + border-color: var(--pseudo-hover); +} +.article-sort-item-time { + color: var(--anzhiyu-fontcolor); + font-size: 95%; +} +.article-sort-item-time time { + padding-left: 6px; + cursor: default; +} +.article-sort-item-title { + color: var(--font-color); + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-line-clamp: 1; + margin-right: auto; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + -webkit-box-ordinal-group: 0; + -moz-box-ordinal-group: 0; + -o-box-ordinal-group: 0; + -ms-flex-order: 0; + -webkit-order: 0; + order: 0; + font-weight: bold; + line-height: 1.3; +} +.article-sort-item-title:hover { + color: var(--anzhiyu-lighttext); +} +.article-sort-item-index { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + position: absolute; + top: 0.5rem; + right: 0.5rem; + font-style: italic; + font-size: 2.5rem; + line-height: 1.5rem; +} +.article-sort-item-img { + overflow: hidden; + width: 151px; + height: 80px; + border-radius: 12px; + min-width: 151px; + min-height: 80px; + background: var(--anzhiyu-secondbg); + -webkit-mask-image: -webkit-radial-gradient(center, #fff, #000); +} +.article-sort-item-info { + padding: 0 0.8rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + max-height: 80px; + height: 80px; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +@media screen and (max-width: 768px) { + .article-sort-item-info .article-sort-item-index { + display: none; + } +} +.article-sort-item-info .article-sort-item-title { + height: 30%; +} +@media screen and (max-width: 768px) { + .article-sort-item-info .article-sort-item-title { + font-size: 0.9em; + height: 25%; + } +} +.article-sort-item-info .article-meta-wrap { + height: 35%; +} +.article-sort-item-info .article-meta-wrap .article-sort-item-tags a { + color: var(--anzhiyu-fontcolor); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin-right: auto; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding: 0 0.2rem; + padding-left: 0; +} +.article-sort-item-info .article-meta-wrap .article-sort-item-tags a span { + font-size: 12px; + margin-right: 1px; + pointer-events: none; +} +.article-sort-item-info .article-meta-wrap .article-sort-item-time { + font-size: 12px; +} +.category-lists .category-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .category-lists .category-title { + font-size: 2em; + } +} +.category-lists .category-list { + margin-bottom: 0; +} +.category-lists .category-list a { + color: var(--font-color); +} +.category-lists .category-list a:hover { + color: #425aef; +} +.category-lists .category-list .category-list-count { + margin-left: 8px; + color: var(--anzhiyu-fontcolor); +} +.category-lists .category-list .category-list-count:before { + content: '('; +} +.category-lists .category-list .category-list-count:after { + content: ')'; +} +.category-lists ul { + padding: 0 0 0 20px; +} +.category-lists ul ul { + padding-left: 4px; +} +.category-lists ul li { + position: relative; + margin: 6px 0; + padding: 0.12em 0.4em 0.12em 1.4em; +} +@media screen and (max-width: 768px) { + .post .layout#content-inner { + background: var(--anzhiyu-main); + } +} +#body-wrap { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100vh; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +@media screen and (max-width: 768px) { + #body-wrap .layout { + padding: 0; + } + #body-wrap #archive { + background: var(--anzhiyu-background); + border: none; + padding-top: 0px; + } +} +.layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 auto; + -ms-flex: 1 auto; + flex: 1 auto; + margin: 0 auto; + padding: 1.25rem 1.5rem; + max-width: 1200px; + width: 100%; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +@media screen and (max-width: 1200px) { + .layout { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding-top: 10px; + } +} +@media screen and (max-width: 768px) { + .layout { + padding: 20px 15px; + z-index: 3; + } +} +@media screen and (min-width: 2000px) { + .layout { + max-width: 1700px; + } +} +.layout > div:first-child:not(.recent-posts) { + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + padding: 2rem 2.5rem; + border-radius: 12px; + background: var(--anzhiyu-card-bg); + border: var(--style-border); + width: calc(100% - 300px); + -webkit-align-self: flex-start; + align-self: flex-start; + -ms-flex-item-align: start; + -webkit-animation: slide-in 0.6s 0.1s backwards; + -moz-animation: slide-in 0.6s 0.1s backwards; + -o-animation: slide-in 0.6s 0.1s backwards; + -ms-animation: slide-in 0.6s 0.1s backwards; + animation: slide-in 0.6s 0.1s backwards; +} +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + padding: 1rem 1rem; + -webkit-box-shadow: none; + box-shadow: none; + background: var(--anzhiyu-background); + } +} +.layout > div:first-child { + width: calc(100% - 300px); + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +@media screen and (max-width: 900px) { + .layout > div:first-child { + width: 100% !important; + } +} +.layout.hide-aside { + max-width: 1000px; +} +@media screen and (min-width: 2000px) { + .layout.hide-aside { + max-width: 1200px; + } +} +.layout.hide-aside > div { + width: 100% !important; +} +.apple #page-header.full_page { + background-attachment: scroll !important; +} +.apple .recent-post-item, +.apple .avatar-img, +.apple .flink-item-icon { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.goodthings-title { + margin: 1rem 0; + line-height: 1; +} +.equipment-item .equipment-item-content { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin: 0 -8px; +} +.equipment-item .equipment-item-content .equipment-item-content-item { + width: calc(25% - 12px); + border-radius: 12px; + border: var(--style-border-always); + overflow: hidden; + margin: 8px 6px; + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + min-height: 400px; + position: relative; +} +@media screen and (max-width: 1200px) { + .equipment-item .equipment-item-content .equipment-item-content-item { + width: calc(50% - 12px); + } +} +@media screen and (max-width: 768px) { + .equipment-item .equipment-item-content .equipment-item-content-item { + width: 100%; + } +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-info { + padding: 8px 16px 16px 16px; + margin-top: 12px; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-name { + font-size: 18px; + font-weight: bold; + line-height: 1; + margin-bottom: 8px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + width: fit-content; + cursor: pointer; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-name:hover { + color: var(--anzhiyu-main); +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-specification { + font-size: 12px; + color: var(--anzhiyu-secondtext); + line-height: 16px; + margin-bottom: 5px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-description { + line-height: 20px; + color: var(--anzhiyu-secondtext); + height: 60px; + display: -webkit-box; + overflow: hidden; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + font-size: 14px; +} +.equipment-item .equipment-item-content .equipment-item-content-item a.equipment-item-content-item-link { + font-size: 12px; + background: var(--anzhiyu-gray-op); + padding: 4px 8px; + border-radius: 8px; + cursor: pointer; +} +.equipment-item .equipment-item-content .equipment-item-content-item a.equipment-item-content-item-link:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-cover { + width: 100%; + height: 200px; + background: var(--anzhiyu-secondbg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.equipment-item .equipment-item-content .equipment-item-content-item img.equipment-item-content-item-image { + object-fit: contain; + height: 80%; + width: 260px; +} +.equipment-item .equipment-item-content .equipment-item-content-item .equipment-item-content-item-toolbar { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + position: absolute; + bottom: 12px; + left: 0; + width: 100%; + padding: 0 16px; +} +body[data-type="equipment"] #web_bg { + background: var(--anzhiyu-background); +} +body[data-type="equipment"] #page { + border: 0; + -webkit-box-shadow: none !important; + box-shadow: none !important; + padding: 0 !important; + background: 0 0 !important; +} +body[data-type="equipment"] #page .page-title { + display: none; +} +body[data-type="link"] #page .page-title { + display: none; +} +#flink-banners { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + height: 76%; + background: var(--anzhiyu-card-bg); + padding: 1.5rem; + border: var(--style-border); + border-radius: 12px; + overflow: hidden; + position: relative; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow: hidden; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + will-change: transform; + -webkit-animation: slide-in 0.6s 0.2s backwards; + -moz-animation: slide-in 0.6s 0.2s backwards; + -o-animation: slide-in 0.6s 0.2s backwards; + -ms-animation: slide-in 0.6s 0.2s backwards; + animation: slide-in 0.6s 0.2s backwards; +} +#flink-banners .flink .banners-title { + top: 1.5rem; +} +#flink-banners .banner-top-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#flink-banners .banner-button-group { + position: absolute; + right: 2rem; + top: 2.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +@media screen and (max-width: 768px) { + #flink-banners .banner-button-group { + display: none; + } +} +#flink-banners .banner-button-group .banner-button { + color: var(--anzhiyu-card-bg); +} +#flink-banners .banner-button-group .banner-button.secondary { + color: var(--anzhiyu-fontcolor); +} +#flink-banners .banner-button-group .banner-button:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); +} +#flink-banners .banner-button-group .banner-button i { + margin-right: 8px; + font-size: 1rem; +} +#flink-banners #skills-tags-group-all .img-alt { + display: none; +} +#flink-banners #skills-tags-group-all .tags-group-wrapper { + -webkit-animation: rowup 120s linear infinite; + -moz-animation: rowup 120s linear infinite; + -o-animation: rowup 120s linear infinite; + -ms-animation: rowup 120s linear infinite; + animation: rowup 120s linear infinite; +} +#flink-banners #skills-tags-group-all .tags-group-icon { + border-radius: 50%; +} +#flink-banners #skills-tags-group-all .tags-group-icon img { + min-width: 100%; + min-height: 100%; + border-radius: 50%; + object-fit: cover; +} +.flink-desc { + margin: 0.2rem 0 0.5rem; +} +#article-container .anzhiyu-flink-list { + overflow: auto; + margin: -6px; + text-align: center; +} +#article-container .anzhiyu-flink-list .img-alt { + display: none; +} +#article-container .anzhiyu-flink-list.cf-friends-lost-contact .flink-list-item { + height: 60px; +} +#article-container .anzhiyu-flink-list.cf-friends-lost-contact .flink-list-item:hover .cf-friends-link img { + width: 0; + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + margin: 0.5rem; + min-width: 0px; + min-height: 0px; +} +#article-container .anzhiyu-flink-list.cf-friends-lost-contact .flink-list-item .cf-friends-link img { + width: 30px; + height: 30px; + min-width: 30px; + min-height: 30px; +} +#article-container .anzhiyu-flink-list .flink-list-item { + margin: 6px 6px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-radius: 12px; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + -o-transition-timing-function: ease-in-out; + -ms-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; + position: relative; + width: calc(20% - 12px); + border: var(--style-border); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + background: var(--anzhiyu-card-bg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + float: left; + overflow: hidden; + height: 90px; + line-height: 17px; + -webkit-transform: translateZ(0px); + -moz-transform: translateZ(0px); + -o-transform: translateZ(0px); + -ms-transform: translateZ(0px); + transform: translateZ(0px); +} +#article-container .anzhiyu-flink-list .flink-list-item .cf-friends-link { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border: none; + width: 100%; + height: 100%; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + color: var(--anzhiyu-fontcolor); + text-decoration: none; + font-weight: bold; + padding: 0 4px; + border-radius: 4px 4px 0 0; +} +#article-container .anzhiyu-flink-list .flink-list-item .cf-friends-link img { + border-radius: 32px; + margin: 15px 20px 15px 15px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + background: var(--anzhiyu-background); + min-width: 60px; + min-height: 60px; + width: 60px; + height: 60px; + float: left; + object-fit: cover; +} +@media screen and (max-width: 1200px) { + #article-container .anzhiyu-flink-list .flink-list-item { + width: calc(50% - 15px) !important; + } +} +@media screen and (max-width: 600px) { + #article-container .anzhiyu-flink-list .flink-list-item { + width: calc(100% - 15px) !important; + } +} +#article-container .anzhiyu-flink-list .flink-list-item:hover:before, +#article-container .anzhiyu-flink-list .flink-list-item:focus:before, +#article-container .anzhiyu-flink-list .flink-list-item:active:before { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: calc(100% - 90px); + height: fit-content; +} +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-name { + text-align: left; + line-height: 20px; + color: var(--anzhiyu-fontcolor); + display: block; + padding: 0px 10px 0px 0px; + font-weight: 700; + font-size: 19px; + max-width: calc(100% - 12px); + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} +#article-container .anzhiyu-flink-list .flink-list-item .flink-item-info .flink-item-desc { + white-space: normal; + padding: 5px 10px 16px 0; + color: var(--anzhiyu-fontcolor); + text-align: left; + font-size: 0.93em; + height: 40px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +#article-container .anzhiyu-flink-list .flink-list-item:hover { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + background: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#article-container .anzhiyu-flink-list .flink-list-item:hover .site-card-tag { + left: -70px; +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a img { + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + width: 0; + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + margin: 0.5rem; + min-width: 0px; + min-height: 0px; +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a .flink-item-info { + min-width: calc(100% - 20px); +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a .flink-item-name { + color: var(--anzhiyu-white); +} +#article-container .anzhiyu-flink-list .flink-list-item:hover a .flink-item-desc { + overflow: hidden; + width: 100%; + color: var(--anzhiyu-white); +} +.flink-name { + margin-bottom: 5px; + font-weight: bold; + font-size: 1.5em; +} +#article-container img { + margin-bottom: 0.5rem; + object-fit: cover; + max-height: 900px; +} +.flexcard-flink-list { + overflow: hidden; +} +.flexcard-flink-list .flink-list-card .wrapper img { + -webkit-transition: -webkit-transform 0.5s ease-out !important; + -moz-transition: -moz-transform 0.5s ease-out !important; + -o-transition: -o-transform 0.5s ease-out !important; + -ms-transition: -ms-transform 0.5s ease-out !important; + transition: transform 0.5s ease-out !important; +} +.flexcard-flink-list .flink-list-card:hover { + border-color: var(--anzhiyu-main) !important; + background-color: var(--anzhiyu-main) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-theme) !important; + box-shadow: var(--anzhiyu-shadow-theme) !important; +} +.flexcard-flink-list > a { + width: calc(100% / 5 - 0.5rem); + height: 150px; + position: relative; + display: block; + margin: 0.5rem 0.25rem; + float: left; + overflow: hidden; + padding: 0; + border-radius: 8px; + -webkit-transition: all 0.3s ease 0s, -webkit-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -moz-transition: all 0.3s ease 0s, -moz-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -o-transition: all 0.3s ease 0s, -o-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -ms-transition: all 0.3s ease 0s, -ms-transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + transition: all 0.3s ease 0s, transform 0.6s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -webkit-box-shadow: none; + box-shadow: none; + border: var(--style-border) !important; +} +.flexcard-flink-list > a:hover .info { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); +} +.flexcard-flink-list > a:hover .wrapper img { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + -o-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); +} +.flexcard-flink-list > a:hover::before { + position: fixed; + width: inherit; + margin: auto; + left: 0; + right: 0; + top: 10%; + border-radius: 10px; + text-align: center; + z-index: 100; + content: attr(data-title); + font-size: 20px; + color: #fff; + padding: 10px; + background-color: rgba(66,90,239,0.8); +} +.flexcard-flink-list > a .cover { + width: 100%; + -webkit-transition: -webkit-transform 0.5s ease-out; + -moz-transition: -moz-transform 0.5s ease-out; + -o-transition: -o-transform 0.5s ease-out; + -ms-transition: -ms-transform 0.5s ease-out; + transition: transform 0.5s ease-out; +} +.flexcard-flink-list > a .wrapper { + position: relative; +} +.flexcard-flink-list > a .wrapper .fadeIn { + -webkit-animation: coverIn 0.8s ease-out forwards; + -moz-animation: coverIn 0.8s ease-out forwards; + -o-animation: coverIn 0.8s ease-out forwards; + -ms-animation: coverIn 0.8s ease-out forwards; + animation: coverIn 0.8s ease-out forwards; +} +.flexcard-flink-list > a .wrapper img { + height: 150px; + pointer-events: none; +} +.flexcard-flink-list > a .info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 3px; + background-color: rgba(255,255,255,0.7); + -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -moz-transition: -moz-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -o-transition: -o-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -ms-transition: -ms-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + transition: transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; +} +.flexcard-flink-list > a .info img { + position: relative; + top: 45px; + width: 80px; + height: 80px; + border-radius: 50% !important; + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3); + box-shadow: 0 0 10px rgba(0,0,0,0.3); + z-index: 1; + text-align: center; + pointer-events: none; +} +.flexcard-flink-list > a .info span { + padding: 20px 10% 60px 10%; + font-size: 16px; + width: 100%; + text-align: center; + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3); + box-shadow: 0 0 10px rgba(0,0,0,0.3); + background-color: rgba(255,255,255,0.7); + color: var(--font-color); + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +.flexcard-flink-list>a .info, +.flexcard-flink-list>a .wrapper .cover { + position: absolute; + top: 0; + left: 0; +} +@media screen and (max-width: 1024px) { + .flexcard-flink-list > a { + width: calc(33.33333% - 15px); + } +} +@media screen and (max-width: 600px) { + .flexcard-flink-list > a { + width: calc(50% - 15px); + } +} +[data-theme=dark] .flexcard-flink-list a .info, +[data-theme=dark] .flexcard-flink-list a .info span { + background-color: rgba(0,0,0,0.6); +} +[data-theme=dark] .flexcard-flink-list > a:hover:before { + background-color: rgba(18,18,18,0.8); +} +.justified-gallery > div > img, +.justified-gallery > figure > img, +.justified-gallery > a > a > img, +.justified-gallery > div > a > img, +.justified-gallery > figure > a > img, +.justified-gallery > a > svg, +.justified-gallery > div > svg, +.justified-gallery > figure > svg, +.justified-gallery > a > a > svg, +.justified-gallery > div > a > svg, +.justified-gallery > figure > a > svg { + position: static !important; +} +.site-card-tag { + position: absolute; + top: 0; + left: 0; + padding: 4px 8px; + background-color: var(--anzhiyu-theme); + -webkit-box-shadow: var(--anzhiyu-shadow-blue); + box-shadow: var(--anzhiyu-shadow-blue); + color: var(--anzhiyu-white); + z-index: 1; + border-radius: 11px 0 12px 0; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 12px; +} +.site-card-tag.speed { + background: var(--anzhiyu-green); + -webkit-box-shadow: var(--anzhiyu-shadow-green); + box-shadow: var(--anzhiyu-shadow-green); +} +.site-card-tag.vip { + background: -webkit-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: -moz-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: -o-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: -ms-linear-gradient(52deg, #e5b085 0%, #d48f16 100%); + background: linear-gradient(38deg, #e5b085 0%, #d48f16 100%); + overflow: hidden; + -webkit-box-shadow: var(--anzhiyu-shadow-yellow); + box-shadow: var(--anzhiyu-shadow-yellow); +} +.site-card-tag i.light { + cursor: pointer; + position: absolute; + top: 0; + width: 100px; + height: 50px; + background-image: -webkit--webkit-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit--moz-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit--o-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit--ms-linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + background-image: -webkit-linear-gradient(0deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + -webkit-animation: light_tag 4s both infinite; + -moz-animation: light_tag 4s both infinite; + -o-animation: light_tag 4s both infinite; + -ms-animation: light_tag 4s both infinite; + animation: light_tag 4s both infinite; + will-change: transform; +} +#article-container .telescopic-site-card-group { + padding: 20px 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + margin: -8px; + -webkit-box-align: stretch; + -webkit-box-align: stretch; + -moz-box-align: stretch; + -o-box-align: stretch; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; +} +#article-container .telescopic-site-card-group .site-card { + border: var(--style-border); + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + -o-transition-timing-function: ease-in-out; + -ms-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; + overflow: hidden; + height: 200px; + position: relative; + width: calc(100% / 7 - 16px); + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +#article-container .telescopic-site-card-group .site-card .img-alt { + display: none; +} +@media screen and (max-width: 1200px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(20% - 16px) !important; + } +} +@media screen and (max-width: 900px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(25% - 16px) !important; + } +} +@media screen and (max-width: 768px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(33.3333% - 16px) !important; + } +} +@media screen and (max-width: 600px) { + #article-container .telescopic-site-card-group .site-card { + width: calc(50% - 16px) !important; + } +} +#article-container .telescopic-site-card-group .site-card:hover { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#article-container .telescopic-site-card-group .site-card:hover .info { + background: var(--anzhiyu-theme); + height: 120px; +} +#article-container .telescopic-site-card-group .site-card:hover .info .site-card-text .title { + color: var(--anzhiyu-white); +} +#article-container .telescopic-site-card-group .site-card:hover .info .site-card-text .desc { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + color: var(--anzhiyu-white); + width: 100%; +} +@media screen and (min-width: 768px) { + #article-container .telescopic-site-card-group .site-card:hover .info .site-card-text .desc { + -webkit-line-clamp: 4; + } +} +#article-container .telescopic-site-card-group .site-card:hover .site-card-tag { + left: -50px; +} +#article-container .telescopic-site-card-group .site-card:hover .img { + height: 80px; +} +#article-container .telescopic-site-card-group .site-card:hover .img img { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + filter: brightness(0.3); +} +#article-container .telescopic-site-card-group .site-card .info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border: none; + padding: 0.7rem; + width: 100%; + height: 90px; + margin: 0; + border-radius: 0 0 12px 12px; +} +#article-container .telescopic-site-card-group .site-card .info .site-card-text { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; +} +#article-container .telescopic-site-card-group .site-card .info .site-card-text .title { + color: var(--anzhiyu-fontcolor); + text-align: left; + font-weight: 600; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 1; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +#article-container .telescopic-site-card-group .site-card .info .site-card-text .desc { + font-size: 0.9rem; + color: var(--anzhiyu-fontcolor); + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + text-align: left; + overflow-wrap: break-word; + line-height: 1.2; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 2; +} +#article-container .telescopic-site-card-group .site-card .info .img-alt { + display: none; +} +#article-container .telescopic-site-card-group .site-card .info img { + border-radius: 32px; + -webkit-transition: 0.3s !important; + -moz-transition: 0.3s !important; + -o-transition: 0.3s !important; + -ms-transition: 0.3s !important; + transition: 0.3s !important; + margin: 2px 8px 0 0; + width: 20px; + height: 20px; + min-width: 20px; + min-height: 20px; + background: var(--anzhiyu-secondbg); +} +#article-container .telescopic-site-card-group .site-card .img { + -webkit-mask-image: -webkit-radial-gradient(center, #fff, #000); + border-radius: 0; + height: 120px; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border: none; + padding: 0 !important; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +#article-container .telescopic-site-card-group .site-card .img img { + border-radius: 0; + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin: 0; + max-width: 100%; +} +@-moz-keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +@-webkit-keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +@-o-keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +@keyframes light_tag { + 0% { + -webkit-transform: skewx(0) translateX(-150px); + -moz-transform: skewx(0) translateX(-150px); + -o-transform: skewx(0) translateX(-150px); + -ms-transform: skewx(0) translateX(-150px); + transform: skewx(0) translateX(-150px); + } + 99% { + -webkit-transform: skewx(-25deg) translateX(50px); + -moz-transform: skewx(-25deg) translateX(50px); + -o-transform: skewx(-25deg) translateX(50px); + -ms-transform: skewx(-25deg) translateX(50px); + transform: skewx(-25deg) translateX(50px); + } +} +#recent-posts > .recent-post-item:not(:first-child) { + margin-top: 20px; + -webkit-animation: slide-in 0.6s 0.4s backwards; + -moz-animation: slide-in 0.6s 0.4s backwards; + -o-animation: slide-in 0.6s 0.4s backwards; + -ms-animation: slide-in 0.6s 0.4s backwards; + animation: slide-in 0.6s 0.4s backwards; + will-change: transform; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item:not(:first-child) { + margin: 20px 20px 0; + } +} +#recent-posts > .recent-post-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + overflow: hidden; + height: 18em; + position: relative; + border-radius: 12px; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; +} +#recent-posts > .recent-post-item .recent-post-info-top-tips { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-top: 20px; +} +#recent-posts > .recent-post-item .unvisited-post { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--anzhiyu-secondtext); + font-size: 0.75rem; + position: relative; +} +#recent-posts > .recent-post-item .unvisited-post:visited { + color: var(--anzhiyu-card-bg); +} +#recent-posts > .recent-post-item .recent-post-info { + margin-top: 0px; + position: relative; +} +#recent-posts > .recent-post-item .recent-post-info .recent-post-info-top { + position: relative; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + padding: 0 32px; + width: 100%; +} +#recent-posts > .recent-post-item .recent-post-info .recent-post-info-top .article-categories-original { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--anzhiyu-secondtext); + font-size: 0.75rem; + position: relative; + margin-right: 8px; +} +#recent-posts > .recent-post-item .recent-post-info .recent-post-info-top .newPost { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--anzhiyu-secondtext); + font-size: 0.75rem; + position: relative; + margin-right: 8px; +} +#recent-posts > .recent-post-item .recent-post-info .article-title { + font-size: 20px; + -webkit-line-clamp: 2; + line-height: 30px; + margin-top: 0; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + margin-bottom: 0; + width: 100%; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .recent-post-info .article-title { + font-size: 19px; + } +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: auto; + } + #recent-posts > .recent-post-item.lastestpost-item { + margin-top: 10px !important; + } +} +#recent-posts > .recent-post-item:hover img.post_bg { + filter: brightness(0.82) !important; + -webkit-transform: scale(1.03) !important; + -moz-transform: scale(1.03) !important; + -o-transform: scale(1.03) !important; + -ms-transform: scale(1.03) !important; + transform: scale(1.03) !important; + -webkit-transition: 0.3s ease-in-out; + -moz-transition: 0.3s ease-in-out; + -o-transition: 0.3s ease-in-out; + -ms-transition: 0.3s ease-in-out; + transition: 0.3s ease-in-out; +} +#recent-posts > .recent-post-item.ads-wrap { + display: block !important; + height: auto !important; +} +#recent-posts > .recent-post-item .post_cover { + overflow: hidden; + width: 70%; + height: 200px; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .post_cover { + width: 100%; + height: 200px; + } +} +#recent-posts > .recent-post-item .post_cover img.post_bg { + border-radius: 0px; + height: 100%; + width: 100%; + -webkit-transition: all 0.6s ease 0s; + -moz-transition: all 0.6s ease 0s; + -o-transition: all 0.6s ease 0s; + -ms-transition: all 0.6s ease 0s; + transition: all 0.6s ease 0s; + object-fit: cover; +} +#recent-posts > .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 1; + -moz-box-ordinal-group: 1; + -o-box-ordinal-group: 1; + -ms-flex-order: 1; + -webkit-order: 1; + order: 1; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 0; + -moz-box-ordinal-group: 0; + -o-box-ordinal-group: 0; + -ms-flex-order: 0; + -webkit-order: 0; + order: 0; + } +} +#recent-posts > .recent-post-item >.recent-post-info { + height: 174px; + width: 100%; + cursor: pointer; + position: relative; + padding: 0; + display: inline-block; + overflow: hidden; +} +#recent-posts > .recent-post-item >.recent-post-info .sticky-warp { + line-height: 23px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-right: 8px; +} +#recent-posts > .recent-post-item >.recent-post-info .sticky-warp .sticky { + color: #ff7242; + font-size: 12px; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info { + width: 100%; + min-height: 140px; + } +} +#recent-posts > .recent-post-item >.recent-post-info.no-cover { + width: 100%; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info.no-cover { + padding: 30px 20px; + } +} +#recent-posts > .recent-post-item >.recent-post-info.no-cover:hover { + color: #425aef; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap { + color: var(--anzhiyu-fontcolor); + font-size: 0.7rem; + position: absolute; + padding: 0 32px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: single; + -moz-box-lines: single; + -o-box-lines: single; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; + left: 0; + -webkit-box-direction: reverse; + -moz-box-direction: reverse; + -o-box-direction: reverse; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + bottom: 30px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta { + margin: 0 8px 0 0; + white-space: nowrap; + overflow: hidden; + display: inline-block; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .post-meta-date { + color: var(--anzhiyu-fontcolor); + font-size: 0.875rem; + white-space: nowrap; +} +@media screen and (max-width: 500px) { + #recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .post-meta-date { + font-size: 13px; + } +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap i { + margin: 0 4px 0 0; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-label { + display: none; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-separator { + margin: 0 6px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-link { + margin: 0 4px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a { + color: var(--anzhiyu-fontcolor); + font-size: 14px; + margin-right: 4px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a span { + pointer-events: none; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a:hover { + color: #425aef; +} +#recent-posts > .recent-post-item >.recent-post-info > .content { + -webkit-line-clamp: 2; +} +#topPostGroup { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + margin-top: 10px; + height: 128px; + -ms-flex-line-pack: justify; + -webkit-align-content: space-between; + align-content: space-between; + width: 100%; +} +#home_top { + margin: 0 auto 0; + padding: 0px 1.5rem 0px; + max-width: 1400px; + width: 100%; + -webkit-animation: slide-in 0.6s 0.1s backwards; + -moz-animation: slide-in 0.6s 0.1s backwards; + -o-animation: slide-in 0.6s 0.1s backwards; + -ms-animation: slide-in 0.6s 0.1s backwards; + animation: slide-in 0.6s 0.1s backwards; + overflow: hidden; +} +@media screen and (max-width: 768px) { + #topPostGroup { + height: 240px; + } + #swiper_container_blog { + padding: 10px; + } + #home_top { + padding: 0px 20px 0px; + } +} +#content-inner #recent-posts > .recent-post-item > .recent-post-info > .content { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + height: 0; +} +@media screen and (max-width: 1200px) { + #recent-posts > .recent-post-item >.recent-post-info > .article-title { + line-height: 30px; + font-weight: bold; + color: var(--anzhiyu-fontcolor); + width: 100%; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 1.2rem; + -webkit-line-clamp: 2; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + } +} +@media screen and (max-width: 768px) { + #content-inner #recent-posts > .recent-post-item > .recent-post-info > .content { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + height: 0; + } +} +@media screen and (min-width: 1201px) { + #recent-posts { + -ms-flex-line-pack: start; + -webkit-align-content: flex-start; + align-content: flex-start; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + } + #recent-posts>.recent-post-item { + margin-top: 1rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + height: auto; + width: 49%; + -webkit-flex-direction: column; + -ms-flex-direction: column; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: auto !important; + } + #recent-posts>.recent-post-item .recent-post-info .content { + display: none; + } + #recent-posts>.recent-post-item .post_cover { + width: 100%; + height: 225px; + -webkit-transition: 1s !important; + -moz-transition: 1s !important; + -o-transition: 1s !important; + -ms-transition: 1s !important; + transition: 1s !important; + } + #recent-posts>.recent-post-item .post_cover img.post_bg { + width: 100%; + height: 100%; + } + #recent-posts>.recent-post-item .left_radius { + border-radius: 8px 8px 0 0; + } + #recent-posts>.recent-post-item .right_radius { + border-radius: 8px 8px 0 0; + } +} +#content-inner #recent-posts > .recent-post-item > .recent-post-info > .content { + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + line-height: 1.4; + color: var(--anzhiyu-secondtext); + margin-top: 0.5rem; + font-size: 14px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + height: 0; +} +#popup-window { + min-width: 300px; + background: var(--anzhiyu-maskbgdeep); + color: var(--anzhiyu-fontcolor); + padding: 8px 16px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + bottom: 20px; + right: 20px; + position: fixed; + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + z-index: 1002; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: saturate(180%) blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + border: var(--style-border); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + pointer-events: none; +} +#popup-window.show-popup-window { + -webkit-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + opacity: 1; + -ms-filter: none; + filter: none; + pointer-events: all; + cursor: pointer; +} +#popup-window.no-url:hover { + background: var(--anzhiyu-maskbgdeep); + color: var(--anzhiyu-fontcolor); + border: var(--style-border); + cursor: pointer; +} +#popup-window.no-url .popup-window-content .popup-link { + display: none; +} +#popup-window:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + border: var(--style-border-hover); +} +#popup-window:hover .popup-window-content .popup-link i { + color: var(--anzhiyu-white); +} +#popup-window.popup-hide { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); +} +#popup-window .popup-window-title { + font-size: 12px; + font-weight: 700; + color: var(--anzhiyu-card-bg); + margin-right: 8px; + background: var(--anzhiyu-fontcolor); + line-height: 1; + padding: 4px; + border-radius: 4px; + width: fit-content; +} +#popup-window .popup-window-divider { + width: 100%; + border-bottom: var(--style-border); + margin-top: 6px; +} +#popup-window .popup-window-content { + font-size: 14px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#popup-window .popup-window-content .popup-link { + margin-left: auto; + font-size: 16px; +} +#popup-window .popup-window-content .popup-link i { + font-size: 16px; +} +body[data-type="post"] #popup-window { + top: 70px; + bottom: auto; +} +body[data-type="post"] #popup-window.show-popup-window { + -webkit-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: toLeftFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + opacity: 1; + -ms-filter: none; + filter: none; +} +body[data-type="post"] #popup-window.popup-hide { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -moz-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -o-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + -ms-animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + animation: toRightFull 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); +} +body[data-type="music"] { + background: #0d0d0d; +} +body[data-type="music"] #body-wrap { + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; +} +body[data-type="music"] #center-console + label i { + background: var(--anzhiyu-white) !important; +} +body[data-type="music"] .layout { + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} +body[data-type="music"] #page { + border: 0; + -webkit-box-shadow: none !important; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type="music"] #page .page-title { + display: none; +} +body[data-type="music"] #page-header #nav { + backdrop-filter: none !important; + background: 0 0 !important; + border-bottom: none !important; +} +body[data-type="music"] #page-header #nav #blog_name a, +body[data-type="music"] #page-header #nav .mask-name-container a, +body[data-type="music"] #page-header #nav #menus a, +body[data-type="music"] #page-header #nav #nav-right .nav-button a, +body[data-type="music"] #page-header #nav #nav-right #toggle-menu a, +body[data-type="music"] #page-header #nav #blog_name .back-home-button, +body[data-type="music"] #page-header #nav .mask-name-container .back-home-button, +body[data-type="music"] #page-header #nav #menus .back-home-button, +body[data-type="music"] #page-header #nav #nav-right .nav-button .back-home-button, +body[data-type="music"] #page-header #nav #nav-right #toggle-menu .back-home-button { + color: var(--anzhiyu-white); +} +body[data-type="music"] #footer, +body[data-type="music"] #nav-music { + display: none; +} +body[data-type="music"] #an_music_bg { + display: block; +} +body[data-type="music"] #web_bg { + display: none; +} +body[data-type="music"] .s-sticker div { + color: var(--anzhiyu-white) !important; +} +[data-theme="dark"] body[data-type="music"] .page #page-header:before { + background-color: transparent; +} +#an_music_bg { + display: none; + filter: blur(63px); + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + position: fixed; + z-index: -999; + background-attachment: local; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + width: 200%; + height: 200%; + top: -50%; + left: -50%; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +body:has(#console.show) #nav-music { + display: none !important; +} +#nav-music { + display: none !important; +} +body:has(#console.show) #nav-music { + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; +} +@media screen and (max-width: 1400px) { + body #anMusic-page #anMusicSwitching, + body #anMusic-page #anMusicRefreshBtn, + body #anMusic-page #anMusicBtnGetSong { + right: 7vw; + } + body #anMusic-page #anMusicSwitching { + bottom: 100px; + } + body #anMusic-page #anMusicRefreshBtn { + bottom: 160px; + } + body #anMusic-page #anMusicBtnGetSong { + bottom: 220px; + } +} +#anMusic-page #anMusicRefreshBtn, +#anMusic-page #anMusicBtnGetSong, +#anMusic-page #anMusicSwitching { + position: fixed; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 50px; + height: 50px; + bottom: 100px; + padding: 5px; + background: var(--anzhiyu-white-op); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + border-radius: 50%; + color: #fff; + text-align: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + cursor: pointer; + z-index: 2; +} +#anMusic-page #anMusicBtnGetSong { + right: 11vw; +} +#anMusic-page #anMusicRefreshBtn { + right: 7vw; +} +#anMusic-page #anMusicSwitching { + right: 15vw; +} +@media screen and (max-width: 768px) { + #anMusic-page div#anMusicBtnGetSong { + right: 80px; + bottom: 150px; + } + #anMusic-page div#anMusicRefreshBtn { + right: 20px; + bottom: 150px; + } + #anMusic-page div#anMusicSwitching { + right: 140px; + bottom: 150px; + } +} +#anMusic-page meting-js .aplayer { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-direction: reverse; + -moz-box-direction: reverse; + -o-box-direction: reverse; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + background: rgba(0,0,0,0); + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} +#anMusic-page meting-js .aplayer .aplayer-body { + width: 40%; + height: calc(100vh - 169px); +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-pic { + float: none; + width: 180px; + height: 180px; + border-radius: 12px; + margin: auto; + left: 0; + right: 0; + -webkit-transition: background-image 0.5s ease-in-out; + -moz-transition: background-image 0.5s ease-in-out; + -o-transition: background-image 0.5s ease-in-out; + -ms-transition: background-image 0.5s ease-in-out; + transition: background-image 0.5s ease-in-out; + background-size: cover; + background-color: transparent !important; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info { + margin: 0 20px 0 20px; + border-bottom: none; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-music { + text-align: center; + height: auto; + margin: 15px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-music .aplayer-author, +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-music .aplayer-title { + font-size: 2rem; + font-weight: 700; + color: #fff; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc { + height: 800%; + margin-top: 10px; + mask-image: linear-gradient(to bottom, #000, #000, #000, #000, #000, #000, #000, #000, #000, #000, rgba(0,0,0,0), rgba(0,0,0,0)); +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc p { + font-size: 20px; + line-height: 20px !important; + height: 20px !important; + margin: 20px 0 !important; + color: #fff; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc p.aplayer-lrc-current { + min-height: 20px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc::after, +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc::before { + display: none; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller { + position: fixed; + max-width: 1500px; + margin: auto; + left: 0; + right: 0; + bottom: 50px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0 160px 0 150px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 6px; + border-radius: 4px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 6px; + border-radius: 4px; + background: var(--anzhiyu-white) !important; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb { + width: 20px; + height: 20px; + margin-top: -7px; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; + background: #fff !important; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + height: 6px; + border-radius: 4px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time { + position: absolute; + width: 100%; + bottom: 21px; + height: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: end; + -moz-box-pack: end; + -o-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-volume-wrap .aplayer-volume-bar-wrap { + bottom: 0; + right: -5px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon { + width: 2rem; + height: 2rem; + margin-left: 15px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path { + fill: var(--anzhiyu-white); + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop { + margin-right: 15px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner { + margin-right: 18px; + margin-top: -8px; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-back { + position: absolute; + left: 0; + display: inline; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-play { + position: absolute; + left: 40px; + display: inline; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-forward { + position: absolute; + left: 80px; + display: inline; +} +#anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-menu { + display: none; +} +#anMusic-page meting-js .aplayer .aplayer-list { + width: 60%; + height: 100%; +} +#anMusic-page meting-js .aplayer ol { + padding-right: 25px; +} +#anMusic-page meting-js .aplayer ol > li { + border-top: 1px solid transparent; + font-size: 14px; +} +#anMusic-page meting-js .aplayer ol > li:hover { + background: rgba(255,255,255,0.2); + border-radius: 6px; +} +#anMusic-page meting-js .aplayer ol > li.aplayer-list-light { + background: rgba(255,255,255,0.2); + border-radius: 6px; + padding: 20px 15px; +} +#anMusic-page meting-js .aplayer ol > li.aplayer-list-light span.aplayer-list-title { + font-weight: bolder; +} +#anMusic-page meting-js .aplayer ol > li.aplayer-list-light .aplayer-list-cur { + display: none; +} +#anMusic-page meting-js .aplayer ol > li span { + color: var(--anzhiyu-white); +} +#anMusic-page meting-js .aplayer ol > li span.aplayer-list-author { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); +} +@media screen and (max-width: 768px) { + body[data-type="music"] #rightside { + display: none; + } + body[data-type="music"] #content-inner, + body[data-type="music"] #page { + z-index: auto; + } + #anMusic-page meting-js .aplayer .aplayer-list { + position: fixed; + z-index: 1002; + width: 100%; + bottom: -88%; + left: 0; + background: var(--sidebar-bg); + height: auto; + border-radius: 15px 15px 0px 0px; + padding: 15px 0px; + } + #anMusic-page meting-js .aplayer .aplayer-list.aplayer-list-hide { + bottom: 0% !important; + } + #anMusic-page meting-js .aplayer .aplayer-list ol { + max-height: 60vh !important; + padding-right: 0px; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 0 10px; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li span { + color: var(--font-color); + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li span.aplayer-list-title { + width: 30%; + max-width: 55%; + width: auto; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li span.aplayer-list-author { + position: absolute; + right: 10px; + width: auto; + max-width: 35%; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li.aplayer-list-light { + background: #33a673; + padding: 5px 20px; + border-radius: 10px; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li.aplayer-list-light span { + color: #fff; + } + #anMusic-page meting-js .aplayer .aplayer-list ol > li.aplayer-list-light span.aplayer-list-author { + right: 15px; + } + #anMusic-page meting-js .aplayer .aplayer-body { + width: 100%; + position: fixed; + margin: auto; + left: 0; + right: 0; + top: 100px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc { + margin-top: 40px; + height: auto; + max-height: 200%; + min-height: 100%; + mask-image: linear-gradient(to bottom, #000, #000, #000, #000, rgba(0,0,0,0), rgba(0,0,0,0)); + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-lrc p.aplayer-lrc-current { + color: #33a673; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller { + width: 100%; + bottom: 100px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-volume-wrap { + left: -66px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap { + bottom: 0px; + right: 7px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0 30px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time { + bottom: -40px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner { + position: absolute; + width: 100%; + margin-right: 0; + margin-top: -33px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner .aplayer-dtime { + position: absolute; + right: 30px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner .aplayer-ptime { + position: absolute; + left: 35px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-back { + margin: auto; + right: 110px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-play { + margin: auto; + right: 0; + left: 0; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-forward { + margin: auto; + left: 110px; + right: 0; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-order { + position: absolute; + left: 22px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-loop { + position: absolute; + right: 25px; + } + #anMusic-page meting-js .aplayer .aplayer-body .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon-menu { + display: inline; + position: absolute; + right: 25px; + top: -90px; + } +} +.reward #con { + width: 350px; + height: 85px; + position: relative; + border-radius: 4px; +} +.reward #TA-con { + width: 157px; + height: 50px; + background-color: #f25d8e; + -webkit-box-shadow: 0 4px 4px rgba(255,112,159,0.3); + box-shadow: 0 4px 4px rgba(255,112,159,0.3); + position: absolute; + top: 50%; + left: 10%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + border-radius: 4px; + cursor: pointer; +} +@media screen and (max-width: 768px) { + .reward #TA-con { + width: 125px; + left: 54px; + } +} +.reward #TA-con:hover { + background-color: #ff6b9a; +} +.reward #text-con { + width: 100px; + height: 100%; + margin: 0 auto; + position: relative; +} +.reward #linght { + width: 0; + height: 0; + position: absolute; + top: 36%; + left: 4px; + border-color: transparent; + border-style: solid; + border-width: 10px; + border-top: 10px solid #fff; + border-radius: 4px; + -webkit-transform: rotate(-55deg); + -moz-transform: rotate(-55deg); + -o-transform: rotate(-55deg); + -ms-transform: rotate(-55deg); + transform: rotate(-55deg); +} +.reward #linght::after { + position: absolute; + top: -13px; + left: -11px; + content: ""; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 10px; + border-top: 10px solid #fff; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + border-radius: 4px; +} +.reward #TA { + float: right; + line-height: 50px; + font-size: 15px; + color: #fff; +} +.reward #tube-con { + width: 157px; + height: 55px; + position: absolute; + right: -5px; + top: 15px; +} +.reward svg { + width: 100%; + height: 100%; +} +.reward #mask { + width: 0px; + height: 100%; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +.reward #mask svg { + width: 157px; + height: 55px; +} +.reward #TA-con:hover + #tube-con > #mask { + width: 157px; +} +.reward #TA-con:hover + #tube-con > #orange-mask { + -webkit-animation: move1 0.5s linear 0.2s infinite; + -moz-animation: move1 0.5s linear 0.2s infinite; + -o-animation: move1 0.5s linear 0.2s infinite; + -ms-animation: move1 0.5s linear 0.2s infinite; + animation: move1 0.5s linear 0.2s infinite; +} +.reward #TA-con:hover + #tube-con > #orange-mask svg { + -webkit-animation: movetwo 0.5s linear 0.2s infinite; + -moz-animation: movetwo 0.5s linear 0.2s infinite; + -o-animation: movetwo 0.5s linear 0.2s infinite; + -ms-animation: movetwo 0.5s linear 0.2s infinite; + animation: movetwo 0.5s linear 0.2s infinite; +} +.reward #orange-mask { + width: 18px; + height: 100%; + overflow: hidden; + position: absolute; + left: -15px; + top: 0px; +} +.reward #orange-mask svg { + position: absolute; + top: 0; + left: 15px; + width: 157px; + height: 55px; +} +.reward #people { + position: absolute; + right: 10px; + top: 4px; + font-size: 12px; + font-family: "雅黑"; + color: #aaa; +} +.reward #people > b { + color: #777; +} +@-moz-keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@-webkit-keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@-o-keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@keyframes move1 { + 0% { + -webkit-transform: translateX(-15px); + -moz-transform: translateX(-15px); + -o-transform: translateX(-15px); + -ms-transform: translateX(-15px); + transform: translateX(-15px); + } + 100% { + -webkit-transform: translateX(140px); + -moz-transform: translateX(140px); + -o-transform: translateX(140px); + -ms-transform: translateX(140px); + transform: translateX(140px); + } +} +@-moz-keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +@-webkit-keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +@-o-keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +@keyframes movetwo { + 0% { + -webkit-transform: translateX(15px); + -moz-transform: translateX(15px); + -o-transform: translateX(15px); + -ms-transform: translateX(15px); + transform: translateX(15px); + } + 100% { + -webkit-transform: translateX(-140px); + -moz-transform: translateX(-140px); + -o-transform: translateX(-140px); + -ms-transform: translateX(-140px); + transform: translateX(-140px); + } +} +#tag #tag-page-tags { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; +} +#tag #tag-page-tags a { + line-height: 1.6; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + color: var(--anzhiyu-fontcolor) !important; + padding: 0.1rem 0.5rem; + margin: 0.25rem; + border-radius: 8px; + border: var(--style-border-always); +} +#tag #tag-page-tags a.selected { + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-theme); + border: var(--style-border-none); +} +#tag #tag-page-tags a.select .tagsPageCount { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-lighttext); +} +#post .tag_share .post-meta__box__tags span.tagsPageCount, +#tag-page-tags .tagsPageCount { + padding: 4px 6px; + background: var(--anzhiyu-secondbg); + border: var(--style-border-always); + min-width: 22.5px; + display: inline-block; + border-radius: 4px; + line-height: 0.6rem; + text-align: center; + font-size: 0.7rem; + color: var(--anzhiyu-fontcolor); + margin-left: 4px; +} +#tag #tag-page-tags a:hover .tagsPageCount, +#post .tag_share .post-meta__box__tags:hover span.tagsPageCount { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-lighttext); +} +#tag #tag-page-tags a { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; + font-size: 0.9em; +} +#tag #tag-page-tags a:hover { + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-theme); + border: var(--style-border-none); +} +span.tags-punctuation, +span.categoryes-punctuation { + margin-right: 4px; +} +span.tags-punctuation .icon-biaoqian, +span.categoryes-punctuation .icon-biaoqian { + font-size: 13px; +} +.tagsPageCount { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; +} +[data-theme="light"] #post .tag_share .post-meta__box__tags span.tagsPageCount { + background-color: transparent; + color: #fff; +} +[data-theme="light"] #post .tag_share .post-meta__box__categoryes span.categoryesPageCount { + background-color: transparent; + color: #fff; +} +#post .tag_share .post-meta__box__categoryes span.categoryesPageCount { + padding: 4px 6px; + background: var(--anzhiyu-secondbg); + border: var(--style-border-always); + min-width: 22.5px; + display: inline-block; + border-radius: 4px; + line-height: 0.6rem; + text-align: center; + font-size: 0.7rem; + color: var(--anzhiyu-fontcolor); + margin-left: 4px; +} +.post-meta__box__categories { + border-radius: 12px; +} +.post-meta__box a { + color: var(--anzhiyu-white); + border: none; +} +[data-theme="dark"] .post-meta__box a { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); +} +[data-theme="dark"] .post-reward .reward-button, +[data-theme="dark"] .reward-link.mode { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); +} +.post-meta__box__tag-list a:nth-child(5n) { + background-color: #4a4a4a; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 1) { + background-color: #ff5e5c; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 2) { + background-color: #ffbb50; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 3) { + background-color: #1ac756; + color: #fff; +} +.post-meta__box__tag-list a:nth-child(5n + 4) { + background-color: #19b5fe; + color: #fff; +} +.post-meta__box__tag-list a:hover { + background-color: var(--anzhiyu-main); + color: #fff; +} +[data-theme="dark"] .post-meta__box__tag-list a:hover { + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n) { + background-color: #4a4a4a; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 1) { + background-color: #1ac756; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 2) { + background-color: #ffbb50; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 3) { + background-color: #19b5fe; + color: #fff; +} +.post-meta__box__category-list a:nth-child(5n + 4) { + background-color: #ff5e5c; + color: #fff; +} +body[data-type="tags"] #page, +body[data-type="categories"] #page { + border-radius: 12px; +} +@media screen and (max-width: 768px) { + body[data-type="tags"] #page #tag, + body[data-type="categories"] #page #tag { + padding: 0px 15px 20px; + } + body[data-type="tags"] #page .page-title, + body[data-type="categories"] #page .page-title { + margin: 8px 0 0px; + } +} +@media screen and (max-width: 768px) { + body[data-type="tags"] #body-wrap .layout, + body[data-type="categories"] #body-wrap .layout { + padding: 0 20px 15px; + } +} +body[data-type="tags"] #tag #tag-page-tags, +body[data-type="categories"] #tag #tag-page-tags { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +body[data-type="tags"] #tag #tag-page-tags a, +body[data-type="categories"] #tag #tag-page-tags a { + font-size: 1.4rem; + margin: 0.3rem 0.65rem; +} +@media screen and (max-width: 768px) { + body[data-type="tags"] #tag #tag-page-tags a, + body[data-type="categories"] #tag #tag-page-tags a { + font-size: 1.8rem; + margin: 0.6rem 0.8rem; + } +} +.tag-cloud-list a { + display: inline-block; + padding: 0 8px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.tag-cloud-list a:hover { + color: #425aef !important; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +@media screen and (max-width: 768px) { + .tag-cloud-list a { + zoom: 0.85; + } +} +.tag-cloud-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .tag-cloud-title { + font-size: 2em; + } +} +h1.page-title + .tag-cloud-list { + text-align: left; +} +@media screen and (min-width: 1201px) and (max-width: 768px) { + #recent-posts>.recent-post-item { + width: 100%; + } + #recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .tags > .article-meta__separator { + display: none; + } +} +#error-wrap { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 100%; + margin-top: 1rem; + position: relative; +} +@media screen and (max-width: 768px) { + #error-wrap { + margin-top: 0; + } +} +#error-wrap .error-content { + -webkit-box-shadow: none !important; + box-shadow: none !important; + border-radius: 12px; + background: var(--anzhiyu-card-bg) !important; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 0px 1rem; + height: 22rem; + max-width: 800px; + border-radius: 5px; + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + border: var(--style-border-always); + position: relative; + width: 100%; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content { + -webkit-box-orient: vertical; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 0px; + height: 25rem; + width: 100%; + } +} +#error-wrap .error-content .error-img { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + height: 90%; + width: 600px; + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; + background-color: #307af6; + background-position: center center; + background-size: cover; + height: 100%; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content .error-img { + -webkit-box-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + width: 100%; + border-radius: 12px; + } +} +#error-wrap .error-content .error-info { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + padding: 0.5rem; + text-align: center; + font-size: 14px; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content .error-info { + -webkit-box-flex: 1.1; + -webkit-box-flex: 1.1; + -moz-box-flex: 1.1; + -o-box-flex: 1.1; + box-flex: 1.1; + -webkit-flex: 1.1 1 0%; + -ms-flex: 1.1 1 0%; + flex: 1.1 1 0%; + width: 100%; + padding-bottom: 2rem; + } +} +#error-wrap .error-content .error-info .error_title { + font-size: 9em; + line-height: 1; +} +@media screen and (max-width: 768px) { + #error-wrap .error-content .error-info .error_title { + font-size: 4rem; + } +} +#error-wrap .error-content .error-info .error_subtitle { + word-break: break-word; + font-size: 1.6em; + -webkit-line-clamp: 2; +} +#error-wrap .error-content .error-info a { + display: inline-block; + margin-top: 0.5rem; + padding: 0.3rem 1.5rem; + background: var(--btn-bg); + color: var(--btn-color); +} +#error-wrap .error-content .error-info a i { + padding-right: 0.3rem; +} +.button--animated { + border-radius: 8px !important; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + position: relative; + z-index: 1; + -webkit-transition: color 1s ease 0s; + -moz-transition: color 1s ease 0s; + -o-transition: color 1s ease 0s; + -ms-transition: color 1s ease 0s; + transition: color 1s ease 0s; +} +#body-wrap .error-box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 1rem; + padding-top: 0px; + position: relative; +} +#body-wrap .error-box .aside-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: single; + -moz-box-lines: single; + -o-box-lines: single; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + margin: 1rem; + max-width: 100%; +} +@media screen and (max-width: 768px) { + #body-wrap .error-box .aside-list { + margin: 0; + } +} +#body-wrap .error-box .aside-list .aside-list-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + max-width: 800px; + margin: 0 auto; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#body-wrap .error-box .aside-list .aside-list-item { + padding: 0.5rem 0; + width: 49%; +} +#body-wrap .error-box .aside-list .aside-list-item .thumbnail { + overflow: hidden; + width: 100%; + height: 200px; + background: var(--anzhiyu-card-bg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 12px; +} +@media screen and (max-width: 768px) { + #body-wrap .error-box .aside-list .aside-list-item .thumbnail { + height: 100px; + } +} +#body-wrap .error-box .aside-list .aside-list-item img { + width: 100%; + object-fit: cover; + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transition: filter 300ms ease-in 0.2s, -webkit-transform 0.6s; + -moz-transition: filter 300ms ease-in 0.2s, -moz-transform 0.6s; + -o-transition: filter 300ms ease-in 0.2s, -o-transform 0.6s; + -ms-transition: filter 300ms ease-in 0.2s, -ms-transform 0.6s; + transition: filter 300ms ease-in 0.2s, transform 0.6s; +} +#body-wrap .error-box .aside-list .aside-list-item:hover img { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + filter: brightness(0.82); +} +#body-wrap .error-box .aside-list .aside-list-item .content .title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + padding-top: 0.5rem; + font-size: 16px; + font-weight: bold; +} +#body-wrap .error-box .aside-list .aside-list-item .content time { + display: none; +} +@media screen and (max-width: 768px) { + .post #aside-content { + background: var(--anzhiyu-background); + border: none; + z-index: 99; + margin-top: -1px; + } +} +#aside-content { + width: 300px; + -webkit-animation: slide-in 0.6s 0.3s backwards; + -moz-animation: slide-in 0.6s 0.3s backwards; + -o-animation: slide-in 0.6s 0.3s backwards; + -ms-animation: slide-in 0.6s 0.3s backwards; + animation: slide-in 0.6s 0.3s backwards; +} +@media screen and (min-width: 1200px) { + #aside-content { + padding-left: 15px; + } +} +@media screen and (max-width: 1200px) { + #aside-content { + width: 100%; + padding: 20px; + } +} +@media screen and (max-width: 768px) { + #aside-content { + padding: 0 20px 20px; + } +} +#aside-content > .card-widget:first-child { + margin-top: 0; +} +@media screen and (max-width: 1200px) { + #aside-content > .card-widget:first-child { + margin-top: 20px; + } +} +@media screen and (max-width: 768px) { + #aside-content > .card-widget:first-child { + margin-top: 0px; + } +} +#aside-content .card-widget { + position: relative; + overflow: hidden; + margin-top: 20px; + padding: 20px 24px; +} +#aside-content .card-widget .author-info__bottom-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#aside-content .card-widget .author-info__bottom-group .author-info__name { + text-align: left; + font-weight: 700; + color: var(--anzhiyu-white); + font-size: 20px; + line-height: 1; + margin-bottom: 5px; + margin-top: 0; +} +#aside-content .card-widget .author-info__bottom-group .author-info__desc { + font-size: 12px; + color: var(--anzhiyu-white); + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + line-height: 1; +} +#aside-content .card-widget .author-info__description { + position: absolute; + top: 50px; + width: 100%; + left: 0; + padding: 1rem 1.2rem; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + color: var(--anzhiyu-white); +} +#aside-content .card-widget .banner-button-group .banner-button { + padding: 20px 12px; + color: var(--anzhiyu-white); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + z-index: 1; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + cursor: pointer; +} +#aside-content .card-widget .banner-button-group .banner-button .anzhiyufont .anzhiyu-icon-arrow-circle-right { + font-size: 1.3rem; + margin-right: 10px; +} +#aside-content .card-widget .author-info-avatar { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#aside-content .card-widget .author-info-avatar img { + filter: blur(0) brightness(1); +} +#aside-content .card-widget .author-info-avatar .author-status { + position: absolute; + bottom: 2px; + right: 2px; + width: 33px; + height: 33px; + border-radius: 2em; + background-color: var(--anzhiyu-white); + overflow: hidden; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: 0.3s 0.2s; + -moz-transition: 0.3s 0.2s; + -o-transition: 0.3s 0.2s; + -ms-transition: 0.3s 0.2s; + transition: 0.3s 0.2s; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#aside-content .card-widget .author-info-avatar .author-status img { + width: 26px; + height: 26px; + border-radius: 0px; + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +#aside-content .card-widget .card-info-social-icons { + margin: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + cursor: pointer; +} +#aside-content .card-widget .card-info-social-icons .social-icon { + margin: 0 0 0 10px; + color: var(--anzhiyu-fontcolor); + font-size: 1.4em; + cursor: pointer; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#aside-content .card-widget .card-info-social-icons .social-icon i, +#aside-content .card-widget .card-info-social-icons .social-icon svg { + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + font-size: 1rem; + width: 40px; + height: 40px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + padding: 8px; + border-radius: 32px; +} +#aside-content .card-widget .card-info-social-icons .social-icon i:hover, +#aside-content .card-widget .card-info-social-icons .social-icon svg:hover { + background: var(--anzhiyu-secondbg); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + color: var(--anzhiyu-main); + -webkit-box-shadow: none; + box-shadow: none; +} +#aside-content .card-widget #card-info-btn { + display: block; + margin-top: 14px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + line-height: 2.4; +} +#aside-content .card-widget #card-info-btn:hover { + background-color: var(--btn-hover-color); +} +#aside-content .card-widget #card-info-btn span { + padding-left: 10px; +} +#aside-content .item-headline { + padding-bottom: 0; + margin-left: 8px; + font-size: 1em; + font-weight: bold; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#aside-content .item-headline span { + margin-left: 6px; +} +@media screen and (min-width: 1200px) { + #aside-content .sticky_layout { + position: sticky; + position: -webkit-sticky; + top: 20px; + -webkit-transition: top 0.3s; + -moz-transition: top 0.3s; + -o-transition: top 0.3s; + -ms-transition: top 0.3s; + transition: top 0.3s; + } +} +#aside-content .card-tag-cloud a { + display: inline-block; + padding: 0 4px; +} +#aside-content .card-tag-cloud a:hover { + color: #425aef !important; +} +#aside-content .aside-list > span { + display: block; + margin-bottom: 10px; + text-align: center; +} +#aside-content .aside-list > .aside-list-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 6px 0; +} +#aside-content .aside-list > .aside-list-item:first-child { + padding-top: 0; +} +#aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed #f5f5f5; +} +#aside-content .aside-list > .aside-list-item:last-child { + padding-bottom: 0; +} +#aside-content .aside-list > .aside-list-item .thumbnail { + overflow: hidden; + width: 4.2em; + height: 4.2em; +} +#aside-content .aside-list > .aside-list-item .content { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-left: 10px; + word-break: break-all; + width: 4.2em; + height: 4.2em; +} +#aside-content .aside-list > .aside-list-item .content > .name { + -webkit-line-clamp: 1; +} +#aside-content .aside-list > .aside-list-item .content > time, +#aside-content .aside-list > .aside-list-item .content > .name { + display: block; + color: var(--anzhiyu-fontcolor); + font-size: 85%; +} +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment { + color: var(--font-color); + font-size: 95%; + line-height: 1.5; + -webkit-line-clamp: 2; +} +#aside-content .aside-list > .aside-list-item .content > .title:hover, +#aside-content .aside-list > .aside-list-item .content > .comment:hover { + color: #425aef; +} +#aside-content .aside-list > .aside-list-item.no-cover { + min-height: 4.4em; +} +#aside-content .card-archives ul.card-archive-list, +#aside-content .card-categories ul.card-category-list { + margin: 0; + padding: 0; + list-style: none; +} +#aside-content .card-archives .item-headline { + display: none; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 3px 10px; + color: var(--font-color); + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + -ms-transition: all 0.2s; + transition: all 0.2s; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover { + background-color: var(--text-bg-hover); +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +#aside-content .card-categories .card-category-list.child { + padding: 0 0 0 16px; +} +#aside-content .card-categories .card-category-list > .parent > a.expand i { + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +#aside-content .card-categories .card-category-list > .parent > a.expand + .child { + display: block; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-name { + width: 70% !important; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-count { + width: calc(100% - 70% - 20px); + text-align: right; +} +#aside-content .card-categories .card-category-list > .parent > a i { + float: right; + margin-right: -0.5em; + padding: 0.5em; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +#aside-content .card-webinfo .item-headline { + display: none; +} +#aside-content .card-webinfo .webinfo .webinfo-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 2px 10px 0; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#aside-content .card-webinfo .webinfo .webinfo-item .webinfo-item-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#aside-content .card-webinfo .webinfo .webinfo-item .webinfo-item-title i { + line-height: 2; + margin-right: 6px; + width: 16px; + text-align: center; +} +#aside-content .card-webinfo .webinfo .webinfo-item div:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-right: 20px; +} +@media screen and (min-width: 901px) { + #aside-content #card-toc { + right: 0 !important; + max-height: calc(100vh - 100px); + } +} +@media screen and (max-width: 1200px) { + #aside-content #card-toc { + position: fixed; + right: 55px; + bottom: 30px; + z-index: 100; + max-width: 380px; + max-height: calc(100% - 60px); + width: calc(100% - 80px); + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: right bottom; + -moz-transform-origin: right bottom; + -o-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + } + #aside-content #card-toc.open { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +#aside-content #card-toc .toc-percentage { + display: none; + float: right; + margin-top: -9px; + color: #a9a9a9; + font-style: italic; + font-size: 140%; +} +#aside-content #card-toc .toc-content { + overflow-y: scroll; + overflow-y: overlay; + margin: 0 -24px; + max-height: calc(100vh - 120px); + width: calc(100% + 48px); +} +@media screen and (max-width: 1200px) { + #aside-content #card-toc .toc-content { + max-height: calc(100vh - 140px); + } +} +#aside-content #card-toc .toc-content > * { + margin: 0 20px !important; +} +#aside-content #card-toc .toc-content > * > .toc-item > .toc-child { + margin-left: 10px; + padding-left: 10px; +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: none; +} +@media screen and (max-width: 1200px) { + #aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: block !important; + } +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-item.active .toc-child { + display: block; +} +#aside-content #card-toc .toc-content ol, +#aside-content #card-toc .toc-content li { + list-style: none; +} +#aside-content #card-toc .toc-content > ol { + padding: 0 !important; +} +#aside-content #card-toc .toc-content ol { + margin: 0; + padding-left: 18px; +} +#aside-content #card-toc .toc-content .toc-link { + display: block; + margin: 4px 0; + padding: 1px 6px; + color: var(--toc-link-color); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#aside-content #card-toc .toc-content .toc-link:hover { + color: var(--anzhiyu-lighttext); +} +#aside-content #card-toc .toc-content .toc-link.active { + background: #425aef; + color: #fff; +} +#aside-content :only-child > .card-widget { + margin-top: 0; +} +#aside-content .card-more-btn { + float: right; + color: inherit; +} +#aside-content .card-more-btn:hover { + -webkit-animation: more-btn-move 1s infinite; + -moz-animation: more-btn-move 1s infinite; + -o-animation: more-btn-move 1s infinite; + -ms-animation: more-btn-move 1s infinite; + animation: more-btn-move 1s infinite; +} +#aside-content .card-announcement .item-headline i { + color: #f00; +} +.avatar-img { + width: 118px; + height: 118px; + right: 0; + top: 0; + border-radius: 500px; + object-fit: cover; + position: absolute; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border: var(--style-border-avatar); +} +.avatar-img img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.3s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.3s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.3s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.3s; + transition: filter 375ms ease-in 0.2s, transform 0.3s; + object-fit: cover; +} +.site-data { + display: table; + width: 100%; + table-layout: fixed; +} +.site-data > a { + display: table-cell; +} +.site-data > a div { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.site-data > a:hover div { + color: #425aef !important; +} +.site-data > a .headline { + color: var(--font-color); +} +.site-data > a .length-num { + margin-top: -0.32em; + color: var(--text-highlight-color); + font-size: 1.2em; +} +@media screen and (min-width: 1200px) { + html.hide-aside .layout { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + html.hide-aside .layout > .aside-content { + display: none; + } + html.hide-aside .layout > div:first-child { + width: 80%; + } +} +@media screen and (max-width: 1200px) { + .aside-content { + max-width: none !important; + display: none; + } +} +@media screen and (max-width: 768px) { + .aside-content { + display: block; + } +} +.page .sticky_layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +#aside-content >.card-widget.card-info { + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-black); + box-shadow: var(--anzhiyu-shadow-black); + position: relative; + padding: 0; +} +@media screen and (max-width: 768px) { + #aside-content >.card-widget.card-info { + display: none; + } +} +#aside-content >.card-widget.card-info > .card-content { + padding: 1rem 1.2rem; + min-height: 320px; + position: relative; +} +#aside-content >.card-widget.card-info::before { + background: -webkit-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: -moz-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: -o-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: -ms-linear-gradient(115deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background: linear-gradient(-25deg, var(--anzhiyu-main), var(--anzhiyu-main-op-deep), var(--anzhiyu-main), var(--anzhiyu-main-op-deep)); + background-size: 400%; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + content: ''; + -webkit-animation: gradient 15s ease infinite; + -moz-animation: gradient 15s ease infinite; + -o-animation: gradient 15s ease infinite; + -ms-animation: gradient 15s ease infinite; + animation: gradient 15s ease infinite; +} +#aside-content .card-info:hover .author-info-avatar { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +#aside-content .card-info:hover .author-info__description { + opacity: 1; + -ms-filter: none; + filter: none; +} +#aside-content .card-info:hover .author-status { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +#aside-content .card-info .author-info-avatar { + margin: 45px auto; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 118px; + height: 118px; + -webkit-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -moz-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -o-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -ms-transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + transition: cubic-bezier(0.69, 0.39, 0, 1.21) 0.3s; + -webkit-transform-origin: bottom; + -moz-transform-origin: bottom; + -o-transform-origin: bottom; + -ms-transform-origin: bottom; + transform-origin: bottom; + position: relative; +} +@media screen and (max-width: 768px) { + #aside-content .card-info .author-info-avatar { + display: none; + } +} +#aside-content .card-info #author-info__sayhi { + text-align: left; + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op); + font-size: 12px; + margin: auto; + padding: 2px 8px; + border-radius: 12px; + width: fit-content; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#aside-content .card-info #author-info__sayhi:hover { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +#aside-content .card-info .banner-button-group .banner-button { + border-radius: 35px; + background: var(--anzhiyu-white-op); +} +#aside-content .card-info .banner-button-group .banner-button:hover { + background: var(--anzhiyu-white); + color: var(--anzhiyu-black); +} +[data-theme="dark"] #aside-content > .card-info { + background: var(--anzhiyu-card-bg); +} +@media screen and (max-width: 992px) { + #aside-content > .card-info { + background-size: 100% 70%; + } +} +@-moz-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-webkit-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-o-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-moz-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-webkit-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-o-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +.banners-title { + top: 2.9rem; + left: 3rem; + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.banners-title-big { + font-size: 36px; + line-height: 1; + font-weight: bold; + margin-bottom: 8px; +} +.banners-title-small { + font-size: 12px; + line-height: 1; + color: var(--anzhiyu-secondtext); + margin-top: 8px; + margin-bottom: 0.5rem; +} +.banner-button { + padding: 8px 12px; + background: var(--anzhiyu-fontcolor); + border-radius: 12px; + color: var(--anzhiyu-card-bg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + z-index: 1; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + cursor: pointer; + -webkit-box-shadow: var(--anzhiyu-shadow-black); + box-shadow: var(--anzhiyu-shadow-black); +} +.banner-button.secondary { + background: var(--anzhiyu-secondbg); + border: var(--style-border-always); + color: var(--anzhiyu-lighttext); + margin-right: 1rem; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); +} +#article-container > header { + height: 0; + text-indent: -9999px; +} +#article-container > header time, +#article-container > header span { + height: 0; + display: block; +} +#article-container > header h1 { + z-index: -1; + pointer-events: none; +} +#article-container > header a { + background: none !important; + border-bottom: none !important; +} +#post-comment .comment-head { + margin-bottom: 20px; + font-size: 0.8em !important; + margin-bottom: 0.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#post-comment .comment-head .comment-headline { + display: inline-block; + vertical-align: middle; + font-weight: 700; + font-size: 1.43em; +} +#post-comment .comment-head .comment-randomInfo { + margin-left: auto; + font-size: 13px; +} +#post-comment .comment-head .comment-switch { + display: inline-block; + float: right; + margin: 2px auto 0; + padding: 4px 16px; + width: max-content; + border-radius: 8px; + background: #f6f8fa; +} +#post-comment .comment-head .comment-switch .first-comment { + color: #425aef; +} +#post-comment .comment-head .comment-switch .second-comment { + color: #ff7242; +} +#post-comment .comment-head .comment-switch #switch-btn { + position: relative; + display: inline-block; + margin: -4px 8px 0; + width: 42px; + height: 22px; + border-radius: 34px; + background-color: #425aef; + vertical-align: middle; + cursor: pointer; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-head .comment-switch #switch-btn:before { + position: absolute; + bottom: 4px; + left: 4px; + width: 14px; + height: 14px; + border-radius: 50%; + background-color: #fff; + content: ''; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-wrap > div { + -webkit-animation: tabshow 0.5s; + -moz-animation: tabshow 0.5s; + -o-animation: tabshow 0.5s; + -ms-animation: tabshow 0.5s; + animation: tabshow 0.5s; +} +#post-comment .comment-wrap > div:nth-child(2) { + display: none; +} +#post-comment.move #switch-btn { + background-color: #ff7242; +} +#post-comment.move #switch-btn:before { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -o-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); +} +#post-comment.move .comment-wrap > div:first-child { + display: none; +} +#post-comment.move .comment-wrap > div:last-child { + display: block; +} +#footer { + position: relative; + background: -webkit-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: -moz-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: -o-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: -ms-linear-gradient(270deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background: linear-gradient(180deg, var(--anzhiyu-card-bg-none) 0%, var(--anzhiyu-card-bg) 25%); + background-attachment: scroll; + background-position: bottom; + background-size: cover; +} +@media screen and (max-width: 768px) { + #footer { + z-index: 3; + margin-top: -1px; + } +} +#footer-bar { + padding: 1rem; + color: var(--anzhiyu-fontcolor); + margin-top: 1rem; + background: var(--anzhiyu-secondbg); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + overflow: hidden; + z-index: 1002; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#footer-bar a:hover { + color: var(--anzhiyu-lighttext); +} +#footer-bar .footer-bar-link { + margin-top: 8px; + margin-bottom: 8px; + margin-right: 1rem; + color: var(--anzhiyu-fontcolor); + font-size: 1rem; + font-weight: bold; + white-space: nowrap; +} +#footer-bar .footer-bar-link.cc i { + margin-right: 0.7rem; + font-size: 18px; +} +#footer-bar .footer-bar-links { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + max-width: 1400px; + width: 100%; + margin: 0 auto; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + line-height: 1; +} +#footer-bar .footer-bar-links .footer-bar-left { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + min-height: 32px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#footer-bar .footer-bar-links .footer-bar-right { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#footer-wrap { + position: relative; + padding: 40px 20px 0; + color: var(--light-grey); + text-align: center; +} +@media screen and (max-width: 768px) { + #footer-wrap { + padding: 0; + } +} +#footer-wrap #footer_deal { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +@media screen and (max-width: 768px) { + #footer-wrap #footer_deal { + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } +} +#footer-wrap #footer_deal .deal_link { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 1rem 27px; + color: var(--anzhiyu-card-bg); + border-radius: 3rem; + width: 32px; + height: 32px; + background: var(--anzhiyu-fontcolor); + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#footer-wrap #footer_deal .deal_link:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); +} +#footer-wrap #footer_deal .footer_mini_logo { + width: 50px; + height: 50px; + object-fit: cover; + border-radius: 50%; + margin: 0 1rem; + cursor: pointer; + -webkit-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -moz-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -o-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -ms-transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + transition: cubic-bezier(0, 0, 0, 1.29) 0.5s; + -webkit-user-select: none; +} +@media screen and (max-width: 768px) { + #footer-wrap #footer_deal .footer_mini_logo { + display: none; + } +} +#footer-wrap #anzhiyu-footer { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + width: 100%; + max-width: 1200px; + margin: 1rem auto; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0 2rem; +} +#footer-wrap #anzhiyu-footer .footer-group { + min-width: 120px; +} +#footer-wrap #anzhiyu-footer .footer-group .footer-title-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#footer-wrap #anzhiyu-footer .footer-group .footer-title-group a { + margin-left: 8px; + line-height: 32px; +} +#footer-wrap #anzhiyu-footer .footer-group .footer-title-group i { + line-height: 1; + color: var(--anzhiyu-secondtext); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 16px; + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); +} +#footer-wrap #anzhiyu-footer .footer-title { + color: var(--anzhiyu-secondtext); + font-size: 1rem; + text-align: left; + font-weight: 600; + margin: 1rem 0; +} +#footer-wrap #anzhiyu-footer .footer-links { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +#footer-wrap #anzhiyu-footer .footer-item { + font-size: 1rem; + line-height: 1rem; + margin: 8px 0; + color: var(--anzhiyu-fontcolor); + margin-right: auto; + overflow: hidden; + white-space: nowrap; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + max-width: 120px; + cursor: pointer; + padding: 2px 0; + text-decoration: none; +} +#footer-wrap #anzhiyu-footer .footer-item:hover { + color: var(--anzhiyu-theme); +} +#footer-wrap a { + color: var(--light-grey); +} +#footer-wrap i { + font-size: 1rem; + line-height: 1rem; + height: 1rem; +} +#footer-wrap .footer-separator { + margin: 0 4px; +} +#footer-wrap .icp-icon { + padding: 0 4px; + max-height: 1.4em; + width: auto; + vertical-align: text-bottom; +} +@media screen and (max-width: 768px) { + [data-theme=light] .post #footer { + background: -webkit-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: -moz-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: -o-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: -ms-linear-gradient(270deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + background: linear-gradient(180deg, var(--anzhiyu-background) 0%, var(--anzhiyu-card-bg) 25%); + } +} +#page-header { + position: relative; + width: 100%; + -webkit-transition: all 0.5s ease 0s; + -moz-transition: all 0.5s ease 0s; + -o-transition: all 0.5s ease 0s; + -ms-transition: all 0.5s ease 0s; + transition: all 0.5s ease 0s; +} +#page-header #nav { + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.full_page { + height: 100vh; + background-attachment: fixed; + border-radius: 0; +} +@media screen and (max-width: 768px) { + #page-header #center-console + label i { + background: var(--font-color); + } +} +#page-header #site-info { + position: absolute; + top: 43%; + padding: 0 10px; + width: 100%; +} +#page-header #site-title, +#page-header #site-subtitle, +#page-header #scroll-down .scroll-down-effects { + text-align: center; + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + line-height: 1.5; +} +#page-header #site-title { + margin: 0; + color: var(--white); + font-size: 1.85em; +} +@media screen and (min-width: 768px) { + #page-header #site-title { + font-size: 2.85em; + } +} +#page-header #site-subtitle { + color: var(--light-grey); + font-size: 1.15em; +} +@media screen and (min-width: 768px) { + #page-header #site-subtitle { + font-size: 1.72em; + } +} +#page-header #site_social_icons { + display: none; + margin: 0 auto; + width: 300px; + text-align: center; +} +@media screen and (max-width: 768px) { + #page-header #site_social_icons { + display: block; + } +} +#page-header #site_social_icons .social-icon { + margin: 0 10px; + color: var(--light-grey); + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + font-size: 1.43em; +} +#page-header #scroll-down { + position: absolute; + bottom: 0; + width: 100%; + cursor: pointer; + z-index: 11; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#page-header #scroll-down .scroll-down-effects { + position: relative; + width: 100%; + color: var(--light-grey); + font-size: 30px; +} +#page-header.not-home-page { + height: 400px; +} +@media screen and (max-width: 768px) { + #page-header.not-home-page { + height: 280px; + } +} +#page-header #page-site-info { + position: absolute; + top: 200px; + padding: 0 10px; + width: 100%; +} +@media screen and (max-width: 768px) { + #page-header #page-site-info { + top: 140px; + } +} +#page-header.post-bg { + height: 31.25rem; + -webkit-transition: 0.6s; + -moz-transition: 0.6s; + -o-transition: 0.6s; + -ms-transition: 0.6s; + transition: 0.6s; + overflow: hidden; + background-color: transparent; +} +#page-header.post-bg #nav { + -webkit-transition: all 0.5s, border 0.3s; + -moz-transition: all 0.5s, border 0.3s; + -o-transition: all 0.5s, border 0.3s; + -ms-transition: all 0.5s, border 0.3s; + transition: all 0.5s, border 0.3s; +} +#page-header.post-bg .post-meta:has(.bldbanner), +#page-header.post-bg .post-meta:has(.bili-banner), +#page-header.post-bg .post-meta:has(.blqbanner) { + pointer-events: all; +} +#page-header.post-bg .bili-banner { + margin-top: 0 !important; +} +#page-header.post-bg #post-info:has(.bldbanner), +#page-header.post-bg #post-info:has(.bili-banner), +#page-header.post-bg #post-info:has(.blqbanner) { + pointer-events: none; +} +#page-header.post-bg:has(.bldbanner), +#page-header.post-bg:has(.blqbanner) { + height: 15rem; +} +#page-header.post-bg:has(.bldbanner) img, +#page-header.post-bg:has(.blqbanner) img { + border-radius: 0px; +} +#page-header.post-bg:has(.bili-banner) { + height: 11rem; +} +#page-header.post-bg:has(.bili-banner) img { + border-radius: 0px; +} +#page-header.post-bg #post-top-cover { + width: 70%; + height: 100%; + position: relative; + margin: 0 -20% 0 auto; + overflow: hidden; + margin-bottom: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + will-change: transform; + filter: blur(10px) brightness(60%); + -webkit-animation: none; + -moz-animation: none; + -o-animation: none; + -ms-animation: none; + animation: none; + -webkit-transition: filter 0s; + -moz-transition: filter 0s; + -o-transition: filter 0s; + -ms-transition: filter 0s; + transition: filter 0s; + margin: auto; + width: auto; +} +#page-header.post-bg #post-top-cover::after { + display: none; +} +#page-header.post-bg #post-top-cover img { + border-radius: 0; +} +@media screen and (max-width: 768px) { + #page-header.post-bg #post-top-cover { + margin: 0 0 0 auto; + -webkit-transform: rotate(0deg) translateY(0) scale(1); + -moz-transform: rotate(0deg) translateY(0) scale(1); + -o-transform: rotate(0deg) translateY(0) scale(1); + -ms-transform: rotate(0deg) translateY(0) scale(1); + transform: rotate(0deg) translateY(0) scale(1); + filter: blur(0px); + width: 100%; + position: absolute; + height: 100vh; + z-index: 1; + } +} +#page-header.post-bg #post-top-cover::after { + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + -webkit-box-shadow: 110px -130px 300px 60px var(--anzhiyu-bar-background) inset; + box-shadow: 110px -130px 300px 60px var(--anzhiyu-bar-background) inset; +} +@media screen and (max-width: 768px) { + #page-header.post-bg #post-top-cover::after { + -webkit-box-shadow: 0 0 205px 59px var(--anzhiyu-main) inset; + box-shadow: 0 0 205px 59px var(--anzhiyu-main) inset; + } +} +#page-header.post-bg #post-top-cover #post-top-bg { + width: 100%; + height: 100%; + object-fit: cover; + min-width: 50vw; + min-height: 20rem; +} +@media screen and (min-width: 768px) { + #page-header.post-bg #post-top-cover #post-top-bg { + -webkit-animation: slide-in 0.6s 0.3s backwards; + -moz-animation: slide-in 0.6s 0.3s backwards; + -o-animation: slide-in 0.6s 0.3s backwards; + -ms-animation: slide-in 0.6s 0.3s backwards; + animation: slide-in 0.6s 0.3s backwards; + } +} +@media screen and (max-width: 768px) { + #page-header.post-bg #post-top-cover #post-top-bg { + min-height: 15rem !important; + height: 100% !important; + opacity: 1 !important; + -ms-filter: none !important; + filter: none !important; + } +} +#page-header.post-bg #nav { + backdrop-filter: none; + background: transparent; + border-bottom: none; +} +#page-header.post-bg.nav-fixed #nav { + background: var(--anzhiyu-card-bg); + outline: 1px solid var(--anzhiyu-card-border); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +@media screen and (max-width: 768px) { + #page-header.post-bg.nav-fixed #nav { + border-bottom: none; + } +} +@media screen and (max-width: 768px) { + #page-header.post-bg { + margin-bottom: -12px; + -webkit-transition: 0s !important; + -moz-transition: 0s !important; + -o-transition: 0s !important; + -ms-transition: 0s !important; + transition: 0s !important; + min-height: 450px; + } + #page-header.post-bg.nav-fixed #nav { + background: var(--anzhiyu-card-bg); + outline: 1px solid var(--anzhiyu-card-border); + } +} +#page-header #post-info { + position: absolute; + top: 0; + left: calc((100% - 1400px + 3rem) / 2); + width: calc(100% - (100% - 1400px + 3rem)); + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + z-index: 3; +} +@media screen and (min-width: 768px) { + #page-header #post-info { + --anzhiyu-header-translateY: 0; + -webkit-animation: post-info-slide-in 0.6s 0.3s backwards; + -moz-animation: post-info-slide-in 0.6s 0.3s backwards; + -o-animation: post-info-slide-in 0.6s 0.3s backwards; + -ms-animation: post-info-slide-in 0.6s 0.3s backwards; + animation: post-info-slide-in 0.6s 0.3s backwards; + -webkit-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -moz-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -o-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -ms-transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + transform: scale(var(--anzhiyu-header-info-scale)) translateY(var(--anzhiyu-header-translateY)); + -webkit-transform-origin: left top; + -moz-transform-origin: left top; + -o-transform-origin: left top; + -ms-transform-origin: left top; + transform-origin: left top; + will-change: transform; + } +} +@media screen and (max-width: 1400px) { + #page-header #post-info { + padding: 0 3.5rem; + width: 100%; + left: 0; + } +} +@media screen and (max-width: 768px) { + #page-header #post-info { + padding: 11rem 6% 0; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } +} +#page-header.not-top-img { + margin-bottom: 10px; + height: 60px; + background: 0; +} +#page-header.not-top-img #nav #menus .menus_item:hover > a { + background: var(--anzhiyu-main); +} +#page-header.not-top-img #travellings_button::after { + background: var(--anzhiyu-main) !important; +} +#page-header.not-top-img #nav #blog_name .back-home-button:hover, +#page-header.not-top-img #nav #blog_name #site-name:hover, +#page-header.not-top-img #nav #nav-right .nav-button a:hover, +#page-header.not-top-img #nav #nav-right #toggle-menu:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#page-header.not-top-img .post-meta-categories { + background: rgba(0,0,0,0.2); +} +#page-header.not-top-img #nav #blog_name a, +#page-header.not-top-img #nav .mask-name-container a, +#page-header.not-top-img #nav #menus a, +#page-header.not-top-img #nav #nav-right .nav-button a, +#page-header.not-top-img #nav #nav-right #toggle-menu a { + color: var(--font-color); + text-shadow: none; +} +#page-header.not-top-img #nav #center-console + label i { + background: var(--font-color); +} +#page-header.nav-fixed #nav { + position: fixed; + z-index: 91; + background: var(--anzhiyu-card-bg); + outline: 1px solid var(--anzhiyu-card-border); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + top: 0; +} +#page-header.nav-fixed #nav #toggle-menu { + color: var(--font-color); + text-shadow: none; + -webkit-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -moz-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -o-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -ms-transition: background 0.3s ease-in-out, color 0s ease-in-out; + transition: background 0.3s ease-in-out, color 0s ease-in-out; +} +#page-header.nav-fixed #nav #blog_name a, +#page-header.nav-fixed #nav .mask-name-container a, +#page-header.nav-fixed #nav #menus a, +#page-header.nav-fixed #nav #nav-right .nav-button a, +#page-header.nav-fixed #nav #nav-right #toggle-menu a { + color: var(--font-color); + text-shadow: none; + -webkit-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -moz-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -o-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -ms-transition: background 0.3s ease-in-out, color 0s ease-in-out; + transition: background 0.3s ease-in-out, color 0s ease-in-out; +} +#page-header.nav-fixed #name-container { + z-index: 101; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + top: 10px; +} +#page-header.nav-fixed #name-container #page-name { + display: inline; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + line-height: 2; +} +@media screen and (min-width: 768px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 15.5rem; + } +} +@media screen and (min-width: 900px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 25.5rem; + } +} +@media screen and (min-width: 1200px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 35.5rem; + } +} +@media screen and (min-width: 2000px) { + #page-header.nav-fixed #name-container #page-name { + max-width: 45.5rem; + } +} +#page-header.nav-fixed #nav #menus { + z-index: 100; +} +#page-header.nav-fixed #nav #menus div.menus_items { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + height: 40px; + margin: auto 0; + -webkit-transform: translateY(-60px); + -moz-transform: translateY(-60px); + -o-transform: translateY(-60px); + -ms-transform: translateY(-60px); + transform: translateY(-60px); + will-change: transform; +} +#page-header.nav-fixed.nav-visible #page-name { + z-index: 100; + top: 60px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.nav-fixed.nav-visible #nav #menus div.menus_items { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); + will-change: transform; +} +#page h1.page-title { + margin: 8px 0 20px; +} +#post > #post-info { + margin-bottom: 30px; +} +#post > #post-info .post-title { + border-bottom: 1px solid var(--light-grey); + color: var(--text-highlight-color); +} +#post > #post-info .post-title .post-edit-link { + float: right; +} +#post > #post-info #post-meta, +#post > #post-info #post-meta a { + color: #78818a; +} +@media screen and (max-width: 768px) { + #post-info:after { + display: none; + -webkit-transition: 0; + -moz-transition: 0; + -o-transition: 0; + -ms-transition: 0; + transition: 0; + } +} +#post-info .post-title { + color: var(--white); + line-height: 1.5; + font-weight: 700; + font-size: 3.3rem; + text-align: left; + margin: 1rem 0 1rem 0; + -webkit-line-clamp: 2; + padding: 0; + overflow: hidden; +} +@media screen and (max-width: 768px) { + #post-info .post-title { + font-size: 1.5rem; + -webkit-line-clamp: 3; + margin: 0.2rem auto !important; + text-align: center; + z-index: 4; + } +} +#post-info .post-title .post-edit-link { + padding-left: 10px; +} +#post-info #post-meta { + color: var(--light-grey); + font-size: 95%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 50rem; + max-width: 100%; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +@media screen and (min-width: 768px) { + #post-info #post-meta > .meta-secondline > span:first-child { + display: none; + } +} +@media screen and (max-width: 768px) { + #post-info #post-meta { + font-size: 90%; + z-index: 4; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } + #post-info #post-meta > .meta-firstline, + #post-info #post-meta > .meta-secondline { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + font-size: 90%; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } +} +#post-info #post-meta .post-meta-separator { + margin: 0 8px; +} +#post-info #post-meta .post-meta-icon { + margin-right: 4px; +} +#post-info #post-meta .post-meta-label { + margin-right: 4px; +} +#post-info #post-meta .post-meta-categories a:not([data-fancybox="gallery"]) { + font-weight: 500; + text-decoration: none; + padding: 0 0.2em; +} +#post-info #post-meta .post-meta-categories a:not([data-fancybox="gallery"]):hover { + color: var(--anzhiyu-white); + background-color: var(--anzhiyu-main); + border-radius: 4px; +} +#post-info #post-meta a { + color: var(--light-grey); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +#post-info #post-meta a:hover { + color: #425aef; + text-decoration: underline; +} +#nav { + position: fixed; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + top: 0; + z-index: 90; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 calc((100% - 1400px + 3rem) / 2); + width: 100%; + height: 60px; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + outline: 1px solid var(--anzhiyu-none); +} +#nav i { + font-size: 1.2rem; + font-weight: bold; +} +@media screen and (max-width: 768px) { + #nav { + padding: 0 16px; + } +} +#nav #toggle-menu { + display: none; + padding: 2px 0 0 6px; + vertical-align: top; + border-radius: 50px; +} +#nav #toggle-menu:hover { + color: var(--white) !important; +} +#nav #blog_name a, +#nav .mask-name-container a, +#nav #menus a, +#nav #nav-right .nav-button a, +#nav #nav-right #toggle-menu a { + color: var(--light-grey); +} +#nav #blog_name a:hover, +#nav .mask-name-container a:hover, +#nav #menus a:hover, +#nav #nav-right .nav-button a:hover, +#nav #nav-right #toggle-menu a:hover { + color: var(--white); +} +#nav #site-name { + font-weight: bold; + cursor: pointer; + -webkit-transition: 0.3s !important; + -moz-transition: 0.3s !important; + -o-transition: 0.3s !important; + -ms-transition: 0.3s !important; + transition: 0.3s !important; +} +#nav .menus_items { + display: inline; + font-size: 1.3em; +} +#nav .menus_items .menus_item { + padding: 0 0.4rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: auto; + position: relative; + border-radius: 30px; +} +#nav .menus_items .menus_item:first-child .menus_item_child::after { + position: absolute; + top: -60px; + left: 0; + width: 50%; + height: 60px; + content: ""; +} +#nav .menus_items .menus_item:last-child .menus_item_child::after { + position: absolute; + top: -60px; + right: 0; + width: 50%; + height: 60px; + content: ""; +} +#nav .menus_items .menus_item:hover .menus_item_child { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + opacity: 1; + -ms-filter: none; + filter: none; + pointer-events: all; + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); +} +#nav .menus_items .menus_item:hover > a > i:last-child { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +#nav .menus_items .menus_item > a > i:last-child { + padding: 4px; + -webkit-transition: -webkit-transform 0.2s; + -moz-transition: -moz-transform 0.2s; + -o-transition: -o-transform 0.2s; + -ms-transition: -ms-transform 0.2s; + transition: transform 0.2s; +} +#nav .menus_items .menus_item .menus_item_child { + position: absolute; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + width: max-content; + border-radius: 5px; + top: 35px; + -webkit-box-shadow: var(--anzhiyu-shadow-black); + box-shadow: var(--anzhiyu-shadow-black); + border: var(--style-border); + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + -ms-transition: 0.2s; + transition: 0.2s; + background-color: var(--anzhiyu-card-bg); + border-radius: 50px; + right: auto; + left: auto; + padding: 6px 4px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + line-height: 35px; + -webkit-transform: translateY(-10px) scale(0); + -moz-transform: translateY(-10px) scale(0); + -o-transform: translateY(-10px) scale(0); + -ms-transform: translateY(-10px) scale(0); + transform: translateY(-10px) scale(0); + -webkit-transform-origin: top; + -moz-transform-origin: top; + -o-transform-origin: top; + -ms-transform-origin: top; + transform-origin: top; + pointer-events: none; + margin-top: 8px; +} +#nav .menus_items .menus_item .menus_item_child:before { + position: absolute; + top: -12px; + left: 0; + width: 100%; + height: 16px; + content: ''; +} +#nav .menus_items .menus_item .menus_item_child li { + list-style: none; +} +#nav .menus_items .menus_item .menus_item_child li:hover { + background: var(--text-bg-hover); +} +#nav .menus_items .menus_item .menus_item_child li:first-child { + border-top-left-radius: 50px; + border-top-right-radius: 50px; +} +#nav .menus_items .menus_item .menus_item_child li:last-child { + border-bottom-right-radius: 50px; + border-bottom-left-radius: 50px; +} +#nav .menus_items .menus_item .menus_item_child li a { + display: inline-block; + padding: 0.5625rem 1rem; + width: 100%; + color: var(--font-color) !important; + text-shadow: none !important; +} +#nav .menus_items .menus_item .menus_item_child li a:hover { + color: var(--anzhiyu-white) !important; + padding: 0.125rem 1.25rem; + -webkit-transform: scale(1) !important; + -moz-transform: scale(1) !important; + -o-transform: scale(1) !important; + -ms-transform: scale(1) !important; + transform: scale(1) !important; + background: var(--anzhiyu-main) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + -webkit-transform: scale(1) !important; + -moz-transform: scale(1) !important; + -o-transform: scale(1) !important; + -ms-transform: scale(1) !important; + transform: scale(1) !important; +} +#nav.hide-menu #toggle-menu { + display: inline-block !important; +} +#nav.hide-menu #toggle-menu .site-page { + font-size: inherit; + width: 30px; + height: 30px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#nav.hide-menu #toggle-menu .site-page i { + font-size: 1.35rem; +} +#nav.hide-menu .menus_items { + display: none; +} +#nav.hide-menu #search-button span { + display: none; +} +#nav #search-button { + display: inline; + padding: 0 0 0 14px; +} +#nav .site-page { + position: relative; + padding-bottom: 6px; + font-size: 0.78em; + cursor: pointer; +} +#nav .site-page:hover { + color: var(--anzhiyu-white) !important; +} +.main-hero-waves-area { + width: 100%; + position: absolute; + left: 0; + bottom: -11px; + z-index: 5; + pointer-events: none; +} +.waves-area .waves-svg { + width: 100%; + height: 3.75rem; +} +.parallax > use { + -webkit-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + -moz-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + -o-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + -ms-animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + will-change: transform; +} +.parallax > use:nth-child(1) { + -webkit-animation-delay: -2s; + -moz-animation-delay: -2s; + -o-animation-delay: -2s; + -ms-animation-delay: -2s; + animation-delay: -2s; + -webkit-animation-duration: 7s; + -moz-animation-duration: 7s; + -o-animation-duration: 7s; + -ms-animation-duration: 7s; + animation-duration: 7s; + fill: rgba(247,249,254,0.741); +} +.parallax > use:nth-child(2) { + -webkit-animation-delay: -3s; + -moz-animation-delay: -3s; + -o-animation-delay: -3s; + -ms-animation-delay: -3s; + animation-delay: -3s; + -webkit-animation-duration: 10s; + -moz-animation-duration: 10s; + -o-animation-duration: 10s; + -ms-animation-duration: 10s; + animation-duration: 10s; + fill: rgba(247,249,254,0.51); +} +.parallax > use:nth-child(3) { + -webkit-animation-delay: -4s; + -moz-animation-delay: -4s; + -o-animation-delay: -4s; + -ms-animation-delay: -4s; + animation-delay: -4s; + -webkit-animation-duration: 13s; + -moz-animation-duration: 13s; + -o-animation-duration: 13s; + -ms-animation-duration: 13s; + animation-duration: 13s; + fill: rgba(247,249,254,0.212); +} +.parallax > use:nth-child(4) { + -webkit-animation-delay: -5s; + -moz-animation-delay: -5s; + -o-animation-delay: -5s; + -ms-animation-delay: -5s; + animation-delay: -5s; + -webkit-animation-duration: 20s; + -moz-animation-duration: 20s; + -o-animation-duration: 20s; + -ms-animation-duration: 20s; + animation-duration: 20s; + fill: #f7f9fe; +} +[data-theme="dark"] .parallax > use:nth-child(1) { + fill: rgba(24,23,29,0.784); +} +[data-theme="dark"] .parallax > use:nth-child(2) { + fill: rgba(24,23,29,0.502); +} +[data-theme="dark"] .parallax > use:nth-child(3) { + fill: rgba(24,23,29,0.243); +} +[data-theme="dark"] .parallax > use:nth-child(4) { + fill: #000; +} +#post-firstinfo { + text-align: left; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + white-space: nowrap; + -webkit-user-select: none; +} +@media screen and (max-width: 768px) { + #post-firstinfo { + z-index: 4; + } +} +#post-firstinfo .meta-firstline { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + height: 32px; +} +#post-firstinfo .meta-firstline a.post-meta-original { + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + padding: 0 0.7rem; + font-size: 0.9rem; + margin: auto; + border-radius: 8px; + font-weight: bold; + height: 32px; + line-height: 32px; + width: 100%; + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#post-firstinfo .meta-firstline span.post-meta-categories { + color: var(--anzhiyu-white); + font-size: 0.9rem; + margin: auto; + font-weight: bold; + height: 32px; + line-height: 32px; + width: 100%; + height: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#post-firstinfo .meta-firstline span.post-meta-categories i { + display: none; +} +#post-firstinfo .meta-firstline span.post-meta-categories a.post-meta-categories { + border-radius: 8px; + padding: 0 0.7rem; + background: var(--anzhiyu-white-op); + color: var(--anzhiyu-white); + font-size: 0.9rem; + width: 100%; + height: 100%; + font-weight: bold; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-left: 0.4rem; +} +#post-firstinfo .meta-firstline .article-meta.tags { + margin-left: 1.2rem; +} +@media screen and (max-width: 768px) { + #post-firstinfo .meta-firstline .article-meta.tags { + display: none; + } +} +#post-firstinfo .meta-firstline .article-meta__tags { + color: var(--anzhiyu-white); + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + margin-right: 8px; +} +#post-firstinfo .meta-firstline .anzhiyu-icon-hashtag:before { + font-size: 17px; +} +#post-firstinfo .meta-firstline .anzhiyu-icon-location-dot { + margin-right: 4px; +} +#post #post-info #post-firstinfo .meta-firstline a.post-meta-original { + background: var(--anzhiyu-black); +} +#post #post-info #post-firstinfo .meta-firstline .article-meta__tags { + color: var(--anzhiyu-black); +} +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + z-index: 10; + } + .post-bg:has(.bldbanner) #post-info:after, + .post-bg:has(.bili-banner) #post-info:after, + .post-bg:has(.blqbanner) #post-info:after { + -webkit-box-shadow: 0px -214px 287px 45px var(--anzhiyu-black-op) inset; + box-shadow: 0px -214px 287px 45px var(--anzhiyu-black-op) inset; + } + .waves-area .waves-svg { + height: 40px; + min-height: 40px; + } + .main-hero-waves-area { + display: none; + visibility: hidden; + } +} +@-moz-keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@-webkit-keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@-o-keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@keyframes move-forever { + 0% { + -webkit-transform: translate3d(-90px, 0, 0); + -moz-transform: translate3d(-90px, 0, 0); + -o-transform: translate3d(-90px, 0, 0); + -ms-transform: translate3d(-90px, 0, 0); + transform: translate3d(-90px, 0, 0); + } + 100% { + -webkit-transform: translate3d(85px, 0, 0); + -moz-transform: translate3d(85px, 0, 0); + -o-transform: translate3d(85px, 0, 0); + -ms-transform: translate3d(85px, 0, 0); + transform: translate3d(85px, 0, 0); + } +} +@-moz-keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +@-webkit-keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +@-o-keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +@keyframes showCover { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-8%) scale(var(--anzhiyu-header-cover-scale)); + } + 100% { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -moz-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -o-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + -ms-transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + transform: rotate(10deg) translateY(-10%) scale(var(--anzhiyu-header-cover-scale)); + } +} +#random-banner { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + height: 76%; + background: var(--anzhiyu-card-bg); + margin-bottom: 0.5rem; + border: var(--style-border); + border-radius: 12px; + overflow: hidden; + position: relative; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow: hidden; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + will-change: transform; +} +#random-banner:hover { + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#random-banner:hover #random-hover { + opacity: 1; + -ms-filter: none; + filter: none; + padding-left: 2rem; + background: var(--anzhiyu-theme-op-deep); + backdrop-filter: blur(15px); + -webkit-backdrop-filter: blur(15px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + background-size: 200%; + cursor: pointer; +} +#random-banner #skills-tags-group-all .tags-group-wrapper { + margin-top: 7rem; +} +#random-banner #skills-tags-group-all { + -webkit-transform: rotate(-30deg); + -moz-transform: rotate(-30deg); + -o-transform: rotate(-30deg); + -ms-transform: rotate(-30deg); + transform: rotate(-30deg); +} +#random-banner #random-hover { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + padding-left: 0.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + -moz-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + -o-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + -ms-transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + transition: cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + font-size: 60px; +} +#random-banner #random-hover .bannerText { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#random-banner #random-hover i { + font-size: 80px; + margin-left: 10px; + line-height: 1; +} +@media screen and (max-width: 1200px) { + #random-banner { + display: none; + } +} +#sidebar #sidebar-menus .menus_items .menus_item_child { + margin: 0px; + list-style: none; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#sidebar #sidebar-menus .menus_item_child li { + width: calc(50% - 8px); + margin: 4px; +} +#sidebar #sidebar-menus .menus_item_child .site-page.child { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 8px; + border-radius: 12px; + border: var(--style-border-always); + background: var(--anzhiyu-card-bg); + font-size: 14px; + height: 4.2rem; + width: 7rem; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#sidebar .menus_item ul { + padding-left: 0px; +} +#nav-group { + max-width: 1400px; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#page-header.nav-fixed #center-console + label i { + background: var(--font-color); +} +#center-console { + display: none; +} +#center-console + label { + --icon-size: 1.375rem; + position: relative; + right: 0; + top: 0; + bottom: 0; + height: var(--icon-size); + width: var(--icon-size); + cursor: pointer; + -webkit-transition: 1s; + -moz-transition: 1s; + -o-transition: 1s; + -ms-transition: 1s; + transition: 1s; + margin-left: 1rem; +} +#center-console + label:hover i.left { + width: calc(var(--icon-size) / 2.5); +} +#center-console + label:hover i.center { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + width: calc(var(--icon-size) / 2.5); +} +#center-console + label:hover i.right { + width: calc(var(--icon-size) / 2.5); + height: calc(var(--icon-size) / 1.15); + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; +} +#center-console + label i { + background: var(--light-grey); + position: absolute; + border-radius: calc(var(--icon-size) * 0.15); + -webkit-transition: 0.5s var(--animation-on); + -moz-transition: 0.5s var(--animation-on); + -o-transition: 0.5s var(--animation-on); + -ms-transition: 0.5s var(--animation-on); + transition: 0.5s var(--animation-on); + inset: 0; + margin: auto; + right: auto; + width: calc(var(--icon-size) / 3); + height: calc(var(--icon-size) / 3); + -webkit-transform: translateY(calc(var(--icon-size) / 4)); + -moz-transform: translateY(calc(var(--icon-size) / 4)); + -o-transform: translateY(calc(var(--icon-size) / 4)); + -ms-transform: translateY(calc(var(--icon-size) / 4)); + transform: translateY(calc(var(--icon-size) / 4)); +} +#center-console + label i.left { + width: 100%; + -webkit-transform: translateY(calc(var(--icon-size) / -4)); + -moz-transform: translateY(calc(var(--icon-size) / -4)); + -o-transform: translateY(calc(var(--icon-size) / -4)); + -ms-transform: translateY(calc(var(--icon-size) / -4)); + transform: translateY(calc(var(--icon-size) / -4)); +} +#center-console + label i.right { + left: auto; + right: 0; + width: calc(var(--icon-size) / 2); +} +#center-console:checked + label { + right: 0; + top: 0.5rem; + z-index: 31; +} +#center-console:checked + label:hover::after { + background: var(--anzhiyu-main) !important; +} +#center-console:checked + label::after { + content: ""; + width: 35px; + height: 35px; + display: block; + position: absolute; + z-index: -1; + top: -6px; + left: -6.3px; + background: var(--anzhiyu-fontcolor) !important; + border-radius: 50px; +} +#center-console:checked + label:is(.widget, +#center-console:checked + label .widget:hover) i { + height: calc(var(--icon-size) / 4.5); + background: var(--anzhiyu-white) !important; +} +#center-console:checked + label i.left { + width: 100% !important; + -webkit-transform: rotate(-45deg) !important; + -moz-transform: rotate(-45deg) !important; + -o-transform: rotate(-45deg) !important; + -ms-transform: rotate(-45deg) !important; + transform: rotate(-45deg) !important; +} +#center-console:checked + label i.center { + width: 0 !important; +} +#center-console:checked + label i.right { + width: 100% !important; + -webkit-transform: rotate(45deg) !important; + -moz-transform: rotate(45deg) !important; + -o-transform: rotate(45deg) !important; + -ms-transform: rotate(45deg) !important; + transform: rotate(45deg) !important; +} +[data-theme="dark"] #center-console:checked + label:is(.widget, +#center-console:checked + label .widget:hover) i { + background: var(--anzhiyu-black) !important; +} +#body-wrap .nav-fixed #travellings_button::after { + background: var(--anzhiyu-main) !important; +} +#body-wrap #travellings_button { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +#body-wrap #travellings_button:hover::after { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; + visibility: visible; +} +#body-wrap #travellings_button:hover a { + background: var(--anzhiyu-main); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#body-wrap #travellings_button:hover a i { + color: var(--anzhiyu-white); +} +#body-wrap #travellings_button::after { + --height: 2rem; + content: attr(title); + position: fixed; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-nav); + box-shadow: var(--anzhiyu-shadow-nav); + border-radius: var(--anzhiyu-radius-full); + width: fit-content; + height: var(--height); + font-size: var(--global-font-size); + white-space: nowrap; + margin: auto; + padding: 0 4em; + top: calc((60px - var(--height)) / 2); + right: 0; + left: 0; + line-height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + z-index: 1; + visibility: hidden; + -webkit-transform: scaleX(1.1); + -moz-transform: scaleX(1.1); + -o-transform: scaleX(1.1); + -ms-transform: scaleX(1.1); + transform: scaleX(1.1); + pointer-events: none; + -webkit-transition: 0.5s; + -moz-transition: 0.5s; + -o-transition: 0.5s; + -ms-transition: 0.5s; + transition: 0.5s; +} +@media screen and (max-width: 900px) { + #body-wrap #travellings_button::after { + padding: 0 2em; + } +} +#body-wrap:has(#travellings_button:hover) #page-name, +#body-wrap:has(#travellings_button:hover) #nav #menus { + display: none; +} +#body-wrap .page #travellings_button:hover::after { + background: var(--anzhiyu-main) !important; +} +@media screen and (max-width: 768px) { + #page-header #nav { + padding: 20px; + } + .cardHover, + .error404 #error-wrap .error-content, + .layout > div:first-child:not(.recent-posts), + #recent-posts > .recent-post-item, + #aside-content .card-widget, + .layout > .recent-posts .pagination > *:not(.space), + .layout > .recent-posts .pagination > *:not(.space):not(pangu) { + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + #sidebar #sidebar-menus .menus_items .site-page:hover { + background: none; + } + div#travellings_button { + display: none !important; + } +} +#nav #blog_name a:hover, +#nav .mask-name-container a:hover, +#nav #menus a:hover, +#nav #nav-right .nav-button a:hover, +#nav #nav-right #toggle-menu a:hover { + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.not-top-img { + margin-bottom: 0px; +} +#page-header:not(.nav-fixed) #percent { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header #nav #nav-right > div { + margin-left: 1rem; + padding: 0; +} +.nav-button { + cursor: pointer; +} +#nav #menus { + padding: 0 calc((100% - 1400px + 3rem) / 2); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 100%; + position: absolute; + height: 60px; + left: 0; + margin: 0; + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + will-change: auto; +} +#nav .site-page { + padding-bottom: 0px; +} +#nav *::after { + background-color: transparent !important; +} +#nav .menus_items .menus_item a { + border-radius: 50px; +} +#nav .menus_items .menus_item .menus_item_child li a { + padding: 2px 16px; + border-radius: 50px; + -webkit-transition: 0.3s !important; + -moz-transition: 0.3s !important; + -o-transition: 0.3s !important; + -ms-transition: 0.3s !important; + transition: 0.3s !important; +} +#nav .menus_items .menus_item .menus_item_child li:hover a { + color: #fff !important; +} +#nav .menus_items .menus_item .menus_item_child li { + border-radius: 50px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + display: inline-block; + margin: 0 3px; +} +#site-name, +.shuoshuo { + white-space: nowrap; + overflow: hidden; +} +#site-name { + padding: 0 2px; + height: 35px; + line-height: 35px; + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#nav .menus_items { + position: relative; + width: fit-content; + text-align: center; + left: 0px; + right: 0px; + top: 0px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#nav #blog_name a, +#nav .mask-name-container a, +#nav #menus a, +#nav #nav-right .nav-button a, +#nav #nav-right #toggle-menu a { + border-radius: 50px; +} +.page #nav #blog_name a:hover, +.page #nav .mask-name-container a:hover, +.page #nav #menus a:hover, +.page #nav #nav-right .nav-button a:hover, +.page #nav #nav-right #toggle-menu a:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +.post #nav #blog_name .back-home-button:hover, +.post #nav #blog_name #site-name:hover, +.post #nav #nav-right .nav-button a:hover, +.post #nav #nav-right #toggle-menu:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.post #nav #menus .menus_item:hover > a { + color: var(--anzhiyu-white); + background: var(--anzhiyu-white-op); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.post .nav-fixed #nav #menus .menus_item:hover > a.site-page { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +.post .nav-fixed #nav #blog_name #site-name:hover, +.post .nav-fixed #nav #blog_name .back-home-button:hover, +.post .nav-fixed #nav #nav-right .nav-button a:hover, +.post .nav-fixed #nav #nav-right #toggle-menu:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#page-header.nav-fixed #nav #page-name { + background: none; + text-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + font-weight: bold; + border-radius: 100px; + min-width: 100px; + line-height: 1.5rem; +} +#name-container { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 12px; + height: 40px; + position: absolute; + top: 62px; + left: 0px; + right: 0px; + margin: auto; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; +} +#page-header.nav-fixed.nav-visible #name-container { + z-index: 100; + top: 60px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header.nav-fixed #nav #page-name:hover { + color: var(--anzhiyu-main); +} +@media screen and (min-width: 900px) { + #page-header.nav-fixed #nav #page-name::after { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + content: "回到顶部"; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -o-transition: 0.2s; + -ms-transition: 0.2s; + transition: 0.2s; + position: absolute; + left: 0; + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + margin: auto; + color: var(--anzhiyu-white) !important; + font-weight: 700; + line-height: 2; + } +} +@media screen and (min-width: 1200px) { + #page-header.nav-fixed #nav #page-name:hover:after { + opacity: 1; + -ms-filter: none; + filter: none; + } + #page-header.nav-fixed #nav #page-name:hover { + background: var(--anzhiyu-main); + } +} +#page-header #nav #page-name { + display: inline; + font-weight: bold; + padding: 4px 8px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; + text-align: center; + cursor: pointer; + top: 0; + font-size: 1.1rem; + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + animation-timing-function: ease-in; + -webkit-animation-timing-function: ease-in; +} +#menus > div.menus_items > div > a { + letter-spacing: 0.3rem; + font-weight: 700; + padding: 0em 0.8em 0em 1em; + height: 35px; + line-height: 35px; + -webkit-transition: color 0s !important; + -moz-transition: color 0s !important; + -o-transition: color 0s !important; + -ms-transition: color 0s !important; + transition: color 0s !important; +} +#nav div#toggle-menu { + padding: 2px 0 4px 6px; +} +#page-name:hover:before { + opacity: 1; + -ms-filter: none; + filter: none; +} +::backdrop { + display: block; + position: fixed; + top: 0px; +} +.mask-name-container { + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; + left: 0; +} +#nav .menus_items .menus_item > a > i:last-child { + display: none; +} +#nav #search-button { + font-size: 1.3em; +} +.back-home-button:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} +.back-home-button { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 35px; + height: 35px; + padding: 0 !important; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-right: 4px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-radius: 8px; +} +.back-home-button:hover .back-menu-list-groups { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + top: 55px; + pointer-events: auto; + left: 0rem; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +.back-home-button .back-menu-list-groups { + position: absolute; + top: 45px; + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + -webkit-transform-origin: top left; + -moz-transform-origin: top left; + -o-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + left: 0rem; + background-color: var(--anzhiyu-maskbgdeep); + border-radius: 12px; + border: var(--style-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + font-size: 12px; + color: var(--anzhiyu-secondtext); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + pointer-events: none; + backdrop-filter: blur(20px); +} +.back-home-button .back-menu-list-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.back-home-button .back-menu-list-group .back-menu-list-title { + margin: 8px 0 0 16px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.back-home-button .back-menu-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + width: 340px; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +.back-home-button .back-menu-list::before { + position: absolute; + top: -24px; + left: 0px; + width: 100%; + height: 25px; + content: ""; + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +.back-home-button .back-menu-list-groups .back-menu-list-group:last-child .back-menu-list { + margin: 0 0 8px; +} +.back-home-button .back-menu-list-group:hover .back-menu-list-title { + color: var(--anzhiyu-main); +} +.back-home-button .back-menu-list-groups:hover { + border: var(--style-border-hover); +} +.back-home-button .back-menu-list .back-menu-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 4px 8px; + padding: 4px 8px !important; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + width: 150px; + border-radius: 8px !important; + -webkit-transition: 0.2s !important; + -moz-transition: 0.2s !important; + -o-transition: 0.2s !important; + -ms-transition: 0.2s !important; + transition: 0.2s !important; +} +.back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text { + font-size: var(--global-font-size); + margin-left: 0.5rem; + color: var(--anzhiyu-fontcolor); + white-space: nowrap; +} +@media screen and (max-width: 768px) { + .back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text { + font-size: 14px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } +} +.back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-icon { + width: 24px; + height: 24px; + border-radius: 24px; + background: var(--anzhiyu-secondbg); +} +#page-header #nav .back-home-button { + cursor: pointer; + position: relative; +} +#page-header:not(.not-top-img) #nav .back-home-button { + color: var(--light-grey); +} +#page-header.nav-fixed:not(.not-top-img) #nav .back-home-button { + color: var(--font-color); +} +.back-home-button .back-menu-list .back-menu-item:hover .back-menu-item-text { + color: var(--anzhiyu-white); +} +.back-menu-item-icon.loading img { + width: 25px; +} +#page-header #nav #menus .nav-button.long a.totopbtn span { + border-radius: 35px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + white-space: nowrap; +} +#page-header #nav #menus .nav-button.long a.totopbtn:hover { + border-radius: 35px; + height: 30px; +} +#nav #search-button { + padding-left: 0; +} +#search-button a.site-page.social-icon.search span { + display: none; +} +#nav .nav-button a:hover { + color: var(--anzhiyu-white) !important; +} +#menus > div.menus_items a { + font-weight: bold; +} +#menus .menus_item .menus_item_child .site-page.child.faa-parent.animated-hover .anzhiyu-icon-fan.faa-tada { + -webkit-animation: rotate 1.6s linear infinite; + -moz-animation: rotate 1.6s linear infinite; + -o-animation: rotate 1.6s linear infinite; + -ms-animation: rotate 1.6s linear infinite; + animation: rotate 1.6s linear infinite; +} +#nav-right { + z-index: 102; + position: absolute; + right: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + height: 100%; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#nav #blog_name { + -webkit-box-lines: single; + -moz-box-lines: single; + -o-box-lines: single; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + height: 60px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + z-index: 102; +} +#blog_name #site-name i { + position: absolute; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-size: 1rem; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#blog_name #site-name:hover .title { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#blog_name #site-name .title { + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + letter-spacing: normal; + font-size: 1.2rem; + padding: 0 5px; + line-height: 2rem; + -webkit-transition: color 0s; + -moz-transition: color 0s; + -o-transition: color 0s; + -ms-transition: color 0s; + transition: color 0s; +} +.post #blog_name #site-name .title { + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +#blog_name #site-name:hover i { + color: #fff; + opacity: 1; + -ms-filter: none; + filter: none; +} +#page-header #nav #nav-right .nav-button a i, +#page-header #nav #nav-left .nav-button a i { + line-height: 1; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#page-header #nav #nav-right .nav-button a:hover i, +#page-header #nav #nav-left .nav-button a:hover i { + color: var(--anzhiyu-white); + -webkit-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + -moz-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + -o-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + -ms-transition: background 0.35s ease-in-out, color 0.2s ease-in-out; + transition: background 0.35s ease-in-out, color 0.2s ease-in-out; +} +@media screen and (max-width: 768px) { + [data-theme="dark"] #page-header #nav #nav-right .nav-button a i, + [data-theme="dark"] #page-header #nav #nav-left .nav-button a i, + [data-theme="dark"] #page-header.nav-fixed:not(.not-top-img) #nav .back-home-button { + color: #c9c9c9 !important; + } +} +#nav-totop { + width: 35px; + height: 35px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + border-radius: 50px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#page-header #nav #nav-right .nav-button a.totopbtn { + width: 25px; + height: 25px; + border-radius: 40px; + background: var(--font-color); + color: var(--card-bg); + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#page-header #nav #nav-right .nav-button:not(.long) a.totopbtn:hover { + height: 35px; + width: 35px; +} +#page-header #nav #nav-right .nav-button:not(.long):hover a.totopbtn { + width: 35px; + height: 35px; + top: 0; + right: 0; +} +#page-header #nav .nav-button a { + height: 35px; + width: 35px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -moz-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -o-transition: background 0.3s ease-in-out, color 0s ease-in-out; + -ms-transition: background 0.3s ease-in-out, color 0s ease-in-out; + transition: background 0.3s ease-in-out, color 0s ease-in-out; +} +.nav-fixed #nav-totop #percent, +.page #nav-totop #percent { + font-size: 13px; + border-radius: 35px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + white-space: nowrap; + color: var(--card-bg); + width: 25px; + height: 25px; +} +#nav-totop #percent { + font-weight: 700; +} +#page-header #nav #nav-right .nav-button:hover a.totopbtn { + background: var(--anzhiyu-main); +} +#nav-totop:hover .totopbtn i { + opacity: 1; + -ms-filter: none; + filter: none; + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#nav-totop .totopbtn i { + position: absolute; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#nav-totop.long .totopbtn i { + font-size: 1rem; +} +#nav-totop:hover #percent { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(1.5); + -moz-transform: scale(1.5); + -o-transform: scale(1.5); + -ms-transform: scale(1.5); + transform: scale(1.5); + font-weight: 700; +} +#page-header:not(.nav-fixed) #nav-totop { + width: 0; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin-left: 0 !important; + overflow: hidden; + -webkit-transition: 0.3s ease-in; + -moz-transition: 0.3s ease-in; + -o-transition: 0.3s ease-in; + -ms-transition: 0.3s ease-in; + transition: 0.3s ease-in; +} +#page-header #nav #nav-right .nav-button.long, +#page-header #nav #nav-right .nav-button.long a.totopbtn, +#page-header #nav #nav-right .nav-button.long a.totopbtn span { + width: 70px; +} +#page-header #nav #nav-right .long#nav-totop:hover { + background-color: transparent; +} +@media screen and (max-width: 1390px) { + #nav { + padding: 0 1.5rem; + } + #nav .mask-name-container { + padding: 0 1.5rem; + } + div#menus { + padding: 0 1.5rem; + } +} +@media screen and (min-width: 900px) { + #nav .back-home-button:hover { + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + } +} +@media screen and (max-width: 768px) { + .mask-name-container { + display: none; + } + #menus { + padding: 20px; + } + #page-header.not-top-img { + margin-bottom: 10px; + } + #nav { + border-bottom: none; + background: var(--anzhiyu-background); + } + #page-header #nav #nav-right div { + margin-left: 0.5rem; + } +} +@media screen and (min-width: 768px) { + .menus_item:hover > a.site-page { + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-main); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + } +} +@media screen and (max-width: 768px) { + #nav { + background: var(--anzhiyu-card-bg) !important; + } +} +@media screen and (max-width: 768px) { + #page-header #nav #site-name, + #page-header #nav #toggle-menu, + #page-header:not(.not-top-img) #nav .back-home-button { + color: var(--font-color) !important; + } +} +@media screen and (max-width: 768px) { + #blog_name a, + .mask-name-container a, + #menus a, + #nav-right .nav-button a, + #nav-right #toggle-menu a { + color: var(--font-color) !important; + } +} +@media screen and (max-width: 768px) { + div#bbTimeList { + margin: 20px 15px !important; + } +} +#pagination .toPageGroup { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; +} +#pagination .toPageGroup:hover { + background: none; +} +#pagination .pagination { + text-align: center; +} +#pagination .pagination .extend.next .pagination_tips_next { + margin-left: -32px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#pagination .page-number.current { + background: #425aef; + color: var(--white); +} +#pagination .pagination-info { + position: absolute; + top: 50%; + padding: 20px 40px; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#pagination .prev_info, +#pagination .next_info { + color: var(--white); + font-weight: 500; +} +#pagination .next-post .pagination-info { + text-align: right; +} +#pagination .pull-full { + width: 100% !important; +} +#pagination .prev-post .label, +#pagination .next-post .label { + color: var(--light-grey); + text-transform: uppercase; + font-size: 90%; +} +#pagination .prev-post, +#pagination .next-post { + width: 50%; +} +@media screen and (max-width: 768px) { + #pagination .prev-post, + #pagination .next-post { + width: 100%; + } +} +#pagination .prev-post a, +#pagination .next-post a { + position: relative; + display: block; + overflow: hidden; + height: 150px; +} +#pagination.pagination-post { + overflow: hidden; + margin-top: 1.25rem; + width: 100%; + background: #000; + border-radius: 10px; +} +@media screen and (max-width: 768px) { + #pagination .toPageGroup { + display: none; + } + #pagination .page-number { + display: none !important; + } + #pagination .space { + display: none !important; + } + #pagination .pagination .extend.next { + width: 100%; + height: 3rem; + margin: 0; + border-radius: 12px; + line-height: 3rem; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + margin: 0 20px; + } + #pagination .pagination .extend.next:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + } + #pagination .pagination .extend.next i { + display: none; + } + #pagination .pagination .extend.next .pagination_tips_next { + opacity: 1; + -ms-filter: none; + filter: none; + margin-left: 0; + } + #pagination .pagination .extend.prev { + width: 100%; + height: 3rem; + border-radius: 12px; + line-height: 3rem; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + margin: 0 20px; + } + #pagination .pagination .extend.prev i { + display: none; + } + #pagination .pagination .extend.prev .pagination_tips_prev { + opacity: 1; + -ms-filter: none; + filter: none; + margin-right: 0; + } +} +.layout > .recent-posts .pagination > *:not(pangu) { + display: inline-block; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; +} +.layout > .recent-posts .pagination > *:not(.space):not(pangu) { + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; +} +.layout > div:not(.recent-posts) .pagination .page-number { + display: inline-block; + margin: 0 4px; + min-width: 2.5em; + height: 2.5em; + text-align: center; + line-height: 2.5em; + cursor: pointer; +} +@media screen and (min-width: 1200px) { + #pagination a.extend.next:hover, + #pagination a.extend.prev:hover { + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + } +} +@media screen and (min-width: 768px) { + #pagination .page-number.current:hover { + background: var(--anzhiyu-theme); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + color: var(--anzhiyu-white); + } + #pagination a.extend.next:hover, + #pagination a.extend.prev:hover { + color: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + } + nav#pagination { + overflow: visible; + } + #pagination .page-number.current { + background: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); + } + #pagination a.extend.next { + overflow: hidden; + height: 2.5em; + line-height: 2.5em; + } + #pagination a.extend.next, + #pagination a.extend.prev { + width: 5rem !important; + line-height: 1.9rem !important; + border-radius: 8px !important; + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + border: var(--style-border); + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + overflow: hidden; + -webkit-transition: all 0.3s, color 0s; + -moz-transition: all 0.3s, color 0s; + -o-transition: all 0.3s, color 0s; + -ms-transition: all 0.3s, color 0s; + transition: all 0.3s, color 0s; + position: absolute; + } + #pagination .page-number { + background: var(--anzhiyu-card-bg); + border-radius: 8px !important; + margin: 0 0.3rem; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + border: var(--style-border); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + } + #pagination .page-number:hover { + color: var(--anzhiyu-theme); + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); + } +} +#pagination .pagination { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +#pagination a.extend.next:hover .pagination_tips_next { + margin-left: 2px; + opacity: 1; + -ms-filter: none; + filter: none; + white-space: nowrap; +} +#pagination a.extend.prev .pagination_tips_prev { + margin-right: -32px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#pagination a.extend.prev:hover .pagination_tips_prev { + margin-right: 2px; + opacity: 1; + -ms-filter: none; + filter: none; + white-space: nowrap; +} +a.extend.prev { + left: 0; +} +a.extend.next { + right: 0; +} +#pagination { + overflow: hidden; + margin-top: 1rem; + width: 100%; +} +@media screen and (max-width: 768px) { + #site-name { + padding: 0 !important; + } +} +#pagination .pagination input { + width: 2.5em; + height: 2.5em; + border-radius: 8px; + border: var(--style-border-always); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + outline-style: none; + font-size: 16px; + padding-left: 12px; +} +a#toPageButton { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: absolute; + width: 2.5em; + height: 2.5em; + right: 0px; + top: 0px; + border-radius: 8px; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + cursor: pointer; +} +#pagination .pagination .toPageGroup:hover input, +#pagination .pagination .toPageGroup input:focus { + border: var(--style-border-hover-always); + outline-style: none; + width: 100px; +} +#pagination .toPageGroup:hover a#toPageButton, +#pagination .toPageGroup:focus-within a#toPageButton { + width: 30px; + height: 30px; + right: 4px; + top: 5px; + background: var(--anzhiyu-secondbg); + border: 1px solid var(--anzhiyu-none); + border-radius: 4px; +} +blockquote { + border: var(--style-border-always); + background-color: var(--anzhiyu-secondbg); + color: var(--anzhiyu-secondtext); + border-radius: 8px; + margin: 1rem 0; + padding: 0.5rem 0.8rem; +} +#article-container { + word-wrap: break-word; + overflow-wrap: break-word; +} +#article-container h1 .post-content, +#article-container h2 .post-content, +#article-container h3 .post-content, +#article-container h4 .post-content, +#article-container h5 .post-content, +#article-container h6 .post-content { + line-height: 1.6; + border-top: 1px dashed var(--anzhiyu-theme-op); + padding-top: 1.5rem; + padding-left: 0; +} +#article-container a { + color: var(--anzhiyu-fontcolor); +} +#article-container a:hover { + text-decoration: underline; +} +#article-container img { + display: block; + margin: 0 auto 20px; + max-width: 100%; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-radius: 8px; +} +#article-container p { + margin: 0 0 16px; +} +#article-container iframe { + margin: 0 0 20px; + border-radius: 12px; +} +#article-container kbd { + margin: 0 3px; + padding: 3px 5px; + border: 1px solid #b4b4b4; + border-radius: 3px; + background-color: #f8f8f8; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + color: #34495e; + white-space: nowrap; + font-weight: 600; + font-size: 0.9em; + font-family: Monaco, 'Ubuntu Mono', monospace; + line-height: 1em; +} +#article-container h1 .headerlink { + float: right; + opacity: 0.08; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=8)"; + filter: alpha(opacity=8); + position: relative; + padding: 0px; + border: none; + line-height: 2; + font-size: 2rem; + border-radius: 8px !important; + text-decoration: none; + font-weight: 700; +} +#article-container h1 .headerlink::before { + font-size: 2rem; +} +#article-container > :first-child:is(h2) { + border-top: none; + padding-top: 0; + margin-top: 0; +} +#article-container h2 .headerlink { + float: right; + opacity: 0.08; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=8)"; + filter: alpha(opacity=8); + position: relative; + padding: 0px; + border: none; + line-height: 2; + font-size: 1.8rem; + border-radius: 8px !important; + text-decoration: none; + font-weight: 700; +} +#article-container h2 .headerlink::before { + font-size: 1.8rem; +} +#article-container h3 .headerlink, +#article-container h4 .headerlink, +#article-container h5 .headerlink, +#article-container h6 .headerlink { + float: right; + opacity: 0.08; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=8)"; + filter: alpha(opacity=8); + position: relative; + padding: 0px; + border: none; + line-height: 2; + font-size: 1.3rem; + border-radius: 8px !important; + text-decoration: none; + font-weight: 700; +} +#article-container h3 .headerlink::before, +#article-container h4 .headerlink::before, +#article-container h5 .headerlink::before, +#article-container h6 .headerlink::before { + font-size: 1.3rem; +} +#article-container a.headerlink::before { + content: '\f0c1'; + float: right; + color: var(--headline-presudo); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#article-container a.headerlink:hover:after { + color: var(--pseudo-hover); +} +#article-container a.headerlink h1:hover a.headerlink:after, +#article-container a.headerlink h2:hover a.headerlink:after, +#article-container a.headerlink h3:hover a.headerlink:after, +#article-container a.headerlink h4:hover a.headerlink:after, +#article-container a.headerlink h5:hover a.headerlink:after, +#article-container a.headerlink h6:hover a.headerlink:after { + opacity: 1; + -ms-filter: none; + filter: none; +} +#article-container ol ol, +#article-container ul ol, +#article-container ol ul, +#article-container ul ul { + padding-left: 20px; +} +#article-container ol li, +#article-container ul li { + margin: 4px 0; +} +#article-container ol p, +#article-container ul p { + margin: 0 0 8px; +} +#article-container.post-content h1:before { + margin-left: -26px; + font-size: 20px; +} +#article-container.post-content h1:hover:before { + color: #425aef; +} +#article-container.post-content h2:before { + margin-left: -24px; + font-size: 18px; +} +#article-container.post-content h2:hover:before { + color: #425aef; +} +#article-container.post-content h3:before { + margin-left: -22px; + font-size: 16px; +} +#article-container.post-content h3:hover:before { + color: #425aef; +} +#article-container.post-content h4:before { + margin-left: -20px; + font-size: 14px; +} +#article-container.post-content h4:hover:before { + color: #425aef; +} +#article-container.post-content h5:before { + margin-left: -18px; + font-size: 12px; +} +#article-container.post-content h5:hover:before { + color: #425aef; +} +#article-container.post-content h6:before { + margin-left: -18px; + font-size: 12px; +} +#article-container.post-content h6:hover:before { + color: #425aef; +} +#article-container.post-content ol p, +#article-container.post-content ul p { + margin: 0 0 8px; +} +#article-container.post-content li::marker { + color: #425aef; + font-weight: 600; + font-size: 1.05em; +} +#article-container.post-content li:hover::marker { + color: var(--pseudo-hover); +} +#article-container > :last-child { + margin-bottom: 0 !important; +} +@media screen and (max-width: 768px) { + #post { + background: var(--anzhiyu-background) !important; + border: none; + } +} +#post .post_share { + margin: 8px 0 0; + width: fit-content; + min-width: 205px; +} +#post .tag_share { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + width: 100%; +} +#post .tag_share .post-meta__box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; +} +#post .tag_share .post-meta__box__tag-list, +#post .tag_share .post-meta__box__category-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#post .tag_share .post-meta__box__tags, +#post .tag_share .post-meta__box__categoryes { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + padding: 4px 12px; + width: fit-content; + border-radius: 8px; + font-size: 0.85em; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +@media screen and (max-width: 768px) { + #post .tag_share .post-meta__box__tags, + #post .tag_share .post-meta__box__categoryes { + margin: 4px 8px 4px 0 !important; + } +} +#post .tag_share .post-meta__box__tags { + margin: 0px 8px 0px 0; +} +#post .tag_share .post-meta__box__categoryes { + margin: 0px 8px 4px 0; +} +#post .tag_share .post-meta__box__categoryes:hover { + background: #425aef; + color: var(--white); +} +#post .tag_share .post-meta .social-share { + font-size: 0.85em; +} +#post .tag_share .post-meta .social-share .social-share-icon { + margin: 0 4px; + width: 1.85em; + height: 1.85em; + font-size: 1.2em; + line-height: 1.85em; +} +#post .post-copyright { + background: var(--anzhiyu-secondbg); + padding: 1rem 1.3rem; + border: var(--style-border); + border-width: 1px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + position: relative; + margin: 80px 0 30px; + border-radius: 12px; +} +#post .post-copyright .copyright-cc-box { + position: absolute; + right: 0; + overflow: hidden; + width: 100%; + height: 100%; + top: 0; + pointer-events: none; +} +#post .post-copyright__author_box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-top: 1.5rem; +} +#post .post-copyright__author_box .post-copyright__author_img { + width: 66px; + height: 66px; + margin: auto; + border-radius: 66px; + overflow: hidden; + position: absolute; + left: calc(50% - 33px); + top: -33px; + border: var(--style-border-always); + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#post .post-copyright__author_box .post-copyright__author_img:hover img.post-copyright__author_img_back { + z-index: 21; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -o-transform: translateY(0px); + -ms-transform: translateY(0px); + transform: translateY(0px); +} +#post .post-copyright__author_box .post-copyright__author_img img.post-copyright__author_img_front { + z-index: 20; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#post .post-copyright__author_box .post-copyright__author_img img.post-copyright__author_img_back { + border-radius: 66px; + z-index: 10; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#post .post-copyright__author_box .post-copyright__author_img img { + position: absolute; + bottom: 0; + left: 0; +} +#post .post-copyright__author_box .post-copyright__author_name { + text-align: center; + font-size: 20px; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + line-height: 1; +} +#post .post-copyright__author_box .post-copyright__author_desc { + text-align: center; + font-size: 14px; + color: var(--anzhiyu-secondtext); + margin-top: 4px; +} +#post .post-copyright__post__info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin-top: 0.2rem; +} +#post .post-copyright__original, +#post .post-copyright__reprint { + background: var(--anzhiyu-main); + color: var(--anzhiyu-wihite-font); + padding: 0.2rem 1rem; + font-size: 0.8rem; + border-radius: 8px; + margin-right: 0.5rem; + font-weight: bold; + line-height: 1.5; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#post .post-copyright .anzhiyufont.anzhiyu-icon-copyright { + position: absolute; + font-size: 1.3em; + top: -71px; + right: -20px; + font-size: 8.3em; + z-index: -1; + color: var(--anzhiyu-main); +} +@media screen and (min-width: 1365px) { + #post .post-copyright .anzhiyufont.anzhiyu-icon-copyright { + z-index: 0; + } +} +#post .post-copyright-title { + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + font-weight: 500; + max-width: 70%; +} +#post .post-copyright-title span { + cursor: pointer; +} +#post .post-copyright-title:hover { + color: var(--anzhiyu-fontcolor); +} +#post .post-copyright .post-copyright__notice { + font-size: 12px; +} +#post .post-copyright .post-copyright__notice .post-copyright-info { + padding-left: 0; + color: var(--anzhiyu-secondtext); + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-align: center; +} +@media screen and (max-width: 768px) { + #post .post-copyright .post-copyright__notice .post-copyright-info { + -webkit-line-clamp: 2; + } +} +#post .post-copyright .post-copyright__notice .post-copyright-info a:hover { + color: var(--anzhiyu-main); +} +#post .post-outdate-notice { + position: relative; + margin: 0 0 20px; + padding: 0.5em 1.2em; + border-radius: 3px; + background-color: #ffe6e6; + color: #f66; + padding: 0.5em 1em 0.5em 2.6em; + border-left: 5px solid #ff8080; +} +#post .post-outdate-notice:before { + content: '\e66f'; + position: absolute; + top: 50%; + left: 0.9em; + color: #ff8080; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +#post .ads-wrap { + margin: 40px 0; +} +#post #content-inner.layout #article-container h1, +#post #content-inner.layout #article-container h2, +#post #content-inner.layout #article-container h3, +#post #content-inner.layout #article-container h4, +#post #content-inner.layout #article-container h5, +#post #content-inner.layout #article-container h6 { + padding-left: 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-direction: reverse; + -moz-box-direction: reverse; + -o-box-direction: reverse; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; +} +.post-ai-description { + background: var(--anzhiyu-secondbg); + border-radius: 12px; + padding: 12px 16px; + line-height: 1.3; + border: var(--style-border-always); + margin-bottom: 10px; +} +.ai-title { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + color: var(--font-color); + border-radius: 8px; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 5px; +} +.ai-title i { + font-weight: 800; + font-size: 20px; + line-height: 20px; + height: 20px; +} +.ai-title .anzhiyufont.anzhiyu-icon-circle-dot { + margin-left: auto; + margin-right: 4px; + font-size: 14px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.ai-title .anzhiyufont.anzhiyu-icon-circle-dot:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); +} +.ai-title .anzhiyufont.anzhiyu-icon-arrow-rotate-right { + font-size: 14px; + margin-left: 4px; + cursor: pointer; +} +.ai-title .ai-title-text { + font-weight: bold; + margin-left: 8px; +} +#ai-tag { + font-size: 12px; + background-color: var(--anzhiyu-lighttext); + color: rgba(255,255,255,0.9); + border-radius: 4px; + line-height: 1; + padding: 4px 5px; + cursor: pointer; +} +#ai-Toggle { + font-size: 12px; + background: var(--anzhiyu-lighttext); + color: var(--anzhiyu-card-bg); + padding: 4px; + border-radius: 4px; + margin-left: 6px; + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + font-weight: bold; +} +#ai-Toggle:hover { + background: var(--anzhiyu-fontcolor); + color: var(--anzhiyu-card-bg); +} +#go-tianli-blog { + display: none; +} +.ai-explanation { + margin-top: 12px; + padding: 8px 12px; + background: var(--anzhiyu-card-bg); + border-radius: 8px; + border: var(--style-border-always); + font-size: 15px; + line-height: 1.4; +} +.ai-cursor { + display: inline-block; + width: 7px; + background: #333; + height: 16px; + margin-bottom: -2px; + opacity: 0.95; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=95)"; + filter: alpha(opacity=95); + margin-left: 3px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +[data-theme="dark"] .ai-cursor { + background: #fff; +} +.ai-btn-box { + font-size: 15.5px; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.ai-btn-item { + padding: 5px 10px; + margin: 10px 16px 0px 5px; + width: fit-content; + line-height: 1; + background: var(--anzhiyu-main); + color: #fff; + border-radius: 6px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + cursor: pointer; +} +.ai-btn-item:hover { + background: var(--anzhiyu-theme); +} +.ai-recommend { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.ai-recommend .ai-recommend-item { + width: calc(50% - 20px); + margin: 10px; + background: var(--anzhiyu-secondbg); + border-radius: 4px; + padding: 10px; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-animation: slide-in 0.6s 0.1s backwards; + -moz-animation: slide-in 0.6s 0.1s backwards; + -o-animation: slide-in 0.6s 0.1s backwards; + -ms-animation: slide-in 0.6s 0.1s backwards; + animation: slide-in 0.6s 0.1s backwards; +} +.ai-recommend .ai-recommend-item span.index { + padding: 4px; +} +.ai-recommend .ai-recommend-item:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-theme); +} +.ai-recommend .ai-recommend-item:hover a { + color: var(--anzhiyu-white); +} +@media screen and (max-width: 768px) { + .ai-btn-box { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + .ai-recommend .ai-recommend-item { + width: 100%; + } +} +.post-tools { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-user-select: none; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.post-tools .post-tools-left { + white-space: nowrap; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-bottom: 0.5rem; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.post-tools .post-tools-left .rewardLeftButton, +.post-tools .post-tools-left .shareRight { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 10px; +} +@media screen and (max-width: 768px) { + .post-tools .post-tools-left { + margin-top: 1rem; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + width: 100%; + } + .post-tools .post-tools-left > div { + margin: 8px; + } +} +.post-tools-right { + padding-right: 0px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-bottom: 0.5rem; +} +@media screen and (max-width: 768px) { + .post-tools-right { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +.share-link { + margin-left: 0.5rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + position: relative; + text-align: center; +} +.share-link.mobile:hover .share-button { + background: var(--anzhiyu-green); + border-color: var(--anzhiyu-green); + -webkit-box-shadow: var(--anzhiyu-shadow-green); + box-shadow: var(--anzhiyu-shadow-green); + color: var(--anzhiyu-white); +} +.share-link.mobile:hover .share-main { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} +.share-link .share-qrcode { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.share-link .share-button { + background: var(--anzhiyu-card-bg); + border: var(--style-border); + color: var(--anzhiyu-fontcolor); + border-radius: 8px; + cursor: pointer; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + width: 56px; + height: 40px; +} +.share-link .share-button:hover { + background: var(--anzhiyu-main); + border-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-blue); + box-shadow: var(--anzhiyu-shadow-blue); +} +.share-link .share-button i { + line-height: 38px; + font-size: 1.1rem; +} +.share-link .share-main { + position: absolute; + bottom: 40px; + z-index: 100; + padding-bottom: 15px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + pointer-events: none; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-transform: translateY(8px); + -moz-transform: translateY(8px); + -o-transform: translateY(8px); + -ms-transform: translateY(8px); + transform: translateY(8px); +} +.share-link .share-main .share-main-all { + padding: 12px; + border-radius: 12px; + background: var(--anzhiyu-background); + -webkit-animation: donate_effcet 0.3s 0.1s ease both; + -moz-animation: donate_effcet 0.3s 0.1s ease both; + -o-animation: donate_effcet 0.3s 0.1s ease both; + -ms-animation: donate_effcet 0.3s 0.1s ease both; + animation: donate_effcet 0.3s 0.1s ease both; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + border: var(--style-border-always); +} +.share-link .share-main .share-main-all #qrcode { + width: 150px; + height: 150px; + min-width: 150px; + min-height: 150px; + background: var(--anzhiyu-white); + padding: 8px; + border-radius: 8px; + margin-bottom: 8px; + border: var(--style-border-always); +} +.share-link .share-main .share-main-all .reward-dec { + font-size: 12px; +} +.post-tools .post-tools-left > div { + margin: 0; +} +.post-tools .post-tools-left { + width: auto; +} +.relatedPosts { + margin-top: 1.25rem; +} +.relatedPosts > .headline { + margin-bottom: 5px; + font-weight: 700; + font-size: 1.43em; +} +.relatedPosts > .relatedPosts-list > div { + position: relative; + display: inline-block; + overflow: hidden; + margin: 3px; + width: calc(33.333% - 6px); + height: 200px; + background: #000; + vertical-align: bottom; +} +@media screen and (max-width: 768px) { + .relatedPosts > .relatedPosts-list > div { + margin: 2px; + width: calc(50% - 4px); + height: 150px; + } +} +@media screen and (max-width: 600px) { + .relatedPosts > .relatedPosts-list > div { + width: calc(100% - 4px); + } +} +.relatedPosts > .relatedPosts-list .content { + position: absolute; + top: 50%; + padding: 0 20px; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.relatedPosts > .relatedPosts-list .content .date { + color: var(--light-grey); + font-size: 90%; +} +.relatedPosts > .relatedPosts-list .content .title { + color: var(--white); + -webkit-line-clamp: 2; +} +.post-reward { + position: relative; + text-align: center; + margin-top: 0rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.post-reward:hover .reward-button { + color: var(--anzhiyu-white); + background: var(--anzhiyu-theme); + -webkit-box-shadow: none; + box-shadow: none; +} +.post-reward:hover .reward-main { + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; + -webkit-box-pack: left; + -moz-box-pack: left; + -o-box-pack: left; + -ms-flex-pack: left; + -webkit-justify-content: left; + justify-content: left; +} +.post-reward > * { + pointer-events: auto; +} +.post-reward .reward-button { + border-radius: 8px; + background: var(--anzhiyu-red); + color: var(--anzhiyu-white); + padding: 0; + margin-right: 0.5rem; + width: 126px; + height: 40px; + line-height: 39px; + -webkit-box-shadow: var(--anzhiyu-shadow-red); + box-shadow: var(--anzhiyu-shadow-red); + display: inline-block; + cursor: pointer; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + -ms-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; +} +.post-reward .reward-main { + position: absolute; + bottom: 40px; + left: -70%; + z-index: 90; + display: none; + padding: 0px 0px 15px; + width: 100%; +} +.post-reward .reward-main .reward-all { + border-radius: 12px; + background: var(--anzhiyu-background); + border: var(--style-border-always); + padding: 0.8rem; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin: 0px; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.post-reward .reward-main .reward-all::before { + position: absolute; + bottom: -10px; + left: 0px; + width: 100%; + height: 20px; + content: ""; +} +.post-reward .reward-main .reward-all .reward-title { + font-weight: bold; + color: var(--anzhiyu-red); +} +.post-reward .reward-main .reward-all .reward-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-top: 0.5rem; + padding: 0; +} +.post-reward .reward-main .reward-all .reward-group .reward-item { + display: inline-block; + padding: 0px 8px; + list-style-type: none; + vertical-align: top; +} +.post-reward .reward-main .reward-all .reward-group .reward-item .post-qr-code-img { + -webkit-box-shadow: var(--anzhiyu-shadow-lightblack); + box-shadow: var(--anzhiyu-shadow-lightblack); + border-radius: 12px; + border: var(--style-border-always); +} +.post-reward .reward-main .reward-all .reward-group .reward-item .post-qr-code-desc { + padding-top: 0rem; + margin-top: -8px; + margin-bottom: 8px; +} +.post-reward .reward-main .reward-all .reward-group .reward-item img { + width: 130px; + height: 130px; + max-width: fit-content; +} +.post-reward .reward-main .reward-all .reward-group .reward-item:first-child img { + border-color: var(--anzhiyu-green); +} +.post-reward .reward-main .reward-all .reward-group .reward-item:last-child img { + border-color: var(--anzhiyu-blue); +} +.post-reward .reward-main .reward-all .reward-main-btn { + background: var(--anzhiyu-secondbg); + color: var(--anzhiyu-fontcolor); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + border-radius: 12px; + padding: 4px 0; + border: var(--style-border-always); + margin: 8px; + width: 100%; +} +.post-reward .reward-main .reward-all .reward-main-btn:hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-red); + -webkit-box-shadow: var(--anzhiyu-shadow-red); + box-shadow: var(--anzhiyu-shadow-red); +} +.post-reward .reward-main .reward-all .reward-main-btn .reward-text { + margin-bottom: 0rem; + font-weight: bold; +} +.post-reward .reward-main .reward-all .reward-main-btn .reward-dec { + font-size: 12px; +} +.reward-link.mode { + background: var(--anzhiyu-green); + color: var(--anzhiyu-white); + padding: 0; + width: 173px; + height: 40px; + line-height: 39px; + -webkit-box-shadow: var(--anzhiyu-shadow-green); + box-shadow: var(--anzhiyu-shadow-green); + border-radius: 8px; + text-align: center; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +.reward-link.mode:hover { + background: var(--anzhiyu-theme); + -webkit-box-shadow: none; + box-shadow: none; +} +.reward-link.mode a { + color: var(--anzhiyu-white); + height: 100%; + width: 100%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +.reward-link.mode i { + margin-right: 4px; +} +#quit-box { + position: fixed; + width: 100vw; + height: 100vh; + background: rgba(0,0,0,0.2); + top: 0; + left: 0; + display: none; + z-index: 101; + margin: 0; +} +#rightMenu { + display: none; + position: fixed; + padding: 0 0.25rem; + width: 11rem; + height: fit-content; + top: 10%; + left: 10%; + background-color: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); + border-radius: 12px; + z-index: 10002; + border: var(--style-border); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#rightMenu a { + color: var(--anzhiyu-fontcolor); +} +#rightMenu:hover { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +#rightMenu .rightMenu-group { + padding: 0.35rem 0.3rem; +} +#rightMenu .rightMenu-group:not(:nth-last-child(1)) { + border-bottom: 2px dashed var(--anzhiyu-theme-op); +} +#rightMenu .rightMenu-group.rightMenu-small { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#rightMenu .rightMenu-group .rightMenu-item { + border-radius: 8px; + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; + cursor: pointer; + padding: 0 6px; +} +#rightMenu .rightMenu-line .rightMenu-item { + margin: 0.25rem 0; + padding: 0.25rem 0; +} +#rightMenu .rightMenu-group.rightMenu-line .rightMenu-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 8px; +} +#rightMenu .rightMenu-group .rightMenu-item:hover { + background-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +#rightMenu .rightMenu-group .rightMenu-item i { + display: inline-block; + text-align: center; + line-height: 1.5rem; + width: 1.5rem; + padding: 0 0.25rem; + font-size: 1.1rem; +} +#rightMenu .rightMenu-line .rightMenu-item i { + margin: 0 0.5rem 0 0.25rem; +} +#rightMenu .rightMenu-group .rightMenu-item span { + line-height: 1.5rem; +} +#rightmenu-mask { + position: fixed; + width: 100vw; + height: 100vh; + background: none; +/* background: var(--anzhiyu-maskbg); */ + top: 0; + left: 0; + display: none; + z-index: 10001; + margin: 0 !important; +} +@media screen and (max-width: 768px) { + :root { + --style-border: 1px solid var(--anzhiyu-card-border); + --style-border-hover: 1px solid var(--anzhiyu-theme); + } +} +#rightside { + position: fixed; + right: -48px; + bottom: 100px; + z-index: 100; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +@media screen and (max-width: 768px) { + #rightside #switch-commentBarrage { + display: none; + } +} +#rightside i { + font-size: 1rem; +} +#rightside #rightside-config-hide { + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: -webkit-transform 0.4s; + -moz-transition: -moz-transform 0.4s; + -o-transition: -o-transform 0.4s; + -ms-transition: -ms-transform 0.4s; + transition: transform 0.4s; + -webkit-transform: translate(45px, 0); + -moz-transform: translate(45px, 0); + -o-transform: translate(45px, 0); + -ms-transform: translate(45px, 0); + transform: translate(45px, 0); +} +#rightside #rightside-config-hide.show { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} +#rightside #rightside-config-hide.status { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; +} +#rightside > div > button, +#rightside > div > a { + display: block; + margin-bottom: 5px; + width: 35px; + height: 35px; + border-radius: 5px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + font-size: 16px; + line-height: 35px; +} +#rightside > div > button:hover, +#rightside > div > a:hover { + background-color: var(--btn-hover-color); +} +#rightside #mobile-toc-button { + display: none; +} +@media screen and (max-width: 900px) { + #rightside #mobile-toc-button { + display: block; + } +} +@media screen and (max-width: 900px) { + #rightside #hide-aside-btn { + display: none; + } +} +#keyboard-tips { + position: fixed; + top: 80px; + left: 20px; + z-index: 999; + background: var(--anzhiyu-maskbgdeep); + border-radius: 12px; + border: var(--style-border); + padding: 20px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + pointer-events: none; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + #keyboard-tips { + display: none !important; + } +} +#keyboard-tips.show { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition: 0.1s; + -moz-transition: 0.1s; + -o-transition: 0.1s; + -ms-transition: 0.1s; + transition: 0.1s; +} +#keyboard-tips .keyboardTitle { + font-size: 12px; + color: var(--anzhiyu-secondtext); + line-height: 1; +} +#keyboard-tips .keybordList { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-top: 8px; +} +#keyboard-tips .keybordItem { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + margin-top: 4px; +} +#keyboard-tips .keyGroup { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 90px; +} +#keyboard-tips .keyGroup .key { + padding: 0.2em 0.4em; + font-family: inherit; + background-color: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); + border: var(--style-border); + border-color: var(--anzhiyu-secondtext); + border-bottom: 2px solid var(--anzhiyu-secondtext); + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + border-radius: 0.25rem; + overflow-wrap: break-word; + overflow-x: auto; + font-weight: 500; + font-size: 0.875em; + margin-right: 4px; + vertical-align: baseline; + line-height: 1; + height: 24px; +} +#menu-mask { + position: fixed; + z-index: 102; + display: none; + width: 100%; + height: 100%; + background: var(--anzhiyu-maskbg); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-animation: 0.6s ease 0s 1 normal none running to_show; + -moz-animation: 0.6s ease 0s 1 normal none running to_show; + -o-animation: 0.6s ease 0s 1 normal none running to_show; + -ms-animation: 0.6s ease 0s 1 normal none running to_show; + animation: 0.6s ease 0s 1 normal none running to_show; + -webkit-transform-style: preserve-3d; +} +#sidebar { + position: absolute; + top: 0; +} +#sidebar #sidebar-menus { + position: fixed; + top: 0; + right: -300px; + z-index: 103; + overflow: hidden auto; + width: 300px; + height: 100%; + background: var(--anzhiyu-background); + -webkit-transition: all 0.5s ease 0s; + -moz-transition: all 0.5s ease 0s; + -o-transition: all 0.5s ease 0s; + -ms-transition: all 0.5s ease 0s; + transition: all 0.5s ease 0s; + padding-top: 30px; + border-left: var(--style-border-always); +} +#sidebar #sidebar-menus .sidebar-menu-item a.menu-child span { + margin-left: 10px; +} +#sidebar #sidebar-menus .back-menu-list-groups { + padding: 0 16px; +} +#sidebar #sidebar-menus .back-menu-list-groups .back-menu-list-title { + font-size: 12px; + color: var(--anzhiyu-secondtext); +} +#sidebar #sidebar-menus .back-menu-list-groups .back-menu-list { + width: calc(100% + 16px); + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + margin: 0 -8px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#sidebar #sidebar-menus .back-menu-list-groups .back-menu-list .back-menu-item { + width: calc(50% - 16px); + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + border-radius: 8px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 4px 8px; + padding: 4px 8px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#sidebar #sidebar-menus .sidebar-menu-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 0 16px; + margin-bottom: 6px; +} +#sidebar #sidebar-menus .sidebar-menu-item a.darkmode_switchbutton { + padding: 4px 8px; + cursor: pointer; + margin: 0; + font-size: 0.9rem; + color: var(--anzhiyu-fontcolor); + width: 100%; + background: var(--anzhiyu-card-bg); + border-radius: 8px; + border: var(--style-border-always); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + font-size: 14px; +} +#sidebar #sidebar-menus span.sidebar-menu-item-title { + font-size: 12px; + color: var(--anzhiyu-secondtext); + margin-left: 16px; +} +#sidebar #sidebar-menus .card-tag-cloud { + padding: 0 11px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-bottom: 60px; +} +#sidebar #sidebar-menus .card-tag-cloud a { + color: var(--anzhiyu-fontcolor); + padding: 2px 8px 2px 12px; + margin: 4px; + border-radius: 8px; + border: var(--style-border-always); + background: var(--anzhiyu-card-bg); +} +#sidebar #sidebar-menus .card-tag-cloud a sup { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + margin-left: 4px; +} +#sidebar #sidebar-menus.open { + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#sidebar #sidebar-menus .sidebar-site-data { + padding: 0 10px; +} +#sidebar #sidebar-menus hr { + margin: 20px auto; +} +#sidebar #sidebar-menus .menus_items { + padding: 0 10px; +} +#sidebar #sidebar-menus .menus_items .site-page { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + font-size: 12px; + position: relative; + padding-left: 0.3rem; + color: var(--anzhiyu-fontcolor); +} +#sidebar #sidebar-menus .menus_items .site-page i:first-child { + width: 15%; + text-align: left; + max-height: 20px; + font-size: 16px; +} +#sidebar #sidebar-menus .menus_items .site-page.group > i:last-child { + position: absolute; + top: 0.78em; + right: 18px; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide > i:last-child { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide + .menus_item_child { + display: none; +} +#sidebar #sidebar-menus .menus_items .menus_item_child { + margin: 0; + list-style: none; +} +#sidebar #sidebar-menus .menus_items .menus_item_child .site-page.child { + background: var(--anzhiyu-card-bg); +} +#aside-content .card-tag-cloud a { + border-radius: var(--anzhiyu-border-radius); + display: inline-block; + margin-right: 4px; +} +#aside-content .card-tag-cloud a:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +@media screen and (min-width: 1200px) { + #aside-content .card-tag-cloud a:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +#aside-content .card-tag-cloud a sup { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + margin-left: 2px; +} +span.card-archive-list-count { + width: auto; + text-align: left; + font-size: 1.5rem; + line-height: 0.9; + font-weight: 700; +} +.card-archive-list-count-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: baseline; + -moz-box-align: baseline; + -o-box-align: baseline; + -ms-flex-align: baseline; + -webkit-align-items: baseline; + align-items: baseline; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:last-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:last-child { + width: fit-content; + margin-left: 4px; +} +span.card-archive-list-count { + width: auto; + text-align: left; + font-size: 1.1rem; + line-height: 0.9; + font-weight: 700; +} +.card-archive-list-date, +span.card-category-list-name { + font-size: 13px; + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); +} +li.card-archive-list-item, +li.card-category-list-item { + width: 100%; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 0 0 48%; + -ms-flex: 0 0 48%; + flex: 0 0 48%; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover { + color: var(--anzhiyu-white); + background-color: var(--anzhiyu-theme); + border-radius: var(--anzhiyu-border-radius); + border: 1px solid transparent; +} +@media screen and (min-width: 1200px) { + #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:active, + #aside-content .card-categories ul.card-category-list > .card-category-list-item a:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a { + border-radius: var(--anzhiyu-border-radius); + margin: 4px 0; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-line-pack: justify; + -webkit-align-content: space-between; + align-content: space-between; + border: var(--style-border); +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { + width: auto; + -webkit-box-flex: inherit; + -moz-box-flex: inherit; + -o-box-flex: inherit; + box-flex: inherit; + -webkit-flex: inherit; + -ms-flex: inherit; + flex: inherit; +} +#aside-content .card-archives ul.card-archive-list, +#aside-content .card-categories ul.card-category-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +#aside-content .card-info #card-info-btn { + border-radius: var(--anzhiyu-border-radius); +} +#aside-content .aside-list > .aside-list-item .content > time { + display: none; +} +#aside-content .aside-list > .aside-list-item .content > .title { + -webkit-line-clamp: 3; + font-weight: 700; + padding: 2px 0; + width: 100%; + height: 100%; + display: -webkit-box; +} +#aside-content .aside-list > .aside-list-item { + padding: 8px; + padding-top: 6px !important; + padding-bottom: 6px !important; + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + margin: 6px 0; + cursor: pointer; +} +@media screen and (min-width: 1200px) { + #aside-content .aside-list > .aside-list-item:hover { + -webkit-transform: scale(1.03); + -moz-transform: scale(1.03); + -o-transform: scale(1.03); + -ms-transform: scale(1.03); + transform: scale(1.03); + } + #aside-content .aside-list > .aside-list-item:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); + } +} +#aside-content .aside-list > .aside-list-item:hover .thumbnail > img { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 0 dashed var(--anzhiyu-background) !important; +} +#aside-content .aside-list > .aside-list-item .thumbnail { + border-radius: var(--anzhiyu-border-radius); + border: var(--style-border); +} +#aside-content .aside-list > .aside-list-item:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + -webkit-box-shadow: var(--anzhiyu-shadow-main); + box-shadow: var(--anzhiyu-shadow-main); +} +#aside-content .aside-list > .aside-list-item:hover a { + color: var(--anzhiyu-white) !important; +} +.card-widget.card-recent-post { + padding: 0.4rem 1rem !important; +} +#aside-content #card-toc .toc-content .toc-link.active { + border-radius: var(--anzhiyu-border-radius); +} +#aside-content #card-toc .toc-content { + overflow-y: auto; +} +#aside-content #card-toc span.toc-number { + display: none; +} +#aside-content #card-toc .toc-content .toc-link.active { + line-height: 1.2; + border-radius: 12px; + border-left-color: var(--anzhiyu-hovertext); + background-color: var(--anzhiyu-card-bg); + color: var(--anzhiyu-lighttext); + font-weight: 700; + font-size: 20px; +} +[data-theme="dark"].toc .toc-item.active .toc-link .toc-text { + color: var(--anzhiyu-white); +} +#aside-content #card-toc .toc-content .toc-item.active .toc-link { + opacity: 1; + -ms-filter: none; + filter: none; + border-radius: 8px; +} +#aside-content #card-toc .toc-content .toc-link { + line-height: 1.2; + padding: 8px; + border-left: 0 solid transparent; + border-radius: 12px; + color: var(--anzhiyu-secondtext); + cursor: default; +} +#aside-content #card-toc .toc-content .toc-link:not(.active) span { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + cursor: pointer; + filter: blur(1px); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#aside-content #card-toc:hover .toc-content .toc-link:not(.active) span { + filter: blur(0); + opacity: 1; + -ms-filter: none; + filter: none; +} +#aside-content #card-toc .toc-content .toc-link:not(.active) span:hover { + color: var(--anzhiyu-lighttext); +} +.site-data > a .headline, +.site-data > a .length-num { + color: var(--anzhiyu-white); +} +#sidebar-menus.open .site-data > a .headline, +#sidebar-menus.open .site-data > a .length-num { + color: var(--anzhiyu-fontcolor); +} +@media screen and (min-width: 900px) { + #aside-content .sticky_layout { + top: 60px; + } + .post #aside-content .sticky_layout { + top: 80px; + } +} +@media screen and (min-width: 900px) { + #aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, + #aside-content .card-categories ul.card-category-list > .card-category-list-item a { + padding: 3px 10px; + } +} +#aside-content .card-widget { + border-radius: 12px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#aside-content .card-widget { + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + background: var(--anzhiyu-card-bg); + border: var(--style-border); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#aside-content hr { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + position: relative; + margin: 1rem 0; + border: 1px dashed var(--anzhiyu-theme-op); +} +#aside-content hr:before { + content: none; +} +#article-container hr:before { + content: none; +} +@media screen and (max-width: 768px) { + #anMusic-page-meting .aplayer.aplayer-withlist .aplayer-list { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +#body-wrap.open { + -webkit-transition-property: -webkit-transform, border-radius; + -moz-transition-property: -moz-transform, border-radius; + -o-transition-property: -o-transform, border-radius; + -ms-transition-property: -ms-transform, border-radius; + transition-property: transform, border-radius; + -webkit-transition-duration: 0ms; + -moz-transition-duration: 0ms; + -o-transition-duration: 0ms; + -ms-transition-duration: 0ms; + transition-duration: 0ms; + -webkit-transform-origin: 0 46%; + -moz-transform-origin: 0 46%; + -o-transform-origin: 0 46%; + -ms-transform-origin: 0 46%; + transform-origin: 0 46%; + -webkit-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + -moz-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + -o-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + -ms-transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + transform: translate3d(300px, 0px, 0px) scale3d(0.86, 0.86, 1); + border-radius: 12px; + -webkit-transition: 0.3s ease-out; + -moz-transition: 0.3s ease-out; + -o-transition: 0.3s ease-out; + -ms-transition: 0.3s ease-out; + transition: 0.3s ease-out; + z-index: 2; +} +#body-wrap.open #menu-mask { + display: block; +} +#body-wrap.open #post-top-cover { + display: none; + overflow-y: overlay; + -webkit-transition: 0s; + -moz-transition: 0s; + -o-transition: 0s; + -ms-transition: 0s; + transition: 0s; + border-radius: 12px; +} +#body-wrap.open #anMusic-page-meting .aplayer.aplayer-withlist .aplayer-list { + display: none; +} +#vcomment { + font-size: 1.1em; +} +#vcomment .vbtn { + border: none; + background: var(--btn-bg); + color: var(--btn-color); +} +#vcomment .vbtn:hover { + background: var(--btn-hover-color); +} +#vcomment .vimg { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#vcomment .vimg:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#vcomment .vcards .vcard .vcontent.expand:before, +#vcomment .vcards .vcard .vcontent.expand:after { + z-index: 22; +} +#waline-wrap { + --waline-font-size: 1.1em; + --waline-theme-color: var(--anzhiyu-main); + --waline-active-color: #ff7242; +} +#waline-wrap .vuser { + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#waline-wrap .vuser:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#vcomment textarea { + background: url("/img/comment_bg.png") 100% 100% no-repeat; +} +#vcomment textarea:focus { + background-image: none; +} +.fireworks { + position: fixed; + top: 0; + left: 0; + z-index: 9999; + pointer-events: none; +} +.medium-zoom-image--opened { + z-index: 99999 !important; + margin: 0 !important; +} +.medium-zoom-overlay { + z-index: 99999 !important; +} +.mermaid-wrap { + margin: 0 0 20px; + text-align: center; +} +.mermaid-wrap > svg { + height: 100%; +} +.fb-comments iframe { + width: 100% !important; +} +.katex-wrap { + overflow: auto; +} +.katex-wrap::-webkit-scrollbar { + display: none; +} +mjx-container[display], +.has-jax { + overflow-x: auto; + overflow-y: hidden; + line-height: normal !important; +} +.aplayer { + color: #4c4948; +} +#article-container .aplayer { + margin: 0 0 20px; +} +#article-container .aplayer ol, +#article-container .aplayer ul { + margin: 0; + padding: 0; +} +#article-container .aplayer ol li, +#article-container .aplayer ul li { + margin: 0; + padding: 0 15px; +} +#article-container .aplayer ol li:before, +#article-container .aplayer ul li:before { + content: none; +} +.snackbar-css { + border-radius: 5px !important; +} +.bilibili_box { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + background: var(--card-bg); + border: var(--style-border); + border-radius: 12px !important; + overflow: hidden; + color: var(--font-color) !important; + text-decoration: none !important; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border-bottom: var(--style-border) !important; + padding: 0 !important; + height: 143px; +} +.bilibili_box:hover { + border-color: var(--anzhiyu-main) !important; + color: var(--anzhiyu-white) !important; +} +.bilibili_box:hover .bilibili_info .stat svg path { + fill: var(--anzhiyu-white) !important; +} +@media screen and (max-width: 768px) { + .bilibili_box { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +.bilibili_box .bilibili_cover { + width: 234px; + position: relative; +} +@media screen and (max-width: 768px) { + .bilibili_box .bilibili_cover { + width: 100%; + } +} +.bilibili_box .bilibili_cover img { + width: 100%; + filter: none; + margin: 0 !important; + border-radius: 0 !important; +} +.bilibili_box .bilibili_cover .play_icon { + position: absolute; + width: 45px; + height: 45px; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.bilibili_box .bilibili_cover span { + position: absolute; + bottom: 0px; + right: 5px; + color: var(--anzhiyu-white); +} +.bilibili_box .bilibili_info { + padding: 10px 10px 10px 18px; + line-height: 1; + width: calc(100% - 200px); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; +} +@media screen and (max-width: 768px) { + .bilibili_box .bilibili_info { + width: 100%; + padding-bottom: 25px; + line-height: 1.5; + } +} +.bilibili_box .bilibili_info .title { + font-size: 1.2rem; + font-weight: bold; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + line-height: 1.5; +} +.bilibili_box .bilibili_info .desc { + font-size: 15px; + margin: 2px 0 4px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +@media screen and (max-width: 768px) { + .bilibili_box .bilibili_info .desc { + white-space: normal; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + } +} +.bilibili_box .bilibili_info .stat { + font-size: 15px; +} +.bilibili_box .bilibili_info .stat svg { + margin-right: 3px; + font-size: 18px; + width: 1em; + height: 1em; +} +.bilibili_box .bilibili_info .stat svg path { + fill: var(--font-color); +} +.bilibili_box .bilibili_info .stat span { + margin-right: 10px; + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.bilibili_box .bilibili_info .owner { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + line-height: 1; + font-size: 15px; +} +.bilibili_box .bilibili_info .owner .tip { + color: #f69; + border: 1px solid; + padding: 3px 6px; + font-size: 12px; + border-radius: 5px; + margin: 0 10px 0 0; + background: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.bilibili_box .bilibili_info .owner img { + width: 22px; + height: 22px; + border-radius: 50% !important; + object-fit: cover; + margin: 0 5px 0 0 !important; +} +[data-theme='light'] .bilibili_box .bilibili_info .stat svg, +[data-theme='dark'] .bilibili_cover { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +[data-theme="dark"] div.btns { + filter: brightness(0.7); +} +[data-theme="dark"] div.btns a { + background: 0 0; +} +div.btns { + margin: 0 -8px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + overflow: visible; + line-height: 1.8; +} +div.btns b { + font-size: 0.875rem; +} +div.btns.wide > a { + padding-left: 32px; + padding-right: 32px; +} +div.btns.fill > a { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + -ms-box-flex: 1; + box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + width: auto; +} +div.btns.around { + -webkit-box-pack: distribute; + -moz-box-pack: distribute; + -o-box-pack: distribute; + -ms-flex-pack: distribute; + -webkit-justify-content: space-around; + justify-content: space-around; +} +div.btns.center { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +div.btns.grid2 > a { + width: calc(100% / 2 - 16px); +} +div.btns.grid3 > a { + width: calc(100% / 3 - 16px); +} +div.btns.grid4 > a { + width: calc(100% / 4 - 16px); +} +div.btns.grid5 > a { + width: calc(100% / 5 - 16px); +} +div.btns a { + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + margin: 8px; + margin-top: calc(1.25 * 16px + 32px); + min-width: 120px; + font-weight: bold; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 8px; + text-align: center; + background: #f6f6f6; + border-radius: 4px; +} +div.btns a > i { + background: #2196f3 !important; +} +div.btns a > i:first-child { + color: #fff; + background: #2196f3; +} +div.btns a b { + font-weight: bold; + line-height: 1.3; +} +div.btns a img { + margin: 0.4em auto !important; +} +div.btns a:not([href]) { + cursor: default; + color: inherit; +} +div.btns a[href]:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} +div.btns a[href]:hover > i:first-child { + background: var(--anzhiyu-main); +} +div.btns, +div.btns p, +div.btns a { + font-size: 0.8125rem; + color: #555; +} +@media screen and (max-width: 1200px) { + div.btns.grid2 > a { + width: calc(100% / 2 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid2 > a { + width: calc(100% / 2 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid2 > a { + width: calc(100% / 1 - 16px); + } +} +@media screen and (max-width: 1200px) { + div.btns.grid3 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid3 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid3 > a { + width: calc(100% / 1 - 16px); + } +} +@media screen and (max-width: 1200px) { + div.btns.grid4 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid4 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid4 > a { + width: calc(100% / 2 - 16px); + } +} +@media screen and (max-width: 1200px) { + div.btns.grid5 > a { + width: calc(100% / 4 - 16px); + } +} +@media screen and (max-width: 768px) { + div.btns.grid5 > a { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + div.btns.grid5 > a { + width: calc(100% / 2 - 16px); + } +} +div.btns a > img:first-child, +div.btns a > i:first-child { + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + height: 64px; + width: 64px; + -webkit-box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1); + margin: 16px 8px 4px 8px; + margin-top: calc(-1.25 * 16px - 32px); + border: 2px solid #fff; + background: #fff; + line-height: 60px; + font-size: 28px; +} +div.btns a > img:first-child.auto, +div.btns a > i:first-child.auto { + width: auto; +} +div.btns a p, +div.btns a b { + margin: 0.25em; + font-weight: normal; + line-height: 1.25; + word-wrap: break-word; +} +div.btns a[href]:hover, +div.btns a[href]:hover b { + color: #ff5722; +} +div.btns a[href]:hover > img:first-child, +div.btns a[href]:hover > i:first-child { + -webkit-transform: scale(1.1) translateY(-8px); + -moz-transform: scale(1.1) translateY(-8px); + -o-transform: scale(1.1) translateY(-8px); + -ms-transform: scale(1.1) translateY(-8px); + transform: scale(1.1) translateY(-8px); + -webkit-box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); +} +div.btns.circle a > img:first-child, +div.btns.circle a > i:first-child { + border-radius: 32px; +} +div.btns.rounded a > img:first-child, +div.btns.rounded a > i:first-child { + border-radius: 16px; +} +#article-container .btn-center { + margin: 0 0 20px; + text-align: center; +} +#article-container .btn-anzhiyu { + display: inline-block; + margin: 0 4px 6px; + padding: 0 15px; + background-color: var(--btn-anzhiyu-color, #2323ef); + color: #fff; + line-height: 2; + border-radius: 8px; +} +#article-container .btn-anzhiyu.blue { + --btn-anzhiyu-color: #428bca; +} +#article-container .btn-anzhiyu.pink { + --btn-anzhiyu-color: #ff69b4; +} +#article-container .btn-anzhiyu.red { + --btn-anzhiyu-color: #f00; +} +#article-container .btn-anzhiyu.purple { + --btn-anzhiyu-color: #6f42c1; +} +#article-container .btn-anzhiyu.orange { + --btn-anzhiyu-color: #ff8c00; +} +#article-container .btn-anzhiyu.green { + --btn-anzhiyu-color: #5cb85c; +} +#article-container .btn-anzhiyu:hover { + background-color: var(--btn-hover-color); +} +#article-container .btn-anzhiyu i + span { + margin-left: 6px; +} +#article-container .btn-anzhiyu:not(.block) + .btn-anzhiyu:not(.block) { + margin: 0 4px 20px; +} +#article-container .btn-anzhiyu.block { + display: block; + margin: 0 0 20px; + width: fit-content; + width: -moz-fit-content; +} +#article-container .btn-anzhiyu.block.center { + margin: 0 auto 20px; +} +#article-container .btn-anzhiyu.block.right { + margin: 0 0 20px auto; +} +#article-container .btn-anzhiyu.larger { + padding: 6px 15px; +} +#article-container .btn-anzhiyu:hover { + text-decoration: none; +} +#article-container .btn-anzhiyu.outline { + border: 1px solid transparent; + border-color: var(--btn-anzhiyu-color, #2323ef); + background-color: transparent; + color: var(--btn-anzhiyu-color, #2323ef); +} +#article-container .btn-anzhiyu.outline:hover { + background-color: var(--btn-anzhiyu-color, #2323ef); +} +#article-container .btn-anzhiyu.outline:hover { + color: #fff !important; +} +.checkbox { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.checkbox input { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + position: relative; + height: 16px; + width: 16px; + -webkit-transition: all 0.15s ease-out 0s; + -moz-transition: all 0.15s ease-out 0s; + -o-transition: all 0.15s ease-out 0s; + -ms-transition: all 0.15s ease-out 0s; + transition: all 0.15s ease-out 0s; + cursor: pointer; + display: inline-block; + outline: none; + border-radius: 2px; + -webkit-flex-shrink: 0; + flex-shrink: 0; + margin-right: 8px; + border: 2px solid #2196f3; + pointer-events: none; +} +.checkbox input[type="checkbox"]:before { + left: 1px; + top: 5px; + width: 0; + height: 2px; + -webkit-transition: all 0.2s ease-in; + -moz-transition: all 0.2s ease-in; + -o-transition: all 0.2s ease-in; + -ms-transition: all 0.2s ease-in; + transition: all 0.2s ease-in; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); +} +.checkbox input[type="checkbox"]:after { + right: 7px; + bottom: 3px; + width: 2px; + height: 0; + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; + -webkit-transform: rotate(40deg); + -moz-transform: rotate(40deg); + -o-transform: rotate(40deg); + -ms-transform: rotate(40deg); + transform: rotate(40deg); + -webkit-transform: rotate(40deg); + -moz-transform: rotate(40deg); + -ms-transform: rotate(40deg); + -o-transform: rotate(40deg); + -webkit-transition-delay: 0.25s; + -moz-transition-delay: 0.25s; + -o-transition-delay: 0.25s; + -ms-transition-delay: 0.25s; + transition-delay: 0.25s; +} +.checkbox input[type="checkbox"]:checked { + background: #2196f3; +} +.checkbox input[type="checkbox"]:checked:before { + left: 0; + top: 7px; + width: 6px; + height: 2px; +} +.checkbox input[type="checkbox"]:checked:after { + right: 3px; + bottom: 1px; + width: 2px; + height: 10px; +} +.checkbox.minus input[type="checkbox"]:before { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 1px; + top: 5px; + width: 0; + height: 2px; +} +.checkbox.minus input[type="checkbox"]:after { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 1px; + top: 5px; + width: 0; + height: 2px; +} +.checkbox.minus input[type="checkbox"]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.minus input[type="checkbox"]:checked:after { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.plus input[type="checkbox"]:before { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 1px; + top: 5px; + width: 0; + height: 2px; +} +.checkbox.plus input[type="checkbox"]:after { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + left: 5px; + top: 1px; + width: 2px; + height: 0; +} +.checkbox.plus input[type="checkbox"]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.plus input[type="checkbox"]:checked:after { + left: 5px; + top: 1px; + width: 2px; + height: 10px; +} +.checkbox.times input[type="checkbox"]:before { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + left: 3px; + top: 1px; + width: 0; + height: 2px; +} +.checkbox.times input[type="checkbox"]:after { + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -o-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); + right: 3px; + top: 1px; + width: 0; + height: 2px; +} +.checkbox.times input[type="checkbox"]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox.times input[type="checkbox"]:checked:after { + right: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.checkbox input[type="radio"] { + border-radius: 50%; +} +.checkbox input[type="radio"]:before { + content: ""; + display: block; + width: 8px; + height: 8px; + border-radius: 50%; + margin: 2px; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + -o-transition: all 0.25s ease-out; + -ms-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; +} +.checkbox input[type="radio"]:checked:before { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + background: var(--text-bg-hover); +} +.checkbox.red input { + border-color: #fe5f58; +} +.checkbox.red input[type="checkbox"]:checked { + background: #fe5f58; +} +.checkbox.red input[type="radio"]:checked:before { + background: #fe5f58; +} +.checkbox.green input { + border-color: #3dc550; +} +.checkbox.green input[type="checkbox"]:checked { + background: #3dc550; +} +.checkbox.green input[type="radio"]:checked:before { + background: #3dc550; +} +.checkbox.yellow input { + border-color: #ffbd2b; +} +.checkbox.yellow input[type="checkbox"]:checked { + background: #ffbd2b; +} +.checkbox.yellow input[type="radio"]:checked:before { + background: #ffbd2b; +} +.checkbox.cyan input { + border-color: #1bcdfc; +} +.checkbox.cyan input[type="checkbox"]:checked { + background: #1bcdfc; +} +.checkbox.cyan input[type="radio"]:checked:before { + background: #1bcdfc; +} +.checkbox.blue input { + border-color: #2196f3; +} +.checkbox.blue input[type="checkbox"]:checked { + background: #2196f3; +} +.checkbox.blue input[type="radio"]:checked:before { + background: #2196f3; +} +.checkbox p { + display: inline-block; + margin-top: 2px !important; + margin-bottom: 0 !important; +} +.checkbox input[type="checkbox"]:before, +.checkbox input[type="checkbox"]:after { + position: absolute; + content: ""; + background: #fff; +} +details[open]:not(.tk-admin-config-group) { + background: var(--anzhiyu-card-bg); +} +[data-theme="dark"] details.folding-tag { + background: transparent; +} +details.folding-tag { + display: block; + padding: 16px; + margin: 1em 0; + border-radius: 4px; + font-size: var(--global-font-size); + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + border: 1px solid #f6f6f6; +} +details.folding-tag summary { + cursor: pointer; + padding: 16px; + margin: -16px; + border-radius: 4px; + color: rgba(68,68,68,0.7); + font-size: 0.875rem !important; + font-weight: bold; + position: relative; + line-height: normal; +} +details.folding-tag summary > p, +details.folding-tag summary > h1, +details.folding-tag summary > h2, +details.folding-tag summary > h3, +details.folding-tag summary > h4, +details.folding-tag summary > h5, +details.folding-tag summary > h6 { + display: inline; + border-bottom: none !important; +} +details.folding-tag summary:hover { + color: #444; +} +details.folding-tag summary:hover:after { + position: absolute; + content: '+'; + text-align: center; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + right: 16px; +} +details.folding-tag >summary { + background: var(--anzhiyu-card-bg); +} +details.folding-tag[purple] { + border-color: #fae7fd; +} +details.folding-tag[purple] >summary { + background: #fae7fd; +} +details.folding-tag[blue] { + border-color: #e8f4fd; +} +details.folding-tag[blue] >summary { + background: #e8f4fd; +} +details.folding-tag[cyan] { + border-color: #e8fafe; +} +details.folding-tag[cyan] >summary { + background: #e8fafe; +} +details.folding-tag[green] { + border-color: #ebf9ed; +} +details.folding-tag[green] >summary { + background: #ebf9ed; +} +details.folding-tag[yellow] { + border-color: #fff8e9; +} +details.folding-tag[yellow] >summary { + background: #fff8e9; +} +details.folding-tag[orange] { + border-color: #fdf1e7; +} +details.folding-tag[orange] >summary { + background: #fdf1e7; +} +details.folding-tag[red] { + border-color: #feefee; +} +details.folding-tag[red] >summary { + background: #feefee; +} +details.folding-tag[open] { + border-color: rgba(68,68,68,0.2); +} +details.folding-tag[open] >summary { + border-bottom: 1px solid rgba(68,68,68,0.2); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +details.folding-tag[open][purple] { + border-color: rgba(208,23,238,0.3); +} +details.folding-tag[open][purple] >summary { + border-bottom-color: rgba(208,23,238,0.3); +} +details.folding-tag[open][blue] { + border-color: rgba(33,150,243,0.3); +} +details.folding-tag[open][blue] >summary { + border-bottom-color: rgba(33,150,243,0.3); +} +details.folding-tag[open][cyan] { + border-color: rgba(27,205,252,0.3); +} +details.folding-tag[open][cyan] >summary { + border-bottom-color: rgba(27,205,252,0.3); +} +details.folding-tag[open][green] { + border-color: rgba(61,197,80,0.3); +} +details.folding-tag[open][green] >summary { + border-bottom-color: rgba(61,197,80,0.3); +} +details.folding-tag[open][yellow] { + border-color: rgba(255,189,43,0.3); +} +details.folding-tag[open][yellow] >summary { + border-bottom-color: rgba(255,189,43,0.3); +} +details.folding-tag[open][orange] { + border-color: rgba(236,118,22,0.3); +} +details.folding-tag[open][orange] >summary { + border-bottom-color: rgba(236,118,22,0.3); +} +details.folding-tag[open][red] { + border-color: rgba(254,95,88,0.3); +} +details.folding-tag[open][red] >summary { + border-bottom-color: rgba(254,95,88,0.3); +} +details.folding-tag[open] >summary { + color: #444; + margin-bottom: 0; +} +details.folding-tag[open] >summary:hover:after { + content: '-'; +} +details.folding-tag[open] >div.content { + padding: 16px; + margin: -16px; + margin-top: 0; +} +details.folding-tag[open] >div.content p>a:hover { + text-decoration: underline; +} +details.folding-tag[open] >div.content > p:first-child, +details.folding-tag[open] >div.content > .tabs:first-child, +details.folding-tag[open] >div.content > ul:first-child, +details.folding-tag[open] >div.content > ol:first-child, +details.folding-tag[open] >div.content > .highlight:first-child, +details.folding-tag[open] >div.content > .note:first-child, +details.folding-tag[open] >div.content > details:first-child { + margin-top: 0; +} +details.folding-tag[open] >div.content > p:last-child, +details.folding-tag[open] >div.content > .tabs:last-child, +details.folding-tag[open] >div.content > ul:last-child, +details.folding-tag[open] >div.content > ol:last-child, +details.folding-tag[open] >div.content > .highlight:last-child, +details.folding-tag[open] >div.content > .note:last-child, +details.folding-tag[open] >div.content > details:last-child { + margin-bottom: 0; +} +[data-theme="dark"] details[open] > div.content { + padding: 16px; + margin: -16px; + margin-top: 0; + background: transparent; + color: rgba(255,255,255,0.6); +} +[data-theme="dark"] details > summary { + filter: brightness(1); + background: var(--anzhiyu-card-bg) !important; +} +#content-inner figure.gallery-group { + position: relative; + float: left; + overflow: hidden; + margin: 6px 4px; + width: calc(50% - 8px); + height: 250px; + border-radius: 8px; + background: #000; + -webkit-transform: translate3d(0, 0, 0); +} +@media screen and (max-width: 600px) { + #content-inner figure.gallery-group { + width: calc(100% - 8px); + } +} +#content-inner figure.gallery-group:hover img { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#content-inner figure.gallery-group:hover .gallery-group-name::after { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#content-inner figure.gallery-group:hover p { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#content-inner figure.gallery-group img { + position: relative; + margin: 0; + max-width: none; + width: calc(100% + 20px); + height: 250px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transition: all 0.3s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.3s, filter 375ms ease-in 0.2s; + -o-transition: all 0.3s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.3s, filter 375ms ease-in 0.2s; + transition: all 0.3s, filter 375ms ease-in 0.2s; + -webkit-transform: translate3d(-10px, 0, 0); + -moz-transform: translate3d(-10px, 0, 0); + -o-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + object-fit: cover; +} +#content-inner figure.gallery-group figcaption { + position: absolute; + top: 0; + left: 0; + padding: 30px; + width: 100%; + height: 100%; + color: #fff; + text-transform: uppercase; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; +} +#content-inner figure.gallery-group figcaption > a { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#content-inner figure.gallery-group p { + margin: 0; + padding: 8px 0 0; + letter-spacing: 1px; + font-size: 1.1em; + line-height: 1.5; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; + -moz-transition: opacity 0.35s, -moz-transform 0.35s; + -o-transition: opacity 0.35s, -o-transform 0.35s; + -ms-transition: opacity 0.35s, -ms-transform 0.35s; + transition: opacity 0.35s, transform 0.35s; + -webkit-transform: translate3d(100%, 0, 0); + -moz-transform: translate3d(100%, 0, 0); + -o-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + -webkit-line-clamp: 4; +} +#content-inner figure.gallery-group .gallery-group-name { + position: relative; + margin: 0; + padding: 8px 0; + font-weight: bold; + font-size: 1.65em; + line-height: 1.5; + -webkit-line-clamp: 2; +} +#content-inner figure.gallery-group .gallery-group-name:after { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: #fff; + content: ''; + -webkit-transition: -webkit-transform 0.35s; + -moz-transition: -moz-transform 0.35s; + -o-transition: -o-transform 0.35s; + -ms-transition: -ms-transform 0.35s; + transition: transform 0.35s; + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#content-inner .gallery-group-main { + overflow: auto; + padding: 0 0 16px; +} +#content-inner .gallery { + margin: 0 0 16px; + text-align: center; +} +#content-inner .gallery .fj-gallery { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#content-inner .gallery .fj-gallery .img-alt { + display: none; +} +#content-inner .gallery .fj-gallery.lazyload + button { + display: inline-block; +} +#content-inner .gallery .fj-gallery .gallery-data { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + visibility: hidden; +} +#content-inner .gallery button { + display: none; + margin-top: 25px; + padding: 10px; + width: 9em; + border-radius: 5px; + background: var(--btn-bg); + color: var(--btn-color); + font-weight: bold; + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#content-inner .gallery button > * { + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +#content-inner .gallery button i { + opacity: 1; + -ms-filter: none; + filter: none; + font-size: 1.1rem; +} +#content-inner .gallery button:hover { + background: var(--btn-hover-color); +} +#content-inner .gallery button:hover i { + margin-left: 2px; +} +blockquote.pullquote { + position: relative; + max-width: 45%; + font-size: 110%; +} +blockquote.pullquote.left { + float: left; + margin: 1em 0.5em 0 0; +} +blockquote.pullquote.right { + float: right; + margin: 1em 0 0 0.5em; +} +.video-container { + position: relative; + overflow: hidden; + margin-bottom: 16px; + padding-top: 56.25%; + height: 0; +} +.video-container iframe { + position: absolute; + top: 0; + left: 0; + margin-top: 0; + width: 100%; + height: 100%; +} +.hide-inline > .hide-button, +.hide-block > .hide-button { + display: inline-block; + padding: 5px 18px; + background: #425aef; + color: var(--white); +} +.hide-inline > .hide-button:hover, +.hide-block > .hide-button:hover { + background-color: var(--btn-hover-color); +} +.hide-inline > .hide-button.open, +.hide-block > .hide-button.open { + display: none; +} +.hide-inline > .hide-button.open + div, +.hide-block > .hide-button.open + div { + display: block; +} +.hide-inline > .hide-button.open + span, +.hide-block > .hide-button.open + span { + display: inline; +} +.hide-inline > .hide-content, +.hide-block > .hide-content { + display: none; +} +.hide { + display: none; +} +.hide-inline > .hide-button { + margin: 0 6px; +} +.hide-inline > .hide-content { + margin: 0 6px; +} +.hide-block { + margin: 0 0 16px; +} +.toggle { + margin-bottom: 20px; + border: 1px solid #f0f0f0; +} +.toggle > .toggle-button { + padding: 6px 15px; + background: #f0f0f0; + color: #1f2d3d; + cursor: pointer; +} +.toggle > .toggle-content { + margin: 30px 24px; +} +.md .img { + object-fit: contain; +} +img.inline { + display: inline !important; + vertical-align: middle; + -webkit-transform: translateY(-4px); + -moz-transform: translateY(-4px); + -o-transform: translateY(-4px); + -ms-transform: translateY(-4px); + transform: translateY(-4px); +} +p .img-alt { + display: inline-block; + width: 100%; +} +s, +del { + color: #8e8e8e; + text-decoration-color: #8e8e8e; +} +u { + color: #444; + text-decoration: none; + border-bottom: 1px solid #fe5f58; +} +emp { + color: #444; + border-bottom: 4px dotted #fe5f58; +} +wavy { + color: #444; + text-decoration-style: wavy; + text-decoration-line: underline; + text-decoration-color: #fe5f58; +} +psw { + color: transparent; + background: #a1a1a1; + border-radius: 2px; + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +psw:hover { + color: var(--anzhiyu-font); + background: none; +} +kbd { + display: inline-block; + color: #666; + font: bold 9pt arial; + text-decoration: none; + text-align: center; + padding: 2px 5px; + margin: 0 5px; + background: #eff0f2; + -moz-border-radius: 4px; + border-radius: 4px; + border-top: 1px solid #f5f5f5; + -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + -moz-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + -webkit-box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + box-shadow: inset 0 0 20px #e8e8e8, 0 1px 0 #c3c3c3, 0 1px 0 #c9c9c9, 0 1px 2px #333; + text-shadow: 0 1px 0 #f5f5f5; +} +#article-container .inline-img { + display: inline; + margin: 0 3px; + height: 1.1em; + vertical-align: text-bottom; +} +.introduction-card { + position: relative; +} +.introduction-card .img-alt { + display: none; +} +.introduction-card-bottom { + background-color: transparent; + color: inherit; + -webkit-transition: background-color 0.3s ease, color 0.3s ease; + -moz-transition: background-color 0.3s ease, color 0.3s ease; + -o-transition: background-color 0.3s ease, color 0.3s ease; + -ms-transition: background-color 0.3s ease, color 0.3s ease; + transition: background-color 0.3s ease, color 0.3s ease; +} +.introduction-card:active .introduction-card-bottom { + background-color: var(--anzhiyu-main); + color: #fff; +} +.introduction-card:active .introduction-card-bottom .left .info .subTitle { + color: #fff !important; +} +.introduction-card:active .introduction-card-bottom { + -webkit-animation: resetAnimation 3s 1s forwards; + -moz-animation: resetAnimation 3s 1s forwards; + -o-animation: resetAnimation 3s 1s forwards; + -ms-animation: resetAnimation 3s 1s forwards; + animation: resetAnimation 3s 1s forwards; +} +.introduction-card { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 60%; + margin: 0 auto; + border-radius: 15px; + -webkit-box-shadow: var(--anzhiyu-shadow-blackdeep); + box-shadow: var(--anzhiyu-shadow-blackdeep); + height: 520px; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + cursor: pointer; +} +@media screen and (max-width: 1200px) { + .introduction-card { + width: 80%; + } +} +@media screen and (max-width: 768px) { + .introduction-card { + width: 100%; + } +} +.introduction-card:active { + -webkit-transform: scale(0.97); + -moz-transform: scale(0.97); + -o-transform: scale(0.97); + -ms-transform: scale(0.97); + transform: scale(0.97); +} +.introduction-card .introduction-card-top { + height: 80%; + width: 100%; + overflow: hidden; + border-radius: 15px 15px 0 0; + position: relative; +} +.introduction-card .introduction-card-top .int-card-info { + position: absolute; + padding: 20px; +} +.introduction-card .introduction-card-top .int-card-info .int-tip { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + font-size: 0.6rem; + margin-bottom: 0.5rem; + color: var(--anzhiyu-white); +} +.introduction-card .introduction-card-top .int-card-info .int-cardTitle { + font-size: 36px; + color: var(--anzhiyu-white); + font-weight: 700; + line-height: 1.1; +} +.introduction-card .introduction-card-top img { + width: 100%; + height: 100%; + border-radius: 0px !important; + margin: 0 !important; +} +.introduction-card .introduction-card-bottom { + height: 20%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + width: 100%; + border-radius: 0 0 15px 15px; +} +.introduction-card .introduction-card-bottom .left { + width: 70%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.introduction-card .introduction-card-bottom .left .info { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.introduction-card .introduction-card-bottom .left .info .title { + font-weight: 600; + line-height: 26px; +} +.introduction-card .introduction-card-bottom .left .info .subTitle { + line-height: 14px; + font-size: 14px; + color: var(--anzhiyu-gray); + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +.introduction-card .introduction-card-bottom .left img { + width: 2.875rem; + height: 2.875rem; + margin: 0 20px !important; + border-radius: 12px !important; +} +.introduction-card .introduction-card-bottom .right { + width: 30%; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.introduction-card .introduction-card-bottom .right a { + width: 100%; + text-align: center; + background: #efeef2; + color: var(--anzhiyu-main) !important; + border-radius: 50px; + height: 35px; + line-height: 35px; + margin-right: 20px; +} +.introduction-card .introduction-card-bottom .right a:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} +@-moz-keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +@-webkit-keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +@-o-keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +@keyframes resetAnimation { + 0% { + background-color: var(--anzhiyu-main); + color: #fff; + } + 100% { + background-color: transparent; + color: inherit; + } +} +.hl-label { + padding: 2px 4px; + border-radius: 3px; + color: #fff; +} +.hl-label.default { + background-color: #2323ef; +} +.hl-label.blue { + background-color: #428bca; +} +.hl-label.pink { + background-color: #ff69b4; +} +.hl-label.red { + background-color: #f00; +} +.hl-label.purple { + background-color: #6f42c1; +} +.hl-label.orange { + background-color: #ff8c00; +} +.hl-label.green { + background-color: #5cb85c; +} +audio, +video { + border-radius: 4px; + max-width: 100%; +} +video { + z-index: 1; + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +video:hover { + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); +} +div.video { + line-height: 0; + text-align: center; +} +div.videos { + max-width: calc(100% + 2 * 4px); + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end; + margin: 1em -4px; +} +div.videos .video, +div.videos iframe { + width: 100%; + margin: 4px; +} +div.videos iframe { + border-radius: 4px; + width: 100%; + min-height: 300px; +} +div.videos.left { + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; +} +div.videos.center { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; +} +div.videos.right { + -webkit-box-pack: end; + -moz-box-pack: end; + -o-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} +div.videos.stretch { + -webkit-box-align: stretch; + -moz-box-align: stretch; + -o-box-align: stretch; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; +} +div.videos[col='1'] .video, +div.videos[col='1'] iframe { + width: 100%; +} +div.videos[col='2'] .video, +div.videos[col='2'] iframe { + width: calc(50% - 2 * 4px); +} +div.videos[col='3'] .video, +div.videos[col='3'] iframe { + width: calc(33.33% - 2 * 4px); +} +div.videos[col='4'] .video, +div.videos[col='4'] iframe { + width: calc(25% - 2 * 4px); +} +[data-theme="dark"] audio, +[data-theme="dark"] video { + filter: brightness(0.7); +} +.note { + position: relative; + margin: 0 0 20px; + padding: 15px; + border-radius: 3px; +} +.note.icon-padding { + padding-left: 3em; +} +.note > .note-icon { + position: absolute; + top: calc(50% - 0.5em); + left: 0.8em; + font-size: larger; +} +.note.blue { + color: #4c4948; +} +.note.blue.disabled { + background: #e3eef7 !important; +} +.note.blue:not(.disabled) { + border-left-color: #428bca !important; +} +.note.blue:not(.disabled).modern { + border-left-color: transparent !important; + color: #428bca; +} +.note.blue:not(.disabled):not(.simple) { + background: #e3eef7 !important; +} +.note.blue::before { + color: #428bca; +} +.note.blue > .note-icon { + color: #428bca; +} +.note.pink { + color: #4c4948; +} +.note.pink.disabled { + background: #ffe9f4 !important; +} +.note.pink:not(.disabled) { + border-left-color: #ff69b4 !important; +} +.note.pink:not(.disabled).modern { + border-left-color: transparent !important; + color: #ff69b4; +} +.note.pink:not(.disabled):not(.simple) { + background: #ffe9f4 !important; +} +.note.pink::before { + color: #ff69b4; +} +.note.pink > .note-icon { + color: #ff69b4; +} +.note.red { + color: #4c4948; +} +.note.red.disabled { + background: #ffd9d9 !important; +} +.note.red:not(.disabled) { + border-left-color: #f00 !important; +} +.note.red:not(.disabled).modern { + border-left-color: transparent !important; + color: #f00; +} +.note.red:not(.disabled):not(.simple) { + background: #ffd9d9 !important; +} +.note.red::before { + color: #f00; +} +.note.red > .note-icon { + color: #f00; +} +.note.purple { + color: #4c4948; +} +.note.purple.disabled { + background: #e9e3f6 !important; +} +.note.purple:not(.disabled) { + border-left-color: #6f42c1 !important; +} +.note.purple:not(.disabled).modern { + border-left-color: transparent !important; + color: #6f42c1; +} +.note.purple:not(.disabled):not(.simple) { + background: #e9e3f6 !important; +} +.note.purple::before { + color: #6f42c1; +} +.note.purple > .note-icon { + color: #6f42c1; +} +.note.orange { + color: #4c4948; +} +.note.orange.disabled { + background: #ffeed9 !important; +} +.note.orange:not(.disabled) { + border-left-color: #ff8c00 !important; +} +.note.orange:not(.disabled).modern { + border-left-color: transparent !important; + color: #ff8c00; +} +.note.orange:not(.disabled):not(.simple) { + background: #ffeed9 !important; +} +.note.orange::before { + color: #ff8c00; +} +.note.orange > .note-icon { + color: #ff8c00; +} +.note.green { + color: #4c4948; +} +.note.green.disabled { + background: #e7f4e7 !important; +} +.note.green:not(.disabled) { + border-left-color: #5cb85c !important; +} +.note.green:not(.disabled).modern { + border-left-color: transparent !important; + color: #5cb85c; +} +.note.green:not(.disabled):not(.simple) { + background: #e7f4e7 !important; +} +.note.green::before { + color: #5cb85c; +} +.note.green > .note-icon { + color: #5cb85c; +} +.note.simple { + border: 1px solid #eee; + border-left-width: 5px; + color: var(--font-color); +} +.note.modern { + border: 1px solid transparent !important; + background-color: #f5f5f5; + color: #4c4948; +} +.note.flat { + border: initial; + border-left: 5px solid #eee; + background-color: #f9f9f9; + color: #4c4948; +} +.note.flat a { + color: #4c4948 !important; +} +.note.flat a:hover { + color: var(--anzhiyu-white) !important; +} +.note h2, +.note h3, +.note h4, +.note h5, +.note h6 { + margin-top: 3px; + margin-bottom: 0; + padding-top: 0 !important; + border-bottom: initial; +} +.note p:first-child, +.note ul:first-child, +.note ol:first-child, +.note table:first-child, +.note pre:first-child, +.note blockquote:first-child, +.note img:first-child { + margin-top: 0 !important; +} +.note p:last-child, +.note ul:last-child, +.note ol:last-child, +.note table:last-child, +.note pre:last-child, +.note blockquote:last-child, +.note img:last-child { + margin-bottom: 0 !important; +} +.note:not(.no-icon) { + padding-left: 3em; +} +.note:not(.no-icon)::before { + position: absolute; + top: calc(50% - 0.95em); + left: 0.8em; + font-size: larger; +} +.note.default.flat { + background: #f7f7f7; +} +.note.default.modern { + border-color: #e1e1e1; + background: #f3f3f3; + color: #666; +} +.note.default.modern a:not(.btn) { + color: #666; +} +.note.default.modern a:not(.btn):hover { + color: #454545; +} +.note.default:not(.modern) { + border-left-color: #777; +} +.note.default:not(.modern) h2, +.note.default:not(.modern) h3, +.note.default:not(.modern) h4, +.note.default:not(.modern) h5, +.note.default:not(.modern) h6 { + color: #777; +} +.note.default:not(.no-icon)::before { + content: '\f0a9'; +} +.note.default:not(.no-icon):not(.modern)::before { + color: #777; +} +.note.primary.flat { + background: #f5f0fa; +} +.note.primary.modern { + border-color: #e1c2ff; + background: #f3daff; + color: #6f42c1; +} +.note.primary.modern a:not(.btn) { + color: #6f42c1; +} +.note.primary.modern a:not(.btn):hover { + color: #453298; +} +.note.primary:not(.modern) { + border-left-color: #6f42c1; +} +.note.primary:not(.modern) h2, +.note.primary:not(.modern) h3, +.note.primary:not(.modern) h4, +.note.primary:not(.modern) h5, +.note.primary:not(.modern) h6 { + color: #6f42c1; +} +.note.primary:not(.no-icon)::before { + content: '\f055'; +} +.note.primary:not(.no-icon):not(.modern)::before { + color: #6f42c1; +} +.note.info.flat { + background: #eef7fa; +} +.note.info.modern { + border-color: #b3e5ef; + background: #d9edf7; + color: #31708f; +} +.note.info.modern a:not(.btn) { + color: #31708f; +} +.note.info.modern a:not(.btn):hover { + color: #215761; +} +.note.info:not(.modern) { + border-left-color: #428bca; +} +.note.info:not(.modern) h2, +.note.info:not(.modern) h3, +.note.info:not(.modern) h4, +.note.info:not(.modern) h5, +.note.info:not(.modern) h6 { + color: #428bca; +} +.note.info:not(.no-icon)::before { + content: '\f05a'; +} +.note.info:not(.no-icon):not(.modern)::before { + color: #428bca; +} +.note.success.flat { + background: #eff8f0; +} +.note.success.modern { + border-color: #d0e6be; + background: #dff0d8; + color: #3c763d; +} +.note.success.modern a:not(.btn) { + color: #3c763d; +} +.note.success.modern a:not(.btn):hover { + color: #32562c; +} +.note.success:not(.modern) { + border-left-color: #5cb85c; +} +.note.success:not(.modern) h2, +.note.success:not(.modern) h3, +.note.success:not(.modern) h4, +.note.success:not(.modern) h5, +.note.success:not(.modern) h6 { + color: #5cb85c; +} +.note.success:not(.no-icon)::before { + content: '\f058'; +} +.note.success:not(.no-icon):not(.modern)::before { + color: #5cb85c; +} +.note.warning.flat { + background: #fdf8ea; +} +.note.warning.modern { + border-color: #fae4cd; + background: #fcf4e3; + color: #8a6d3b; +} +.note.warning.modern a:not(.btn) { + color: #8a6d3b; +} +.note.warning.modern a:not(.btn):hover { + color: #714f30; +} +.note.warning:not(.modern) { + border-left-color: #f0ad4e; +} +.note.warning:not(.modern) h2, +.note.warning:not(.modern) h3, +.note.warning:not(.modern) h4, +.note.warning:not(.modern) h5, +.note.warning:not(.modern) h6 { + color: #f0ad4e; +} +.note.warning:not(.no-icon)::before { + content: '\f06a'; +} +.note.warning:not(.no-icon):not(.modern)::before { + color: #f0ad4e; +} +.note.danger.flat { + background: #fcf1f2; +} +.note.danger.modern { + border-color: #ebcdd2; + background: #f2dfdf; + color: #a94442; +} +.note.danger.modern a:not(.btn) { + color: #a94442; +} +.note.danger.modern a:not(.btn):hover { + color: #84333f; +} +.note.danger:not(.modern) { + border-left-color: #d9534f; +} +.note.danger:not(.modern) h2, +.note.danger:not(.modern) h3, +.note.danger:not(.modern) h4, +.note.danger:not(.modern) h5, +.note.danger:not(.modern) h6 { + color: #d9534f; +} +.note.danger:not(.no-icon)::before { + content: '\f056'; +} +.note.danger:not(.no-icon):not(.modern)::before { + color: #d9534f; +} +.site-card-group { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start; + margin: -8px; + -webkit-box-align: stretch; + -moz-box-align: stretch; + -o-box-align: stretch; + -ms-flex-align: stretch; + -webkit-align-items: stretch; + align-items: stretch; +} +.site-card { + margin: 8px; + width: calc(100% / 4 - 16px); + display: block; + line-height: 1.4; + height: 100%; +} +@media screen and (min-width: 2048px) { + .site-card { + width: calc(100% / 5 - 16px); + } +} +@media screen and (max-width: 768px) { + .site-card { + width: calc(100% / 3 - 16px); + } +} +@media screen and (max-width: 500px) { + .site-card { + width: calc(100% / 2 - 16px); + } +} +.site-card .img { + width: 100%; + height: 120px; + overflow: hidden; + border-radius: 6px; + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); + background: #f6f6f6; +} +@media screen and (max-width: 500px) { + .site-card .img { + height: 100px; + } +} +.site-card .img img { + width: 100%; + height: 100%; + pointer-events: none; + -webkit-transition: -webkit-transform 2s ease; + -moz-transition: -moz-transform 2s ease; + -o-transition: -o-transform 2s ease; + -ms-transition: -ms-transform 2s ease; + transition: transform 2s ease; + object-fit: cover; +} +.site-card .info { + margin-top: 8px; +} +.site-card .info img { + width: 32px; + height: 32px; + pointer-events: none; + border-radius: 16px; + float: left; + margin-right: 8px; + margin-top: 2px; +} +.site-card .info span { + display: block; +} +.site-card .info .title { + font-weight: 600; + font-size: var(--global-font-size); + color: #444; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 1; + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +.site-card .info .desc { + font-size: var(--global-font-size); + word-wrap: break-word; + line-height: 1.2; + color: #888; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 2; +} +.site-card .img { + -webkit-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -o-transition: all 0.28s ease; +} +.site-card:hover .img { + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1); +} +.site-card:hover .info .title { + color: #ff5722; +} +p.p.subtitle { + font-weight: bold; + color: #44b299; + font-size: 1.25rem !important; + padding-top: 1.5rem; +} +p.p.subtitle:first-child { + padding-top: 1rem; +} +span.p.left, +p.p.left { + display: block; + text-align: left; +} +span.p.center, +p.p.center { + display: block; + text-align: center; +} +span.p.right, +p.p.right { + display: block; + text-align: right; +} +span.p.small, +p.p.small { + font-size: var(--global-font-size); +} +span.p.large, +p.p.large { + font-size: 2.5rem; + line-height: 1.4; +} +span.p.huge, +p.p.huge { + font-size: 4rem; + line-height: 1.4; +} +span.p.ultra, +p.p.ultra { + font-size: 6rem; + line-height: 1.4; +} +span.p.small, +p.p.small, +span.p.large, +p.p.large, +span.p.huge, +p.p.huge, +span.p.ultra, +p.p.ultra { + margin: 0; + padding: 0; +} +span.p.bold, +p.p.bold { + font-weight: bold; +} +span.p.h1, +p.p.h1, +span.p.h2, +p.p.h2 { + padding-bottom: 0.2rem; + font-weight: 500; +} +span.p.h1, +p.p.h1 { + font-size: 1.625rem; + color: var(--color-h1); + padding-top: 2em; +} +span.p.h2, +p.p.h2 { + font-size: 1.625rem; + color: var(--color-h2); + padding-top: 2em; + border-bottom: 1px solid rgba(68,68,68,0.1); +} +span.p.h3, +p.p.h3 { + font-size: 1.375rem; + color: var(--color-h3); + padding-top: 2em; +} +span.p.h4, +p.p.h4 { + font-size: 1.125rem; + color: var(--color-h4); + padding-top: 2em; +} +span.p.h5, +p.p.h5 { + font-size: 1rem; + color: var(--color-h5); + padding-top: 1.5em; +} +span.p.red, +p.p.red { + color: #e8453c; +} +span.p.yellow, +p.p.yellow { + color: #fcec60; +} +span.p.green, +p.p.green { + color: #3dc550; +} +span.p.cyan, +p.p.cyan { + color: #1bcdfc; +} +span.p.blue, +p.p.blue { + color: #2196f3; +} +span.p.purple, +p.p.purple { + color: #9c27b0; +} +span.p.gray, +p.p.gray { + color: #999; +} +#article-container .tabs { + position: relative; + margin: 0 0 20px; + border: 3px solid var(--anzhiyu-secondbg); + margin: 1rem 0 !important; + border-radius: 12px; + overflow: hidden; + -webkit-box-shadow: var(--anzhiyu-shadow-border); + box-shadow: var(--anzhiyu-shadow-border); + background: var(--anzhiyu-card-bg); + padding: 8px; +} +#article-container .tabs > .nav-tabs { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + margin: 0; + padding: 16px; + background: var(--anzhiyu-card-bg); +} +#article-container .tabs > .nav-tabs > .tab { + padding: 8px 18px; + background: var(--anzhiyu-secondbg); + color: var(--anzhiyu-fontcolor); + line-height: 1; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; + margin: 4px; + border: var(--style-border-always); + border-radius: 8px; +} +#article-container .tabs > .nav-tabs > .tab i { + width: 1.5em; +} +#article-container .tabs > .nav-tabs > .tab.active { + border: var(--style-border-hover-always); + background: var(--anzhiyu-background); + border-radius: 8px; + cursor: default; +} +#article-container .tabs > .nav-tabs > .tab:not(.active):hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border: var(--style-border-hover-always); +} +#article-container .tabs > .nav-tabs.no-default ~ .tab-to-top { + display: none; +} +#article-container .tabs > .tab-contents .tab-item-content { + position: relative; + display: none; + background: var(--anzhiyu-background); + border: var(--style-border-always); + padding: 1.2rem 1.2rem; + border-radius: 8px; +} +@media screen and (max-width: 768px) { + #article-container .tabs > .tab-contents .tab-item-content { + padding: 24px 14px; + } +} +#article-container .tabs > .tab-contents .tab-item-content.active { + display: block; +} +#article-container .tabs > .tab-to-top { + padding: 0 16px 10px 0; + width: 100%; + text-align: right; +} +#article-container .tabs > .tab-to-top button { + color: #99a9bf; +} +#article-container .tabs > .tab-to-top button:hover { + color: #425aef; +} +@-moz-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +#article-container .timeline { + margin: 0 0 20px 10px; + padding: 14px 20px 5px; + border-left: 2px solid var(--timeline-color, #425aef); +} +#article-container .timeline.blue { + --timeline-color: #428bca; + --timeline-bg: rgba(66,139,202, 0.2); +} +#article-container .timeline.pink { + --timeline-color: #ff69b4; + --timeline-bg: rgba(255,105,180, 0.2); +} +#article-container .timeline.red { + --timeline-color: #f00; + --timeline-bg: rgba(255,0,0, 0.2); +} +#article-container .timeline.purple { + --timeline-color: #6f42c1; + --timeline-bg: rgba(111,66,193, 0.2); +} +#article-container .timeline.orange { + --timeline-color: #ff8c00; + --timeline-bg: rgba(255,140,0, 0.2); +} +#article-container .timeline.green { + --timeline-color: #5cb85c; + --timeline-bg: rgba(92,184,92, 0.2); +} +#article-container .timeline .timeline-item { + margin: 0 0 15px; +} +#article-container .timeline .timeline-item:hover .item-circle:before { + border-color: var(--timeline-color, #425aef); +} +#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle > p { + font-weight: 600; + font-size: 1.2em; +} +#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before { + left: -28px; + border: 4px solid var(--timeline-color, #425aef); +} +#article-container .timeline .timeline-item.headline:hover .item-circle:before { + border-color: var(--pseudo-hover); +} +#article-container .timeline .timeline-item .timeline-item-title { + position: relative; +} +#article-container .timeline .timeline-item .item-circle:before { + position: absolute; + top: 50%; + left: -27px; + width: 6px; + height: 6px; + border: 3px solid var(--pseudo-hover); + border-radius: 50%; + background: var(--card-bg); + content: ''; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#article-container .timeline .timeline-item .item-circle > p { + margin: 0 0 8px; + font-weight: 500; +} +#article-container .timeline .timeline-item .timeline-item-content { + position: relative; + padding: 12px 15px; + border-radius: 0.5rem; + border: var(--style-border-always); + font-size: 0.93em; +} +#article-container .timeline .timeline-item .timeline-item-content > :last-child { + margin-bottom: 0; +} +#article-container .timeline + .timeline { + margin-top: -20px; +} +.tip { + padding: 6px 20px; + position: relative; + color: #fff; + margin-bottom: 20px; + background: -webkit-linear-gradient(0deg, #41363c, #494648); + background: -moz-linear-gradient(0deg, #41363c, #494648); + background: -o-linear-gradient(0deg, #41363c, #494648); + background: -ms-linear-gradient(0deg, #41363c, #494648); + background: linear-gradient(90deg, #41363c, #494648); + padding: 6px 20px; + border-radius: 10px; + -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); + -webkit-box-shadow: 0 3px 5px rgba(50,50,50,0.5); + box-shadow: 0 3px 5px rgba(50,50,50,0.5); +} +.tip p { + margin: 0 !important; + padding: 0.5rem 0; +} +.tip:before { + background: -webkit-linear-gradient(90deg, #41363c, #494648); + background: -moz-linear-gradient(90deg, #41363c, #494648); + background: -o-linear-gradient(90deg, #41363c, #494648); + background: -ms-linear-gradient(90deg, #41363c, #494648); + background: linear-gradient(0deg, #41363c, #494648); + text-shadow: 0 -1px #41363c; + border-radius: 50%; + color: #fff; + font-size: 12px; + position: absolute; + width: 24px; + height: 24px; + line-height: 24.5px; + left: -12px; + top: -12px; + -webkit-box-shadow: 0 0 0 2.5px #f7f8f9; + box-shadow: 0 0 0 2.5px #f7f8f9; + font-weight: 600; + font-family: "Font Awesome 6 Free"; + text-align: center; +} +.tip ol { + margin: 0; +} +.tip.info { + background: #20a0ff; + background: -webkit-linear-gradient(0deg, #20a0ff, #20b8ff); + background: -moz-linear-gradient(0deg, #20a0ff, #20b8ff); + background: -o-linear-gradient(0deg, #20a0ff, #20b8ff); + background: -ms-linear-gradient(0deg, #20a0ff, #20b8ff); + background: linear-gradient(90deg, #20a0ff, #20b8ff); + padding: 6px 20px; + border-radius: 10px; + -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); + -webkit-box-shadow: 0 3px 5px rgba(32,160,255,0.5); + box-shadow: 0 3px 5px rgba(32,160,255,0.5); +} +.tip.info:before { + background: #20a0ff; + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-gradient(linear, left bottom, left top, from(#0092ff), to(#20b8ff)); + background: -webkit-linear-gradient(90deg, #0092ff, #20b8ff); + background: -moz-linear-gradient(90deg, #0092ff, #20b8ff); + background: -o-linear-gradient(90deg, #0092ff, #20b8ff); + background: -ms-linear-gradient(90deg, #0092ff, #20b8ff); + background: linear-gradient(0deg, #0092ff, #20b8ff); + content: "\f05a"; + font-family: anzhiyufont; + text-shadow: 0 -1px #20a0ff; +} +.tip.success { + background: -webkit-linear-gradient(0deg, #61be33, #8fce44); + background: -moz-linear-gradient(0deg, #61be33, #8fce44); + background: -o-linear-gradient(0deg, #61be33, #8fce44); + background: -ms-linear-gradient(0deg, #61be33, #8fce44); + background: linear-gradient(90deg, #61be33, #8fce44); + text-shadow: 0 -1px #61be33; + -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); + -webkit-box-shadow: 0 3px 5px rgba(104,195,59,0.5); + box-shadow: 0 3px 5px rgba(104,195,59,0.5); +} +.tip.success:before { + background: -webkit-linear-gradient(90deg, #52bb1d, #95d34b); + background: -moz-linear-gradient(90deg, #52bb1d, #95d34b); + background: -o-linear-gradient(90deg, #52bb1d, #95d34b); + background: -ms-linear-gradient(90deg, #52bb1d, #95d34b); + background: linear-gradient(0deg, #52bb1d, #95d34b); + content: "\f058"; + text-shadow: 0 -1px #61be33; + font-family: anzhiyufont; +} +.tip.warning { + background: #ff953f; + background: -webkit-linear-gradient(0deg, #ff953f, #ffb449); + background: -moz-linear-gradient(0deg, #ff953f, #ffb449); + background: -o-linear-gradient(0deg, #ff953f, #ffb449); + background: -ms-linear-gradient(0deg, #ff953f, #ffb449); + background: linear-gradient(90deg, #ff953f, #ffb449); + text-shadow: 0 -1px #ff953f; + -webkit-box-shadow: 0 3px 5px rgba(255,154,73,0.5); + box-shadow: 0 3px 5px rgba(255,154,73,0.5); +} +.tip.warning::before { + background: -webkit-linear-gradient(90deg, #ff8f35, #ffc149); + background: -moz-linear-gradient(90deg, #ff8f35, #ffc149); + background: -o-linear-gradient(90deg, #ff8f35, #ffc149); + background: -ms-linear-gradient(90deg, #ff8f35, #ffc149); + background: linear-gradient(0deg, #ff8f35, #ffc149); + content: '\f06a'; + text-shadow: 0 -1px #ff953f; + font-family: anzhiyufont; +} +.tip.error { + background: #ff4949; + background: -webkit-linear-gradient(0deg, #ff4949, #ff7849); + background: -moz-linear-gradient(0deg, #ff4949, #ff7849); + background: -o-linear-gradient(0deg, #ff4949, #ff7849); + background: -ms-linear-gradient(0deg, #ff4949, #ff7849); + background: linear-gradient(90deg, #ff4949, #ff7849); + text-shadow: 0 -1px #ff4949; + -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); + box-shadow: 0 3px 5px rgba(255,73,73,0.5); +} +.tip.error:before { + background: -webkit-linear-gradient(90deg, #ff3838, #ff7849); + background: -moz-linear-gradient(90deg, #ff3838, #ff7849); + background: -o-linear-gradient(90deg, #ff3838, #ff7849); + background: -ms-linear-gradient(90deg, #ff3838, #ff7849); + background: linear-gradient(0deg, #ff3838, #ff7849); + content: $note-error-icon; + text-shadow: 0 -1px #ff4949; + font-family: anzhiyufont; +} +.tip.bolt { + background: -webkit-linear-gradient(80deg, #78ca33, #25822c); + background: -moz-linear-gradient(80deg, #78ca33, #25822c); + background: -o-linear-gradient(80deg, #78ca33, #25822c); + background: -ms-linear-gradient(80deg, #78ca33, #25822c); + background: linear-gradient(530deg, #78ca33, #25822c); + content: "\f058"; + text-shadow: 0 -1px #4cf706; +} +.tip.bolt:before { + background: -webkit-linear-gradient(326deg, #78ca33, #25822c); + background: -moz-linear-gradient(326deg, #78ca33, #25822c); + background: -o-linear-gradient(326deg, #78ca33, #25822c); + background: -ms-linear-gradient(326deg, #78ca33, #25822c); + background: linear-gradient(776deg, #78ca33, #25822c); + content: "\f058"; + text-shadow: 0 -1px #4cf706; + font-family: anzhiyufont; +} +.tip.ban { + background: -webkit-linear-gradient(0deg, #ff4949, #f03b49); + background: -moz-linear-gradient(0deg, #ff4949, #f03b49); + background: -o-linear-gradient(0deg, #ff4949, #f03b49); + background: -ms-linear-gradient(0deg, #ff4949, #f03b49); + background: linear-gradient(90deg, #ff4949, #f03b49); + text-shadow: 0 -1px #ff4949; + -webkit-box-shadow: 0 3px 5px rgba(255,73,73,0.5); + box-shadow: 0 3px 5px rgba(255,73,73,0.5); +} +.tip.ban:before { + background: -webkit-linear-gradient(90deg, #ff3838, #ff1022); + background: -moz-linear-gradient(90deg, #ff3838, #ff1022); + background: -o-linear-gradient(90deg, #ff3838, #ff1022); + background: -ms-linear-gradient(90deg, #ff3838, #ff1022); + background: linear-gradient(0deg, #ff3838, #ff1022); + content: "\f056"; + text-shadow: 0 -1px #ff4949; + font-family: anzhiyufont; +} +.tip.home { + background: #15e5ff; + background: -webkit-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: -moz-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: -o-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: -ms-linear-gradient(0deg, #0ec0ef, #80e0f7); + background: linear-gradient(90deg, #0ec0ef, #80e0f7); + text-shadow: 0 -1px #0ec0ef; + -webkit-box-shadow: 0 3px 5px #01caff; + -webkit-box-shadow: 0 3px 5px #01caff; + box-shadow: 0 3px 5px #01caff; +} +.tip.home:before { + background: -webkit-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: -moz-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: -o-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: -ms-linear-gradient(90deg, #0ec0ee, #0ec0ea); + background: linear-gradient(0deg, #0ec0ee, #0ec0ea); + content: "\e606"; + font-family: anzhiyufont; + text-shadow: 0 -1px #0ec0ea; +} +.tip.sync { + background: #00a9ff; + background: -webkit-linear-gradient(220deg, #47c0e0, #2dc342); + background: -moz-linear-gradient(220deg, #47c0e0, #2dc342); + background: -o-linear-gradient(220deg, #47c0e0, #2dc342); + background: -ms-linear-gradient(220deg, #47c0e0, #2dc342); + background: linear-gradient(230deg, #47c0e0, #2dc342); + text-shadow: 0 -1px #1bcdfc; + -webkit-box-shadow: 0 3px 5px #1bcdfc; + -webkit-box-shadow: 0 3px 5px #20b1ad; + box-shadow: 0 3px 5px #20b1ad; +} +.tip.sync:before { + background: -webkit-linear-gradient(180deg, #40c0e2, #3dc550); + background: -moz-linear-gradient(180deg, #40c0e2, #3dc550); + background: -o-linear-gradient(180deg, #40c0e2, #3dc550); + background: -ms-linear-gradient(180deg, #40c0e2, #3dc550); + background: linear-gradient(270deg, #40c0e2, #3dc550); + content: "\e66b"; + font-family: anzhiyufont; + text-shadow: 0 -1px #17cfff; +} +.tip.cogs { + background: -webkit-linear-gradient(220deg, #40c0e2, #5247e2); + background: -moz-linear-gradient(220deg, #40c0e2, #5247e2); + background: -o-linear-gradient(220deg, #40c0e2, #5247e2); + background: -ms-linear-gradient(220deg, #40c0e2, #5247e2); + background: linear-gradient(230deg, #40c0e2, #5247e2); + text-shadow: 0 -1px #8278fd; + -webkit-box-shadow: 0 3px 5px #4037a7; + -webkit-box-shadow: 1 3px 5px #5e52ec; + box-shadow: 1 3px 5px #5e52ec; +} +.tip.cogs:before { + background: -webkit-linear-gradient(110deg, #40c0e2, #5246e2); + background: -moz-linear-gradient(110deg, #40c0e2, #5246e2); + background: -o-linear-gradient(110deg, #40c0e2, #5246e2); + background: -ms-linear-gradient(110deg, #40c0e2, #5246e2); + background: linear-gradient(560deg, #40c0e2, #5246e2); + content: "\e638"; + font-family: anzhiyufont; + text-shadow: 0 -1px #098cf5; +} +.tip.key { + background: #25c33b; + background: -webkit-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: -moz-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: -o-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: -ms-linear-gradient(220deg, #90a4ae, #b7a7a7); + background: linear-gradient(230deg, #90a4ae, #b7a7a7); + text-shadow: 0 -1px #c1c0d4; + -webkit-box-shadow: 0 3px 5px #d3d2de; + -webkit-box-shadow: 1 3px 5px #d5d4de; + box-shadow: 1 3px 5px #d5d4de; +} +.tip.key:before { + background: -webkit-linear-gradient(110deg, #bccdd2, #cfced4); + background: -moz-linear-gradient(110deg, #bccdd2, #cfced4); + background: -o-linear-gradient(110deg, #bccdd2, #cfced4); + background: -ms-linear-gradient(110deg, #bccdd2, #cfced4); + background: linear-gradient(560deg, #bccdd2, #cfced4); + content: "\e673"; + font-family: anzhiyufont; + text-shadow: 0 -1px #a9b2b9; +} +.tip.bell { + background: -webkit-linear-gradient(220deg, #ffaa0d, #deb455); + background: -moz-linear-gradient(220deg, #ffaa0d, #deb455); + background: -o-linear-gradient(220deg, #ffaa0d, #deb455); + background: -ms-linear-gradient(220deg, #ffaa0d, #deb455); + background: linear-gradient(230deg, #ffaa0d, #deb455); + text-shadow: 0 -1px #c1c0d4; + -webkit-box-shadow: 1 3px 5px #d5d4de; + box-shadow: 1 3px 5px #d5d4de; +} +.tip.bell:before { + background: -webkit-linear-gradient(110deg, #f9ae07, #ffb615); + background: -moz-linear-gradient(110deg, #f9ae07, #ffb615); + background: -o-linear-gradient(110deg, #f9ae07, #ffb615); + background: -ms-linear-gradient(110deg, #f9ae07, #ffb615); + background: linear-gradient(560deg, #f9ae07, #ffb615); + content: "\e635"; + font-family: anzhiyufont; + text-shadow: 0 -1px #ffb81b; +} +[data-theme="dark"] .tip { + filter: brightness(0.7); +} +#article-container .tip a { + color: #e6eaed; +} +[data-theme='dark'] { + --global-bg: #0d0d0d; + --font-color: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.4); + --hr-before-color: rgba(255,255,255,0.7); + --search-bg: #121212; + --search-input-color: rgba(255,255,255,0.7); + --search-result-title: rgba(255,255,255,0.9); + --preloader-bg: #0d0d0d; + --preloader-color: rgba(255,255,255,0.7); + --tab-border-color: #2c2c2c; + --tab-botton-bg: #2c2c2c; + --tab-botton-color: rgba(255,255,255,0.7); + --tab-button-hover-bg: #383838; + --tab-button-active-bg: #121212; + --card-bg: #121212; + --sidebar-bg: #121212; + --btn-hover-color: #787878; + --btn-color: rgba(255,255,255,0.7); + --btn-bg: #1f1f1f; + --text-bg-hover: #383838; + --light-grey: rgba(255,255,255,0.7); + --dark-grey: rgba(255,255,255,0.2); + --white: rgba(255,255,255,0.9); + --text-highlight-color: rgba(255,255,255,0.9); + --blockquote-color: rgba(255,255,255,0.7); + --blockquote-bg: #2c2c2c; + --reward-pop: #2c2c2c; + --toc-link-color: rgba(255,255,255,0.6); + --scrollbar-color: #1f1f1f; + --timeline-bg: #1f1f1f; +} +[data-theme='dark'] #web_bg:before, +[data-theme='dark'] #footer:before, +[data-theme='dark'] #page-header:before { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.3); + content: ''; + z-index: 2; + pointer-events: none; +} +[data-theme='dark'] #footer { + background-color: var(--anzhiyu-card-bg); +} +[data-theme='dark'] #article-container pre > code { + background: #171717; +} +[data-theme='dark'] #article-container figure.highlight { + -webkit-box-shadow: none; + box-shadow: none; +} +[data-theme='dark'] #article-container .note code { + background: var(--anzhiyu-code-stress); +} +[data-theme='dark'] #article-container .aplayer { + filter: brightness(0.8); +} +[data-theme='dark'] #article-container kbd { + border-color: #696969; + background-color: #525252; + color: #e2f1ff; +} +[data-theme='dark'] #page-header.nav-fixed > #nav, +[data-theme='dark'] #page-header.not-top-img > #nav { + background: var(--anzhiyu-black); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0); +} +[data-theme='dark'] .post #page-header.nav-fixed > #nav { + background: var(--anzhiyu-card-bg); + -webkit-box-shadow: none; + box-shadow: none; +} +[data-theme='dark'] #post-comment .comment-switch { + background: #2c2c2c !important; +} +[data-theme='dark'] #post-comment .comment-switch #switch-btn { + filter: brightness(0.8); +} +[data-theme='dark'] .note { + filter: brightness(0.8); +} +[data-theme='dark'] .hide-button, +[data-theme='dark'] .btn-anzhiyu, +[data-theme='dark'] .hl-label, +[data-theme='dark'] .post-outdate-notice, +[data-theme='dark'] .error-img, +[data-theme='dark'] #article-container iframe, +[data-theme='dark'] .gist, +[data-theme='dark'] .ads-wrap { + filter: brightness(0.8); +} +[data-theme='dark'] img { + filter: blur(0) brightness(0.8); +} +[data-theme='dark'] #aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed rgba(255,255,255,0.1); +} +@media screen and (max-width: 768px) { + [data-theme='dark'] .post #aside-content { + background: var(--anzhiyu-card-bg); + } +} +[data-theme='dark'] #artitalk_main #lazy { + background: #121212; +} +[data-theme='dark'] #operare_artitalk .c2 { + background: #121212; +} +@media screen and (max-width: 900px) { + [data-theme='dark'] #card-toc { + background: #1f1f1f; + } +} +.read-mode { + --font-color: #4c4948; + --readmode-light-color: #fff; + --white: var(--anzhiyu-white); + --light-grey: #4c4948; + --gray: #d6dbdf; + --hr-border: #d6dbdf; + --hr-before-color: #b9c2c9; + --highlight-bg: #f7f7f7; + --exit-btn-bg: #c0c0c0; + --exit-btn-color: #fff; + --exit-btn-hover: #8d8d8d; + --pseudo-hover: none; +} +[data-theme='dark'] .read-mode { + --font-color: rgba(255,255,255,0.7); + --readmode-light-color: #0d0d0d; + --white: rgba(255,255,255,0.9); + --light-grey: rgba(255,255,255,0.7); + --gray: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.5); + --hr-before-color: rgba(255,255,255,0.7); + --highlight-bg: #171717; + --exit-btn-bg: #1f1f1f; + --exit-btn-color: rgba(255,255,255,0.9); + --exit-btn-hover: #525252; +} +.read-mode { + background: var(--readmode-light-color); +} +.read-mode .exit-readmode { + position: fixed; + top: 30px; + right: 30px; + z-index: 100; + width: 40px; + height: 40px; + border-radius: 8px; + background: var(--exit-btn-bg); + color: var(--exit-btn-color); + font-size: 16px; + -webkit-transition: background 0.3s; + -moz-transition: background 0.3s; + -o-transition: background 0.3s; + -ms-transition: background 0.3s; + transition: background 0.3s; +} +@media screen and (max-width: 768px) { + .read-mode .exit-readmode { + top: initial; + bottom: 30px; + } +} +.read-mode .exit-readmode:hover { + background: var(--exit-btn-hover); +} +.read-mode #aside-content { + display: none; +} +.read-mode #post-firstinfo .meta-firstline a.post-meta-original { + color: var(--white) !important; +} +.read-mode #post-firstinfo .meta-firstline a.post-meta-categories { + color: var(--white) !important; +} +.read-mode #post-firstinfo .meta-firstline a.article-meta__tags { + color: var(--white) !important; +} +.read-mode #post-info #post-meta { + color: var(--white) !important; +} +.read-mode #page-header.post-bg { + background-color: transparent; + background-image: none !important; +} +.read-mode #page-header.post-bg:before { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.read-mode #page-header.post-bg > #post-info { + text-align: center; +} +.read-mode #post { + margin: 0 auto; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode #post:hover { + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode > canvas { + display: none !important; +} +.read-mode .highlight-tools, +.read-mode #footer, +.read-mode #post > *:not(#post-info):not(.post-content), +.read-mode #nav, +.read-mode .post-outdate-notice, +.read-mode #web_bg, +.read-mode #rightside, +.read-mode .not-top-img { + display: none !important; +} +.read-mode #article-container a { + color: #99a9bf; +} +.read-mode #article-container pre, +.read-mode #article-container .highlight:not(.js-file-line-container) { + background: var(--highlight-bg) !important; +} +.read-mode #article-container pre *, +.read-mode #article-container .highlight:not(.js-file-line-container) * { + color: var(--font-color) !important; +} +.read-mode #article-container figure.highlight { + border-radius: 0 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.read-mode #article-container figure.highlight > :not(.highlight-tools) { + display: block !important; +} +.read-mode #article-container figure.highlight .line:before { + color: var(--font-color) !important; +} +.read-mode #article-container figure.highlight .hljs { + background: var(-highlight-bg) !important; +} +.read-mode #article-container h1, +.read-mode #article-container h2, +.read-mode #article-container h3, +.read-mode #article-container h4, +.read-mode #article-container h5, +.read-mode #article-container h6 { + padding: 0; +} +.read-mode #article-container h1:before, +.read-mode #article-container h2:before, +.read-mode #article-container h3:before, +.read-mode #article-container h4:before, +.read-mode #article-container h5:before, +.read-mode #article-container h6:before { + content: ''; +} +.read-mode #article-container h1:hover, +.read-mode #article-container h2:hover, +.read-mode #article-container h3:hover, +.read-mode #article-container h4:hover, +.read-mode #article-container h5:hover, +.read-mode #article-container h6:hover { + padding: 0; +} +.read-mode #article-container ul:hover:before, +.read-mode #article-container li:hover:before, +.read-mode #article-container ol:hover:before { + -webkit-transform: none !important; + -moz-transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + transform: none !important; +} +.read-mode #article-container ol:before, +.read-mode #article-container li:before { + background: transparent !important; + color: var(--font-color) !important; +} +.read-mode #article-container ul >li:before { + border-color: var(--gray) !important; +} +.read-mode #article-container .tabs { + border: 2px solid var(--tab-border-color); +} +.read-mode #article-container .tabs > .nav-tabs { + background: transparent; +} +.read-mode #article-container .tabs > .nav-tabs > .tab { + border-top: none !important; +} +.read-mode #article-container .tabs > .tab-contents .tab-item-content.active { + -webkit-animation: none; + -moz-animation: none; + -o-animation: none; + -ms-animation: none; + animation: none; +} +.read-mode #article-container code { + color: var(--font-color); +} +.read-mode #article-container blockquote { + border-color: var(--gray); + background-color: var(--readmode-light-color); +} +.read-mode #article-container kbd { + border: 1px solid var(--gray); + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + color: var(--font-color); +} +.read-mode #article-container .hide-toggle { + border: 1px solid var(--gray) !important; +} +.read-mode #article-container .hide-button, +.read-mode #article-container .btn-anzhiyu, +.read-mode #article-container .hl-label { + border: 1px solid var(--gray) !important; + background: var(--readmode-light-color) !important; + color: var(--font-color) !important; +} +.read-mode #article-container .note { + border: 2px solid var(--gray); + border-left-color: var(--gray) !important; + filter: none; + background-color: var(--readmode-light-color) !important; + color: var(--font-color); +} +.read-mode #article-container .note:before, +.read-mode #article-container .note .note-icon { + color: var(--font-color); +} +body .snackbar-container { + background: var(--anzhiyu-main) !important; + color: var(--anzhiyu-white) !important; + border-radius: 0 !important; + display: -webkit-box !important; + display: -moz-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: box !important; + display: flex !important; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + max-width: none !important; + min-width: 100% !important; + margin: 0 !important; + left: 0 !important; + height: 61px !important; + -webkit-transform: none !important; + -moz-transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + transform: none !important; + margin: 0 !important; + z-index: 99999; +} +body .snackbar-container p { + font-weight: 700 !important; + text-align: center !important; + font-size: 1.1rem !important; +} +body .snackbar-container .action { + color: var(--anzhiyu-white) !important; + padding: 4px 6px !important; + font-weight: 700; + border-radius: 8px; + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; + border: var(--style-border) !important; +} +body .snackbar-container .action:hover { + color: var(--anzhiyu-main) !important; + background: var(--anzhiyu-white); +} +body .snackbar-container::after { + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + background: var(--anzhiyu-white); + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + content: ""; + -webkit-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + -moz-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + -o-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + -ms-animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + animation: snackbar-progress var(--anzhiyu-snackbar-time) linear forwards; + pointer-events: none; + will-change: transform; + -webkit-transform-origin: left; + -moz-transform-origin: left; + -o-transform-origin: left; + -ms-transform-origin: left; + transform-origin: left; +} +@-moz-keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-webkit-keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@-o-keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +@keyframes snackbar-progress { + from { + -webkit-transform: scaleX(0); + -moz-transform: scaleX(0); + -o-transform: scaleX(0); + -ms-transform: scaleX(0); + transform: scaleX(0); + } + to { + -webkit-transform: scaleX(1); + -moz-transform: scaleX(1); + -o-transform: scaleX(1); + -ms-transform: scaleX(1); + transform: scaleX(1); + } +} +/* 处理单页背景 */ +body[data-type="album_detail"] #web_bg { + background: var(--anzhiyu-background); +} +body[data-type="album_detail"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: 0 0 !important; +} +body[data-type="album_detail"] #page .page-title { + display: none; +} + +/* 处理页面样式 */ +#album_detail .album-container-img { + display: flex; + align-items: center; + justify-content: space-around; + width: 100%; + height: 100%; + flex-wrap: wrap; + margin-bottom: 0.3rem; +} +#album_detail .album-container-img .album-content-noimg { + width: calc(100% / 2 - 5px); +} + +#album_detail .album-content-img img { + object-fit: cover; + max-width: 100%; + border-radius: 12px; + margin: 10px 0; +} + +#album_detail .album-content-img { + height: 100%; + max-height: 300px; + border-radius: 12px; + overflow: hidden; + display: flex; + position: relative; +} + +#album_detail .album-content .datacont { + order: 0; + font-size: 0.8rem; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + width: 100%; + line-height: 1.38; + border-radius: 12px; + margin-bottom: 0.5rem; + display: flex; + flex-direction: column; + text-align: justify; +} +#album_detail p { + margin: 0px; +} +#album_detail div.album-content { + display: flex; + flex-flow: wrap; + border-radius: 12px; + width: 100%; + height: 100%; +} +#album_detail .timeline ul li.album-item { + position: relative; + width: 32%; + border: var(--style-border-always); + border-radius: 12px; + padding: 1rem 1rem 0.5rem; + transition: all 0.3s ease 0s; + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + box-shadow: var(--anzhiyu-shadow-border); + margin-right: 2%; +} +#album_detail .timeline #waterfall.show { + opacity: 1; +} +#album_detail .timeline #waterfall { + opacity: 0; + transition: all 0.3s ease 0s; +} +#album_detail ul.list { + display: flex; + flex-flow: row wrap; + justify-content: space-between; +} +#album_detail { + margin-top: 1rem; + width: 100%; +} +#album_detail > section > ul > li.album-item { + margin-bottom: 1rem; +} + +#album-tips { + font-size: 14px; + display: flex; + justify-content: center; + margin-top: 1rem; +} + +#album_detail .timeline ul li.album-item hr { + display: flex; + position: relative; + margin: 8px 0px; + border: 1px dashed var(--anzhiyu-theme-op); + width: 100%; +} + +#album_detail .album-info { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + width: 95%; +} + +#album_detail > section > ul > li > div .album-info-time, +#album_detail > section > ul > li > div .album-info-address, +#album_detail > section > ul > li > div .album-info-from { + color: var(--anzhiyu-fontcolor); + font-size: 0.7rem; + background-color: var(--anzhiyu-gray-op); + padding: 0px 8px; + border-radius: 20px; + cursor: default; + display: flex; + align-items: center; + height: 35px; + line-height: 35px; + margin: 4px; + overflow: hidden; +} +#album_detail > section > ul > li > div .album-info-time time { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +#album_detail > section > ul > li > div .album-info-address, +#album_detail > section > ul > li > div .album-info-from { + margin-left: 4px; +} +#album_detail > section > ul > li > div .album-info-address span, +#album_detail > section > ul > li > div .album-info-from span { + margin-left: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +#album_detail .album-info .anzhiyufont.anzhiyu-icon-instagram { + margin-right: 8px; +} + +#album_detail .album-bottom { + display: flex; + justify-content: space-between; + width: 100%; + margin-top: 10px; +} + +#album_detail .album-bottom .album-reply { + cursor: pointer; + width: 5%; +} + +#album_detail .timeline ul li.album-item:hover { + border: var(--style-border-hover); +} + +#album_detail .album-content-link { + display: flex; + margin-left: 0.5rem; + font-size: 0.7rem; + align-items: center; + background-color: rgba(245, 108, 108, 0.13); + color: rgb(245, 108, 108); + padding: 0px 8px; + border-radius: 20px; +} +#album_detail .album-content-link i { + margin-right: 3px; +} +#album_detail .album-content-link:hover { + background-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +#album_detail .album-music { + width: 100%; + height: 90px; + margin: 0.5rem 0; + border-radius: 8px; + overflow: hidden; + border: var(--style-border-always); + background: var(--anzhiyu-secondbg); +} +#album_detail .aplayer { + margin: 0; +} + +#album_detail .aplayer.aplayer-withlrc .aplayer-pic { + height: 82px; + width: 82px; + margin: 4px; + border-radius: 4px; +} +.album-music .aplayer.aplayer-withlrc .aplayer-info { + padding: 5px 7px 0; +} +#album_detail .aplayer .aplayer-info .aplayer-music { + height: 23px; +} +#album_detail .aplayer .aplayer-info .aplayer-music .aplayer-title { + font-size: 0.8rem; + font-weight: 700; + margin: 0; + color: var(--anzhiyu-fontcolor); +} + +#album_detail .aplayer .aplayer-info .aplayer-controller { + align-items: center; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + padding: 0; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + background: var(--anzhiyu-gray); + height: 8px; + border-radius: 12px; + transition: 0.3s; + overflow: hidden; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + height: 100%; + border-radius: 12px; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 100%; + border-radius: 12px; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb { + display: none; +} +#album_detail .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} + +body[data-type="album_detail"] #page .author-content-item .card-content .banner-button-group .banner-button:hover { + color: var(--anzhiyu-white); + border-radius: 20px !important; +} + +/* 响应式 */ +@media screen and (max-width: 1200px) { + #album_detail .timeline ul li.album-item { + width: 49%; + margin-right: 1%; + } +} +@media screen and (max-width: 768px) { + #album_detail .timeline ul li.album-item { + width: 100%; + margin-right: 0px; + } +} +[data-theme="dark"] #album_detail .album-music .aplayer, +[data-theme="dark"] #album_detail .aplayer .aplayer-lrc:before, +[data-theme="dark"] #album_detail .aplayer .aplayer-lrc:after { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); +} +#album_detail .aplayer .aplayer-lrc p { + color: var(--anzhiyu-fontcolor); +} + +#album_detail .type-gallery { + overflow: hidden; + margin-top: 40px; +} + +#album_detail_gallery_load_more { + opacity: 0; +} + +#album_detail .tag-address { + display: flex; + position: absolute; + left: 8px; + top: 8px; + padding: 4px 6px; + border-radius: 8px; + background: var(--anzhiyu-black-op); + font-size: 12px; + color: var(--anzhiyu-white); + transition: 0.3s; + z-index: 1; + user-select: none; +} + +/* 处理单页背景 */ +body[data-type="album"] #web_bg { + background: var(--anzhiyu-background); +} +body[data-type="album"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: 0 0 !important; +} +body[data-type="album"] #page .page-title { + display: none; +} + +/* 变量定义 */ +:root { + --album-background-dark: #2d3548; + --album-text-light: rgba(255, 255, 255, 0.6); + --album-text-lighter: rgba(255, 255, 255, 0.9); + --album-spacing-s: 8px; + --album-spacing-m: 16px; + --album-spacing-l: 24px; + --album-spacing-xl: 32px; + --album-spacing-xxl: 64px; +} + +/* 卡片样式 */ +#album .card-album { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: var(--album-spacing-xxl) 0 0; +} +#album .card-album .album-content-nocover { + width: calc(100% / 4 - 40px); +} + +#album .card-album .card { + list-style: none; + position: relative; + display: flex; + width: calc(100% / 4 - 10px); + padding: 10px; +} +#album .card-album .card:hover { + cursor: pointer; +} + +#album .card_cover { + border-radius: var(--album-spacing-l); + filter: brightness(0.75) saturate(1.2) contrast(0.85); + transform-origin: center; + transform: scale(1) translateZ(0); + transition: filter 200ms linear, transform 200ms linear; + max-width: 100%; + overflow: hidden; + height: 550px; + width: 100%; + max-width: 100%; + object-fit: cover; + border-radius: var(--album-spacing-l); +} + +#album .card:hover .card_cover { + transform: scale(1.05) translateZ(0); + filter: brightness(0.9) saturate(1.2) contrast(1); +} + +#album .card-album:hover > .card:not(:hover) .card_cover { + filter: brightness(0.5) saturate(0.9) contrast(1.2) blur(20px); +} + +#album .card__content { + left: 0; + padding: var(--album-spacing-l); + position: absolute; + top: 0; +} + +#album .card__category { + color: var(--album-text-light); + font-size: 0.9rem; + margin-bottom: var(--album-spacing-s); + text-transform: uppercase; +} + +#album .card__heading { + color: var(--album-text-lighter); + font-size: 1.9rem; + text-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2); + line-height: 1.4; + word-spacing: 100vw; +} + +@media (min-width: 1024px) { + #album img.card_cover { + height: 600px; + } +} + +@media (max-width: 960px) { + #album .card-album .card { + width: calc(100% / 2 - 40px); + } +} + +@media (max-width: 540px) { + #album .card-album .card { + width: calc(100%); + } +} + +@media (max-width: 768px) { + #album .card-album { + margin-top: 10px; + } + #album .card-album .card { + padding: 10px 0px; + } +} + +h1#site-title { + font-size: 3em !important; +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 3em; + /* 可以定义图标大小 */ + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* 时间轴生肖icon */ +svg.icon { + width: 1em; + height: 1em; + /* width和height定义图标的默认宽度和高度*/ + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; +} + +.icon-zhongbiao::before { + color: #f7c768; +} + +/* 解决artitalk的图标问题 */ +#uploadSource > svg { + width: 1.19em; + height: 1.5em; +} + +/*top-img黑色透明玻璃效果移除,不建议加,除非你执着于完全一图流或者背景图对比色明显 */ +/* #page-header:not(.not-top-img):before { + background-color: transparent !important; +} */ + +/* 文章页面正文背景 */ +div#post { + background: rgba(255, 255, 255, 0.9); +} +#recent-posts > .recent-post-item:not(:first-child):active { + transform: scale(0.97); +} +/* 分页页面 */ +div#page { + background: rgba(255, 255, 255, 0.9); +} + +/* 归档页面 */ +div#archive { + background: rgba(255, 255, 255, 0.9); +} + +/* 标签页面 */ +div#tag { + background: rgba(255, 255, 255, 0.9); +} + +/* 分类页面 */ +div#category { + background: rgba(255, 255, 255, 0.9); +} + +/*夜间模式伪类遮罩层透明*/ +[data-theme="dark"] #recent-posts > .recent-post-item { + background: #121212; +} + +[data-theme="dark"] .card-widget { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#post { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#tag { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#archive { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#page { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#category { + background: var(--anzhiyu-card-bg); +} + +[data-theme="dark"] div#category { + background: transparent !important; +} + +/* md网站下划线 */ +#article-container a:hover { + text-decoration: none !important; +} + +#article-container #hpp_talk p img { + display: inline; +} + +/* 宽屏适配 */ +.page .layout, +.post .layout { + max-width: 1400px; +} + +.card-widget.card-clock { + font-size: 14px; +} + +#article-container + a:not([data-fancybox="gallery"]):not(.headerlink):not(.cf-friends-link):not(.tag-Link):not(.btn-anzhiyu):not( + .no-text-decoration + ) { + font-weight: 500; + border-bottom: solid 2px var(--anzhiyu-lighttext); + color: var(--anzhiyu-fontcolor); + padding: 0 0.2em; + text-decoration: none; + font-family: auto; +} +#article-container + a:not([data-fancybox="gallery"]):not(.headerlink):not(.cf-friends-link):not(.btn-anzhiyu):not( + .no-text-decoration + ):hover { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + box-shadow: var(--anzhiyu-shadow-lightblack); + border-radius: 0.25em; + text-decoration: none; +} + +html.hide-aside .layout > div:first-child { + width: 100%; +} + +/* 动画wowjs兼容调整 */ +.animate__animated { + -webkit-animation-fill-mode: backwards !important; + animation-fill-mode: backwards !important; +} + +/* 文章hover边框 */ +#recent-posts .recent-post-item:hover { + border: var(--style-border-hover); +} +#recent-posts .recent-post-item:hover .recent-post-info .article-title { + color: var(--anzhiyu-theme); +} +#recent-posts .recent-post-item { + height: fit-content; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + cursor: pointer; + border: var(--style-border); + box-shadow: var(--anzhiyu-shadow-border); + user-select: none; +} +/* 移动端容器padding */ +@media screen and (max-width: 768px) { + #body-wrap .layout #page { + padding: 20px 15px !important; + } +} +/* 首页文章宽度 */ +@media screen and (max-width: 1200px) { + .layout > div:first-child { + width: 100% !important; + } +} + +[data-theme="dark"] #footer:before { + content: none; +} + +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + border-radius: 12px 12px 0 0; + } +} + +.banners-title { + animation: slide-in 0.6s 0.3s backwards; +} +#algolia-search .search-dialog { + animation: slide-in 0.6s ease 0s 1 normal none running; +} + +@media screen and (min-width: 1200px) { + #page > div:not(.author-content-item) { + animation: slide-in 0.6s 0.2s backwards; + } +} + +@media screen and (min-width: 1200px) { + .author-content-item { + animation: slide-in 0.6s 0s backwards; + } +} + +/* 元素透明度改变 */ +@keyframes slide-in-op { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +#aside-content .card-widget#card-wechat { + background: #57bd6a; + display: flex; + justify-content: center; + align-content: center; + padding: 0; + cursor: pointer; + border: none; + height: 110px; +} +[data-theme="dark"] #aside-content .card-widget#card-wechat { + background-color: #121121; + border: var(--style-border); +} + +#flip-wrapper { + -webkit-perspective: 1000; + perspective: 1000; +} + +#flip-wrapper { + position: relative; + width: 235px; + height: 110px; + z-index: 1; +} +#flip-content { + width: 100%; + height: 100%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + transition: cubic-bezier(0, 0, 0, 1.29) 0.3s; +} +#aside-content #flip-wrapper #flip-content .face { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background-size: 100%; +} + +#aside-content #flip-wrapper #flip-content .back.face { + display: block; + -webkit-transform: rotateY(180deg); + transform: rotateY(180deg); + box-sizing: border-box; + background-size: 100%; +} +#flip-wrapper:hover #flip-content { + -webkit-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +/* 分类目录条、标签目录条 */ +#catalog-bar { + border-radius: var(--anzhiyu-border-radius); + display: flex; + border: var(--anzhiyu-border-radius); + margin-bottom: 1rem; + justify-content: flex-start; + align-items: center; +} + +#catalog-bar:hover { + border-color: var(--anzhiyu-theme); +} + +#catalog-bar i { + line-height: inherit; +} + +#catalog-list { + /* 分类/标签较少时,可以选择不设置 width,居中显示 catalog-list-item */ + display: flex; + white-space: nowrap; + overflow-x: scroll; +} + +#catalog-list::-webkit-scrollbar { + display: none; +} + +.catalog-list-item a { + margin-right: 0.3rem; + font-weight: bold; + color: var(--font-color); + transition: all 0.3s ease-in-out; + display: flex; + align-items: center; + padding: 0.1rem 0.5rem; + border-radius: 8px; + height: 30px; + line-height: 30px; +} +.catalog-list-item { + display: flex; + align-items: center; +} + +.catalog-list-item.selected a { + background: var(--anzhiyu-lighttext); + color: var(--anzhiyu-white); +} + +a.catalog-more { + min-width: fit-content; + font-weight: bold; + color: var(--anzhiyu-fontcolor); + margin-left: 16px; +} + +a.catalog-more:hover { + color: var(--anzhiyu-theme); +} + +#categoryBar { + width: 100%; + display: flex; +} + +#category-bar { + padding: 0.5rem 10px; + background: var(--anzhiyu-card-bg); + display: flex; + white-space: nowrap; + overflow: hidden; + border: var(--style-border); + width: 100%; + height: 50px; + border-radius: 12px; + transition: all 0.3s ease 0s; + animation: slide-in 0.6s 0.3s backwards; +} + +.category-bar-next { + margin-left: 16px; + cursor: pointer; + display: flex; +} + +.category-bar-next:hover { + color: var(--anzhiyu-lighttext); +} + +#category-bar #catalog-bar { + margin-bottom: 0; + overflow-y: hidden; + margin: -0.2rem 0; +} + +#category-bar.category-bar:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} + +#category #category-bar { + padding: 0; + border: none; +} + +#category a.catalog-list-item.select a { + display: none; +} + +#category #catalog-list .catalog-list-item:first-child { + margin-left: 5px; +} + +.catalog-list-item:hover a { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +.catalog-list-item.select a { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + border-radius: 8px; +} + +.category-bar-more { + margin-left: 1rem; + font-weight: bold; +} + +[data-theme="dark"] #category-bar.category-bar { + background: var(--anzhiyu-background); +} + +@media screen and (max-width: 768px) { + #catalog-bar i { + margin-right: 5px; + } + #categoryBar { + margin-bottom: 0; + position: -webkit-sticky; + position: sticky; + top: 60px; + z-index: 2; + align-items: center; + margin-top: 0; + } + #category-bar.category-bar { + width: 100%; + } + #category-bar.category-bar { + background: var(--anzhiyu-background); + } + [data-theme="dark"] #category-bar.category-bar { + background: var(--anzhiyu-black); + } + #category-bar.category-bar:hover { + border: none; + box-shadow: none; + } + #category-bar { + border: none; + border-radius: 0px; + padding: 0.5rem 20px; + } +} + +/*和风天气 */ +#he-plugin-simple { + z-index: 92; + transition: 0.3s; + position: fixed !important; +} + +#he-plugin-simple.shown { + opacity: 0.5; + pointer-events: unset; +} + +#he-plugin-simple .sticker-important { + color: var(--anzhiyu-white) !important; +} + +.s-sticker div[data-v-41ba7e2c]:not(:first-child):not(:last-child) { + padding: 0 0.07em !important; +} + +body:has(#sidebar-menus.open) #he-plugin-simple { + z-index: 104; + left: 95px !important; + opacity: 1; + display: block; + transition: 0.3s; +} + +div.s-sticker { + background-color: transparent !important; +} +.s-sticker div { + color: var(--font-color) !important; + font-weight: bold; +} +body:has(.post-bg.nav-fixed) #he-plugin-simple .s-sticker div { + color: var(--font-color) !important; +} +body:has(.post-bg) #he-plugin-simple .s-sticker div { + color: var(--anzhiyu-white) !important; +} +[data-theme="dark"] body:has(.post-bg) #he-plugin-simple .s-sticker div { + color: var(--font-color) !important; +} + +#weather-view-he { + height: 285px !important; + padding: 10px !important; + border-radius: 10px !important; + background-color: var(--anzhiyu-card-bg) !important; + box-shadow: rgba(0, 0, 0, 0.1) 0 0 20px; + margin-top: 20px !important; + transform: 0.3s; + opacity: 1; +} +.s-sticker ~ [data-v-41ba7e2c] { + opacity: 0; +} +[data-v-41ba7e2c]:has([data-v-db6ccf64][data-v-41ba7e2c]) { + opacity: 1; +} +[data-v-db6ccf64][data-v-41ba7e2c] { + top: 38px !important; +} +.wv-lt-location, +.wv-lt-refresh { + display: inline-block; +} +.wv-lt-location a { + padding: 0 5px; + border-radius: 3px; + color: var(--anzhiyu-blue) !important; + background-color: var(--anzhiyu-blue-tint); + text-decoration: none !important; +} +.wv-lt-col-5 { + text-align: right; +} +.wv-lt-refresh a { + font-size: 0 !important; +} +.wv-lt-refresh a::after { + content: "\5b89\77e5\9c7c\548c\98ce"; + font-size: small !important; +} +.vw-f-cell a, +.wv-n-h-now-rain-text, +.wv-n-h-now-tmp span, +.wv-n-h-now-txt span, +.wv-n-h-now-txt-t { + color: var(--anzhiyu-fontcolor) !important; +} +.wv-f-table div .vw-f-cell:nth-child(1) a { + color: #9b9b9b !important; +} +.wv-top-backdrop { + height: 285px !important; + padding-top: 50px !important; +} +.wv-top-backdrop::after { + content: "\8BF7\4F7F\7528\952E\76D8\2191\2193\9009\62E9\FF0C\56DE\8F66\9009\5B9A" !important; + padding-left: 5%; +} +.wv-top-button, +.wv-top-select { + height: 36px !important; + border: none !important; + border-radius: 5px !important; + cursor: pointer; + transition: 0.25s; +} +.wv-top-select { + padding-left: 10px !important; +} +.wv-top-button { + background-color: var(--anzhiyu-blue) !important; + color: #fff !important; +} + +.wv-top-button:hover { + background-color: var(--anzhiyu-blue-hover) !important; +} +.wv-top-button:active { + background-color: var(--anzhiyu-blue-hover) !important; +} + +@media screen and (max-width: 1400px) { + #he-plugin-simple { + display: none; + } +} + +@media screen and (min-width: 1400px) and (max-width: 1690px) { + #he-plugin-simple { + left: 262px !important; + } +} + +#article-container ol, +#article-container ul { + margin-top: 0.4rem; + padding: 0px 0px 0px 0.8rem; + list-style: none; + counter-reset: li 0; +} +#article-container code { + padding: 0.2rem 0.4rem; + border-radius: 4px; + margin: 0 4px; + line-height: 2; + box-shadow: var(--anzhiyu-shadow-border); +} +#article-container.post-content li::marker { + content: none; +} +#article-container ol li:not(.tab), +#article-container ul li:not(.tab) { + position: relative; + margin: 0.2rem 0px; +} +#article-container ul > li:not(.tab) { + padding: 0.2em 0.2em 0.2em 1.4em; +} +#article-container ul > li:not(.tab):before { + border: 0.21em solid var(--anzhiyu-lighttext); + background: var(--anzhiyu-lighttext); +} +#article-container ul > li:not(.tab)::before { + top: 0.78em; + width: 0.42em; + height: 0.42em; + border-radius: 0.42em; + content: ""; + line-height: 0.42em; +} + +#article-container ol li::before, +#article-container ul li::before { + position: absolute; + top: 0px; + left: 0px; + background: var(--anzhiyu-main); + color: rgb(255, 255, 255); + transition: all 0.3s ease-out 0s; +} +#article-container ol > li::before { + margin-top: 0.65em; + width: 1.45em; + height: 1.45em; + border-radius: 0.725em; + content: counter(li); + counter-increment: li 1; + text-align: center; + font-size: 0.85em; + line-height: 1.45em; +} +#article-container ol[start] { + counter-reset: unset; +} +#article-container ol li:not(.tab), +#article-container ul li:not(.tab) { + position: relative; + margin: 0.2rem 0px; +} +#article-container ol > li:not(.tab) { + padding: 0.2em 0.2em 0.2em 1.8em; +} + +/* 代码框主题 */ +#article-container figure.highlight { + border-radius: 10px; +} +#post-comment blockquote { + background: var(--anzhiyu-secondbg); + border: var(--style-border); + box-shadow: none; + margin: 0px 0px 0.5rem; + font-size: 12px; + color: var(--anzhiyu-secondtext); + border-radius: 8px; +} + +details.folding-tag[open] { + border-radius: 15px !important; + border-color: var(--anzhiyu-main) !important; + border: 1px solid var(--anzhiyu-main) !important; +} + +li details.folding-tag { + border-radius: 8px; +} + +li details.folding-tag summary { + border-radius: 8px; +} + +details.folding-tag { + transition: border 0s ease !important; + border: none !important; +} + +details.folding-tag[open] > summary { + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-main) !important; + border: 1px solid var(--anzhiyu-main) !important; + border-top: none !important; + border-left: none !important; + border-right: none !important; + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} +details.folding-tag > summary { + border: var(--style-border) !important; + background: var(--anzhiyu-card-bg); + border-radius: 14px !important; + box-shadow: var(--anzhiyu-shadow-border); + color: var(--font-color) !important; + user-select: none; +} +details.folding-tag > summary::marker { + color: var(--anzhiyu-main); + font-size: 16px; +} +details.folding-tag > summary::before { + content: " "; + margin-right: 2px; +} +details.folding-tag[open] > div.content { + border-radius: 0 0 16px 16px; +} +details.folding-tag summary:hover::marker { + color: var(--anzhiyu-white); +} +details.folding-tag[open] > summary::marker { + color: var(--anzhiyu-white); +} +details.folding-tag summary:hover { + cursor: pointer; + background: var(--anzhiyu-main) !important; + color: var(--anzhiyu-white) !important; + transition: 0.3s; + box-shadow: var(--anzhiyu-shadow-main); +} +details .content > *:nth-child(1) { + margin-top: 0 !important; +} + +.flink details.folding-tag[open] > div.content { + padding: 20px; + margin: 0px; + margin-top: 0; +} + +.comment-barrage { + position: fixed; + bottom: 0; + right: 60px; + padding: 0 0 20px 10px; + z-index: 100; + display: flex; + flex-direction: column; + justify-content: end; + align-items: flex-end; + z-index: 999; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + .comment-barrage { + display: none !important; + } +} +.comment-barrage-item { + min-width: 300px; + max-width: 300px; + width: fit-content; + min-height: 80px; + max-height: 150px; + margin: 4px; + padding: 8px 14px; + background: var(--anzhiyu-maskbgdeep); + border-radius: 8px; + color: var(--anzhiyu-fontcolor); + animation: barrageIn 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); + transition: 0.3s; + display: flex; + flex-direction: column; + border: var(--style-border); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); + position: fixed; + box-shadow: var(--anzhiyu-shadow-border); +} +.comment-barrage-item:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} +.comment-barrage-item.out { + opacity: 0; + animation: barrageOut 0.6s cubic-bezier(0.42, 0, 0.3, 1.11); +} +.comment-barrage-item a.barrageContent:hover { + color: var(--anzhiyu-main); +} +.comment-barrage-item.hovered { + opacity: 0; +} +.comment-barrage-item .comment-barrage-close { + color: var(--anzhiyu-secondtext); + cursor: pointer; + line-height: 1; + padding: 4px; +} +.comment-barrage-item .comment-barrage-close:hover { + color: var(--anzhiyu-main); +} +.comment-barrage-item pre { + display: none; +} +.comment-barrage-item p img:not(.tk-owo-emotion) { + display: none; +} + +.comment-barrage-item .barrageHead { + height: 30px; + padding: 0; + line-height: 30px; + font-size: 12px; + border-bottom: var(--style-border); + display: flex; + justify-content: space-between; + align-items: center; + font-weight: 700; + padding-bottom: 6px; +} +.comment-barrage-item .barrageHead .barrageTitle { + color: var(--anzhiyu-card-bg); + margin-right: 8px; + background: var(--anzhiyu-fontcolor); + line-height: 1; + padding: 4px; + border-radius: 4px; +} +.comment-barrage-item .barrageHead .barrageTitle.barrageBloggerTitle { + background: var(--anzhiyu-orange); +} +.comment-barrage-item .barrageAvatar { + width: 16px; + height: 16px; + margin: 0; + margin-left: auto; + margin-right: 8px; + border-radius: 50%; + background: var(--anzhiyu-secondbg); +} +.comment-barrage-item .barrageContent { + font-size: 14px !important; + font-weight: 400 !important; + height: calc(100% - 30px); + overflow: scroll; + cursor: pointer; +} +.comment-barrage-item .barrageContent::-webkit-scrollbar { + height: 0; + width: 4px; +} +.comment-barrage-item .barrageContent::-webkit-scrollbar-button { + display: none; +} +.comment-barrage-item .barrageContent p { + margin: 8px 0; + line-height: 1.3; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 2; + display: -webkit-box; + -webkit-box-orient: vertical; +} +.comment-barrage-item .barrageContent blockquote p { + margin: 0; +} +.comment-barrage-item .barrageContent h1, +.comment-barrage-item .barrageContent h2, +.comment-barrage-item .barrageContent h3, +.comment-barrage-item .barrageContent h4 { + font-size: 14px !important; + font-weight: 400 !important; + margin: 8px 0 !important; +} + +/* 中控台 */ +#console { + display: flex; + position: fixed; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + justify-content: center; + opacity: 0; + transition: 0.3s ease-out, color 0s; + flex-direction: column; + align-items: center; + pointer-events: none; + margin: 0 !important; + z-index: 2; +} +#console-music-bg { + display: none; +} + +#console.show, +#console.reward-show { + opacity: 1; + pointer-events: all; +} + +#console.reward-show .console-card-group { + pointer-events: none; +} + +#console .console-card-group { + display: flex; + justify-content: space-between; + align-items: center; + margin: 0 30px; + transform: translateY(20px); + transition: 0.3s; + opacity: 0; + max-width: 80%; + max-height: 70%; +} + +#console.show .console-card-group { + transform: translateY(0px); + opacity: 1; + transition-delay: 0.1s; +} + +#console .console-card-group-left { + margin-right: 0.5rem; + width: 40%; + height: 100%; +} + +#console .console-card-group-right { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; + width: 60%; + overflow: hidden; + min-width: 575px; +} + +#console .console-card { + background: var(--card-bg); + border-radius: 12px; + overflow: hidden; + border: var(--style-border); + box-shadow: var(--anzhiyu-shadow-border); + padding: 40px; +} + +#console .console-card.tags { + height: calc(100% - 172px); +} + +#console .console-mask { + background: var(--anzhiyu-maskbgdeep); + backdrop-filter: saturate(100%) blur(0px); + -webkit-backdrop-filter: blur(0px); + width: 100vw; + height: 100vh; + top: 0; + left: 0; + position: absolute; + z-index: -1; + transition: 0.3s; + margin: 0px !important; +} + +#console.show .console-mask, +#console.reward-show .console-mask { + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); +} + +#card-newest-comments .aside-list-item .thumbnail img { + width: 20px; + height: 20px; + margin-right: 8px; + border-radius: 20px; +} + +#card-newest-comments .aside-list-item { + background: var(--anzhiyu-card-bg); + border-radius: 12px; + border: var(--style-border); + padding: 12px 16px; + width: 49%; + display: flex; + flex-direction: column; + height: 150px; + transition: 0.3s; + cursor: pointer; +} + +#card-newest-comments .aside-list-item:not(:last-child) { + margin-bottom: 0.5rem; +} + +#card-newest-comments .aside-list-item .name { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 130px; + font-weight: bold; +} + +#console .author-content-item-tips { + opacity: 0.8; + font-size: 12px; + margin-bottom: 0.5rem; + color: var(--font-color); +} + +#console .author-content-item-title { + font-size: 27px; + font-weight: 700; + line-height: 1; + color: var(--font-color); +} + +#console .aside-list-item .thumbnail { + display: flex; + align-items: center; + width: fit-content; +} + +#console .aside-list-item .content { + display: flex; + flex-direction: column; + height: 100%; + margin-top: 0.5rem; +} + +#card-newest-comments .aside-list-item:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +#console .aside-list-item .content .comment { + -webkit-line-clamp: 2; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + line-height: 24px; + font-size: 14px; + border-radius: 0px; +} + +#console .aside-list-item:hover .thumbnail, +#console .aside-list-item:hover .content .comment, +#console .aside-list-item:hover .content time { + color: var(--anzhiyu-white); +} + +#console .aside-list-item .content time { + font-size: 12px; + margin-top: auto; + color: var(--anzhiyu-fontcolor); +} + +#console .aside-list { + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: space-between; + margin-top: 0.5rem; +} + +#console .button-group { + display: flex; + margin: 1rem auto 0 auto; + justify-content: center; + width: fit-content; +} + +#console .button-group .console-btn-item { + width: 60px; + height: 60px; + transition: 0.3s; + cursor: pointer; +} + +#console .button-group .console-btn-item:not(:last-child) { + margin-right: 0.5rem; +} + +#console .button-group .console-btn-item a { + width: 100%; + height: 100%; + background: var(--card-bg); + border: var(--style-border); + border-radius: 60px; + display: flex; + align-items: center; + justify-content: center; + color: var(--anzhiyu-fontcolor); +} + +#console .button-group .console-btn-item.on a { + background: var(--anzhiyu-orange); + color: var(--anzhiyu-white); + transition: 0.3s; +} + +.console-card.tags .card-tag-cloud { + margin-top: 1.5rem; + display: flex; + flex-wrap: wrap; + max-height: 230px; + overflow: hidden; +} + +.console-card.tags .card-tag-cloud a { + color: var(--anzhiyu-fontcolor) !important; + margin: 6px 4px; + padding: 2px 8px; + border-radius: 8px; + background: var(--anzhiyu-secondbg); + border: var(--style-border); + font-size: 14px !important; + font-weight: bold; +} + +.console-card.tags .card-tag-cloud a:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white) !important; +} + +.console-card.tags .card-tag-cloud a sup { + opacity: 0.6; +} + +#console .console-card.history { + margin-top: 8px; + padding: 0; + background: none; + box-shadow: none; + border: none; + overflow: hidden; + min-width: 575px; +} + +#console .console-card.history .item-headline { + display: none; +} + +#console .console-card.history .card-archive-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +#console .console-card.history .card-archive-list li.card-archive-list-item { + flex: 0 0 25%; +} + +#console .console-card.history .card-archive-list .card-archive-list-link { + border-radius: 8px; + margin: 4px; + display: flex; + flex-direction: column; + align-content: space-between; + border: var(--style-border); + background: var(--card-bg); + padding: 8px 16px; +} + +#console .console-card.history .card-archive-list .card-archive-list-link:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +#console #card-newest-comments { + height: 100%; + min-height: 580px; +} + +#console .button-group i { + font-size: 1rem; +} + +#console hr { + display: none; +} + +#console ul { + padding-left: 0; +} +#console ul li { + list-style: none; +} +#console .console-card.history ul.card-archive-list { + margin: -4px; +} + +[data-theme="dark"] #console .button-group .console-btn-item a.darkmode_switchbutton { + background: var(--anzhiyu-orange); + color: var(--anzhiyu-white); +} + +/* 控制台音乐css */ +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap:hover + .aplayer-bar + .aplayer-played + .aplayer-thumb { + display: inline; +} + +body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-loop, +.aplayer.aplayer-arrow .aplayer-icon-order { + display: inline; +} +body:has(#console.show) .aplayer-volume-wrap { + display: none; +} +body:has(#console.show) #nav-music { + z-index: 10000; + left: 45%; + top: 23%; + box-shadow: none; + align-items: flex-start; + transition: 0s; + height: 35%; + width: 42%; + opacity: 1 !important; + justify-content: center; +} + +body:has(#console.show) #nav-music:active { + transform: scale(1); +} +body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-lrc { + opacity: 1; + width: 100%; + height: 180px; + margin: 0; + padding: 0; +} +body:has(#console.show) #nav-music .aplayer .aplayer-lrc p.aplayer-lrc-current, +body:has(#console.show) #nav-music .aplayer .aplayer-lrc p { + color: var(--anzhiyu-fontcolor); +} +body:has(#console.show) #nav-music #nav-music-hoverTips { + opacity: 0; + height: 70px; + width: 70px; + margin-left: 0px; + border-radius: 50%; + box-shadow: 0 0 14px #ffffffa6; + transform: rotate(0deg) scale(1.1); + border: var(--style-border-always); + animation: changeright 24s linear infinite; + margin-top: 10px; + left: auto; +} +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-loaded { + display: block; + border-radius: 10px; + height: 10px; +} +body:has(#console.show) meting-js { + height: 100%; + width: 100%; +} +body:has(#console.show) #nav-music .aplayer .aplayer-body { + align-items: center; + flex-direction: column; + width: 100%; + cursor: auto; +} +body:has(#console.show) #nav-music .aplayer { + height: 100%; + width: 100%; + padding: 10px 10px 0; +} +body:has(#console.show) #nav-music .aplayer { + background: none; + border: none; +} +body:has(#console.show) #nav-music.playing { + animation: none; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music { + height: auto; + margin-bottom: 10px; +} +body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-info { + flex-direction: column; + height: auto; + position: relative; +} + +body:has(#console.show) .aplayer .aplayer-pic .aplayer-play { + width: 30px; + height: 30px; +} +body:has(#console.show) .aplayer .aplayer-pic .aplayer-play svg { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-44%, -50%); +} +body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-pic { + height: 70px; + width: 70px; + margin-left: 0px; + border-radius: 50%; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-author { + display: inline; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-title { + color: var(--anzhiyu-fontcolor); + cursor: auto; + line-height: 2; + display: inline-block; + white-space: nowrap; + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + transition: 0.3s; + user-select: none; + margin-right: 3px; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller { + width: 100%; + height: auto; + top: 26px; + align-items: center; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 10px; + border-radius: 10px; + background: #cdcdcd; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-time { + display: block; + bottom: 0; +} +body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0; + padding: 0; +} +body:has(#console.show) + #nav-music + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu { + display: none; +} +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-played { + background: var(--anzhiyu-main) !important; + opacity: 0.8; + animation: none; + border-radius: 10px; +} +body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-played + .aplayer-thumb { + margin-top: -2px; + width: 15px; + height: 15px; +} +body:has(#console.show) #nav-music .aplayer .aplayer-lrc .aplayer-lrc-contents { + margin-top: 80px; +} + +@media screen and (min-width: 1200px) and (max-width: 1450px) { + body:has(#console.show) #nav-music { + left: 45%; + } +} + +/* 赞赏部分控制台css */ +.console-card-group-reward { + opacity: 0; + display: none; +} +.reward-show .console-card-group-reward { + opacity: 1; + display: block; + position: absolute; +} +.console-card-group-reward .reward-all { + display: flex; + align-items: center; + justify-content: center; +} +.console-card-group-reward .reward-all .reward-item { + display: flex; + flex-direction: column; + align-items: center; + margin: 0.625rem; +} +.console-card-group-reward .reward-all .reward-item img { + width: 230px; + height: 230px; +} + +@media screen and (max-width: 1200px) { + /* 移动端音乐列表 */ + body:has(#console.show) #nav-music .aplayer-list { + display: block; + position: absolute; + z-index: 1; + background: white; + left: 0; + } + body:has(#console.show) .aplayer-list { + max-height: none !important; + } + body:has(#console.show) .aplayer-list { + position: fixed; + display: none; + width: 100%; + bottom: -76%; + left: 0; + background: var(--sidebar-bg); + height: auto; + border-radius: 15px 15px 0px 0px; + padding: 15px 0px; + } + body:has(#console.show) .aplayer-list.aplayer-list-hide { + bottom: 0% !important; + } + body:has(#console.show) ol > li { + display: flex; + margin: 0 10px; + } + body:has(#console.show) ol > li span.aplayer-list-title { + width: 30%; + } + body:has(#console.show) ol > li.aplayer-list-light { + background: #33a673; + padding: 5px 20px; + border-radius: 10px; + } + + body:has(#console.show) ol > li.aplayer-list-light span { + color: #fff; + } + body:has(#console.show) ol > li span.aplayer-list-title { + max-width: 55%; + width: auto; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + body:has(#console.show) ol > li span.aplayer-list-author { + position: absolute; + right: 10px; + width: auto; + max-width: 35%; + display: -webkit-box; + -webkit-line-clamp: 1; + overflow: hidden; + -webkit-box-orient: vertical; + } + body:has(#console.show) ol > li.aplayer-list-light span.aplayer-list-author { + right: 15px; + } + /* 移动端音乐 */ + body:has(#console.show) meting-js { + position: relative; + } + #console .console-card-group { + justify-content: center; + } + + #console .console-card-group { + display: none; + } + + #console .console-card-group-right { + width: 100%; + margin: 0; + } + + #consoleCommentBarrage { + display: none; + } + + #console .button-group { + position: absolute; + bottom: 70px; + } + body:has(#console.show) #nav-music #nav-music-hoverTips { + display: none; + } + body:has(#console.show) #nav-music { + position: fixed; + display: block !important; + left: 5.2%; + top: 3.9rem !important; + height: 70%; + width: 85%; + } + body:has(#console.show) #console-music-bg { + display: block; + filter: blur(33px); + display: block; + background: #000000; + opacity: 0.58; + width: 100%; + height: 100%; + position: absolute; + top: 0; + transform: scale(1.2); + } + [data-theme="dark"] body:has(#console.show) #console-music-bg { + background: var(--anzhiyu-white); + } + body:has(#console.show) #console-music-bg::after { + box-shadow: inset 0 0px 10px 116px #000000; + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + } + [data-theme="dark"] body:has(#console.show) #console-music-bg::after { + box-shadow: inset 0 0px 10px 116px var(--anzhiyu-white); + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-pic { + height: 100px; + width: 100px; + border-radius: 50%; + animation: none; + border: none; + transform: none !important; + box-shadow: none; + margin-top: 80px; + } + + body:has(#console.show) #nav-music .aplayer { + padding: 30px; + border-radius: 0; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-title, + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music .aplayer-author { + color: var(--anzhiyu-white); + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-info { + width: 100%; + height: 45%; + } + body:has(#console.show) #nav-music .aplayer .aplayer-body { + justify-content: space-between; + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-info::after { + position: absolute; + content: "iPhone"; + top: -20px; + left: 0; + color: #b5b8bc; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-music { + padding: 25px 0 0; + position: absolute; + left: 0; + } + body:has(#console.show) #nav-music .aplayer.aplayer-withlrc .aplayer-lrc { + height: 25px; + text-align: left; + } + + body:has(#console.show) #nav-music .aplayer .aplayer-lrc p.aplayer-lrc-current { + color: var(--anzhiyu-white); + font-size: 20px; + line-height: 25px !important; + float: left; + white-space: nowrap; + animation: an-text-roll 4s cubic-bezier(0.6, 0, 0.5, 1) alternate infinite; + min-width: 100%; + /* margin: 0; */ + } + body:has(#console.show) #nav-music .aplayer .aplayer-lrc p { + color: var(--anzhiyu-white); + font-size: 16px; + margin: 0; + margin-top: 20px; + margin-bottom: 20px; + } + body:has(#console.show) #nav-music .aplayer .aplayer-lrc .aplayer-lrc-contents { + margin: -40px 0px 0; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-time { + color: var(--anzhiyu-white); + left: 50%; + transform: translateX(-50%); + top: 15px; + position: absolute; + width: 100%; + padding: 0; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller { + top: 58px; + } + body:has(#console.show) .aplayer .aplayer-icon-back, + body:has(#console.show) .aplayer .aplayer-icon-forward, + body:has(#console.show) .aplayer .aplayer-icon-order, + body:has(#console.show) .aplayer .aplayer-icon-play, + body:has(#console.show) + #nav-music + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu, + body:has(#console.show) .aplayer.aplayer-mobile .aplayer-icon-volume-down { + display: inline-block; + opacity: 1; + } + body:has(#console.show) .aplayer .aplayer-icon-volume-down { + width: 36px; + height: 30px; + } + body:has(#console.show) .aplayer-volume-wrap { + position: absolute; + top: 150px; + left: 50%; + transform: translateX(-50%); + width: 75px; + } + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 10px; + border-radius: 10px; + } + body:has(#console.show) + #nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap + .aplayer-bar + .aplayer-loaded { + display: block; + height: 10px; + border-radius: 10px; + } + + body:has(#console.show) .aplayer .aplayer-icon-back { + left: 0; + } + body:has(#console.show) .aplayer .aplayer-icon-forward { + right: 0; + } + body:has(#console.show) .aplayer .aplayer-icon-forward, + body:has(#console.show) .aplayer .aplayer-icon-back { + height: 40px; + width: 33%; + margin: 15px 0; + position: absolute; + } + + body:has(#console.show) .aplayer .aplayer-pic .aplayer-play { + width: 120px; + height: 120px; + } + body:has(#console.show) .aplayer .aplayer-pic .aplayer-pause { + width: 100px; + height: 100px; + } + body:has(#console.show) .aplayer .aplayer-pic .aplayer-play svg { + width: 60px; + height: 60px; + } + body:has(#console.show) .aplayer .aplayer-pic .aplayer-pause svg { + width: 50px; + height: 50px; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + body:has(#console.show) .aplayer .aplayer-icon-play { + height: 50px; + width: 33%; + margin: 10px 0; + position: absolute; + left: 50%; + transform: translateX(-50%); + } + + body:has(#console.show) + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu { + right: 0; + } + body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-order { + left: 0; + } + body:has(#console.show) + .aplayer.aplayer-withlist + .aplayer-info + .aplayer-controller + .aplayer-time + .aplayer-icon.aplayer-icon-menu, + body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-order { + height: 40px; + width: 33%; + top: 80px; + position: absolute; + } + + body:has(#console.show) .aplayer.aplayer-arrow .aplayer-icon-loop { + height: 40px; + width: 33%; + position: absolute; + left: 50%; + top: 80px; + transform: translateX(-50%); + } + + body:has(#console.show) #nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0; + padding: 0; + } + body:has(#console.show) .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner { + position: relative; + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + } + body:has(#console.show) .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path { + fill: var(--anzhiyu-white); + } + body:has(#console.show) .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap { + overflow: visible; + bottom: 0px; + left: 45px; + right: auto; + } + body:has(#console.show) + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-volume-wrap + .aplayer-volume-bar-wrap + .aplayer-volume-bar, + body:has(#console.show) + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-volume-wrap + .aplayer-volume-bar-wrap + .aplayer-volume-bar + .aplayer-volume { + width: 20px; + border-radius: 4px; + } +} + +@media screen and (max-width: 867px) { + #center-console:checked + label { + display: none; + } + #console .console-card-group { + display: none; + } + + #consoleHideAside { + display: none; + } + .console-card-group-reward .reward-all .reward-item img { + width: 130px; + height: 130px; + } + #console #consoleKeyboard { + display: none; + } +} + +@media screen and (max-height: 800px) { + #console .console-card-group { + display: none; + } + + #consoleMusic { + display: none; + } + + #consoleCommentBarrage { + display: none; + } + + body:has(#console.show) #nav-music { + display: none; + } +} + +@media screen and (min-width: 768px) { + #console .button-group .console-btn-item a:hover { + background: var(--anzhiyu-main) !important; + } + #console .button-group .console-btn-item:hover a { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); + } +} +@media screen and (max-width: 768px) { + body:has(#console.show) #nav-music { + width: 90%; + } + #center-console + label { + display: none; + } +} +/* 歌词超出文本滚动动画 */ +@keyframes an-text-roll { + from { + margin-left: 0; + } + to { + margin-left: 100%; + transform: translateX(-100%); + } +} + +body[data-type="essay"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type="essay"] #page .page-title { + display: none; +} +body[data-type="essay"] #web_bg { + background: var(--anzhiyu-background); +} +#bber .bber-container-img { + display: flex; + align-items: center; + justify-content: space-around; + width: 100%; + flex-wrap: wrap; + margin-bottom: 0.3rem; +} +#bber .bber-container-img .bber-content-noimg { + width: calc(100% / 4 - 5px); +} + +#bber .bber-content-img img { + object-fit: cover; + max-height: 100%; +} + +#bber .bber-content-img, +#bber .bber-content-video { + height: 100px; + border-radius: 8px; + overflow: hidden; + display: flex; + justify-content: center; + position: relative; + width: calc(100% / 4 - 5px); + margin-bottom: 10px; +} + +#bber .bber-content-video video { + border-radius: 8px; + object-fit: cover; + max-height: 100%; +} +#bber .bber-content-video::after { + content: "视频"; + display: inline-block; + padding: 1px 6px; + background: var(--anzhiyu-black-op); + border-radius: 8px; + margin-left: 4px; + font-size: 12px; + font-weight: 700; + color: var(--anzhiyu-white); + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); + position: absolute; + left: 0; + top: 4px; + z-index: 2; +} + +#bber .bber-content .datacont { + order: 0; + font-size: 0.8rem; + font-weight: 700; + color: var(--anzhiyu-fontcolor); + width: 100%; + line-height: 1.38; + border-radius: 12px; + margin-bottom: 0.5rem; + display: flex; + flex-direction: column; + text-align: justify; +} +#bber p { + margin: 0px; +} +#bber div.bber-content { + display: flex; + flex-flow: wrap; + border-radius: 12px; + width: 100%; + height: 100%; +} +#bber .timeline ul li.bber-item { + position: relative; + width: 32%; + border: var(--style-border-always); + border-radius: 12px; + padding: 1rem 1rem 0.5rem; + transition: all 0.3s ease 0s; + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + box-shadow: var(--anzhiyu-shadow-border); + margin-right: 2%; +} +#bber .timeline #waterfall.show { + opacity: 1; +} +#bber .timeline #waterfall { + opacity: 0; + transition: all 0.3s ease 0s; +} +#bber ul.list { + display: flex; + flex-flow: row wrap; + justify-content: space-between; +} +#bber { + margin-top: 1rem; + width: 100%; +} +#bber > section > ul > li.bber-item { + margin-bottom: 1rem; +} + +#bber-tips { + font-size: 14px; + display: flex; + justify-content: center; + margin-top: 1rem; +} + +#bber .timeline ul li.bber-item hr { + display: flex; + position: relative; + margin: 8px 0px; + border: 1px dashed var(--anzhiyu-theme-op); + width: 100%; +} + +#bber .bber-info { + display: flex; + align-items: center; +} + +#bber > section > ul > li > div .bber-info-time, +#bber > section > ul > li > div .bber-info-from { + color: var(--anzhiyu-fontcolor); + font-size: 0.7rem; + background-color: var(--anzhiyu-gray-op); + padding: 0px 8px; + border-radius: 20px; + cursor: default; + display: flex; + align-items: center; +} + +#bber .bber-info .anzhiyufont.anzhiyu-icon-clock { + margin-right: 4px; + font-size: 0.7rem; +} +#bber > section > ul > li > div .bber-info-from span, +#bber > section > ul > li > div .bber-info-from { + margin-left: 4px; +} +#bber > section > ul > li > div .bber-info-from i { + font-size: 0.7rem; +} +#bber .bber-item hr::before { + display: none; +} + +#bber .bber-bottom { + display: flex; + justify-content: space-between; + width: 100%; + margin-top: 10px; +} + +.bber-reply { + cursor: pointer !important; +} + +.bber-reply:hover { + color: var(--anzhiyu-main); + max-height: 35px; +} + +#bber .timeline ul li.bber-item:hover { + border: var(--style-border-hover); +} + +#bber .bber-content-link { + display: flex; + margin-left: 0.5rem; + font-size: 0.7rem; + align-items: center; + background-color: rgba(245, 108, 108, 0.13); + color: rgb(245, 108, 108); + padding: 0px 8px; + border-radius: 20px; +} +#bber .bber-content-link i { + margin-right: 3px; + font-size: 0.7rem; +} +#bber .bber-content-link:hover { + background-color: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +#bber .bber-music { + width: 100%; + height: 90px; + margin: 0.5rem 0; + border-radius: 8px; + overflow: hidden; + border: var(--style-border-always); + background: var(--anzhiyu-secondbg); +} +#bber .aplayer { + margin: 0; +} + +#bber .aplayer.aplayer-withlrc .aplayer-pic { + height: 82px; + width: 82px; + margin: 4px; + border-radius: 4px; +} +.bber-music .aplayer.aplayer-withlrc .aplayer-info { + padding: 5px 7px 0; +} +#bber .aplayer .aplayer-info .aplayer-music { + height: 23px; +} +#bber .aplayer .aplayer-info .aplayer-music .aplayer-title { + font-size: 0.8rem; + font-weight: 700; + margin: 0; + color: var(--anzhiyu-fontcolor); +} + +#bber .aplayer .aplayer-info .aplayer-controller { + align-items: center; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + padding: 0; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + background: var(--anzhiyu-gray); + height: 8px; + border-radius: 12px; + transition: 0.3s; + overflow: hidden; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + height: 100%; + border-radius: 12px; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 100%; + border-radius: 12px; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb { + display: none; +} +#bber .aplayer .aplayer-info .aplayer-controller .aplayer-time { + position: initial; +} + +/* 顶部样式 */ +.author-content.author-content-item.essayPage { + height: 19rem; + color: var(--anzhiyu-white); + overflow: hidden; + margin-top: 0px; +} +body[data-type="essay"] #page .author-content-item .card-content .banner-button-group .banner-button:hover { + color: var(--anzhiyu-white); + border-radius: 20px !important; +} + +/* 响应式 */ +@media screen and (max-width: 1200px) { + #bber .timeline ul li.bber-item { + width: 49%; + margin-right: 1%; + } +} +@media screen and (max-width: 768px) { + #bber .timeline ul li.bber-item { + width: 100%; + margin-right: 0px; + } +} +[data-theme="dark"] #bber .bber-music .aplayer, +[data-theme="dark"] #bber .aplayer .aplayer-lrc:before, +[data-theme="dark"] #bber .aplayer .aplayer-lrc:after { + background: var(--anzhiyu-card-bg); + color: var(--anzhiyu-fontcolor); +} +#bber .aplayer .aplayer-lrc p { + color: var(--anzhiyu-fontcolor); + min-height: 40px; + line-height: 30px !important; + height: 40px !important; + margin: 0 !important; +} + +#bbTimeList { + background: var(--anzhiyu-white); + color: var(--anzhiyu-fontcolor); + padding: 0.5rem 1rem; + border-radius: 12px; + box-shadow: var(--anzhiyu-shadow-lightblack); + display: flex; + transition: all 0.3s ease 0s; + margin: 1rem auto 0; + border: var(--style-border); + align-items: center; + height: 50px; + width: 100%; + max-width: calc(1400px - 3rem); + animation: slide-in .6s 0s backwards; +} +@media screen and (max-width: 1400px) { + #bbTimeList { + max-width: calc(100% - 3rem); + animation: slide-in 0.6s 0s backwards; + } +} +@media screen and (max-width: 768px) { + div#bbTimeList { + margin: 0 20px 15px; + } +} +[data-theme="dark"] #bbTimeList { + background: #000 !important; +} +#bbtalk { + width: 100%; +} +#bber-talk { + width: 100%; + height: 30px; + line-height: 30px; + display: flex; + flex-direction: column; +} +i.bber-logo { + font-size: 2rem; + line-height: 22px; + margin-right: 1rem; + transition: all 0.3s ease 0s; + cursor: pointer !important; +} +i.bber-logo:hover, +i.bber-gotobb:hover { + color: var(--anzhiyu-main); +} + +i.bber-gotobb { + line-height: 30px; + margin-left: 1rem; + transition: all 0.3s ease 0s; + cursor: pointer; +} + +#bber-talk .li-style { + width: 100%; + max-width: 100%; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + transition: 0.3s; + font-weight: 700; + margin: auto; + cursor: pointer; + white-space: nowrap; +} +#bber-talk .li-style:hover { + color: var(--anzhiyu-main); +} + +#bbTimeList:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} + +/* 文章页H1-H6图标样式效果 */ +@-webkit-keyframes rotate { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(-1turn); + transform: rotate(-1turn); + } +} +@keyframes rotate { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(-1turn); + transform: rotate(-1turn); + } +} + +/* 音乐播放器 */ + +.aplayer.aplayer-narrow .aplayer-body, +.aplayer.aplayer-narrow .aplayer-pic { + height: 66px; + width: 66px; +} + +/* 导航栏音乐 */ +@media screen and (max-width: 1200px) { + #nav-music { + display: none !important; + } +} + +#nav-music { + display: flex; + align-items: center; + z-index: 9; + position: fixed; + bottom: 20px; + left: 20px; + cursor: pointer; + transition: all 0.5s, left 0s; + transform-origin: left bottom; + box-shadow: var(--anzhiyu-shadow-border); + border-radius: 40px; + overflow: hidden; +} + +#nav-music:active { + transform: scale(0.97); +} + +#nav-music.playing { + border: var(--style-border); + box-shadow: 0 0px 12px -3px var(--anzhiyu-none); + animation: playingShadow 5s linear infinite; +} + +@keyframes playingShadow { + 0% { + box-shadow: 0 0px 12px -3px var(--anzhiyu-none); + } + + 50% { + box-shadow: 0 0px 12px 0px var(--anzhiyu-main); + } + + 100% { + box-shadow: 0 0px 12px -3px var(--anzhiyu-none); + } +} + +#nav-music .aplayer.aplayer-withlrc .aplayer-pic { + height: 25px; + width: 25px; + border-radius: 40px; + z-index: 1; + transition: 0.3s; + transform: rotate(0deg) scale(1); + border: var(--style-border-always); + animation: changeright 24s linear infinite; + animation-play-state: paused; +} + +#nav-music.playing .aplayer.aplayer-withlrc .aplayer-pic { + box-shadow: 0 0 14px #ffffffa6; + transform: rotate(0deg) scale(1.1); + border-color: var(--anzhiyu-white); + animation-play-state: running; +} + +@keyframes changeright { + 0% { + transform: rotate(0deg) scale(1.1); + box-shadow: 0 0 2px #ffffff00; + } + + 25% { + transform: rotate(90deg) scale(1.1); + box-shadow: 0 0 14px #ffffff; + } + + 50% { + transform: rotate(180deg) scale(1.1); + box-shadow: 0 0 2px #ffffff00; + } + + 75% { + transform: rotate(270deg) scale(1.1); + box-shadow: 0 0 14px #ffffff; + } + + 100% { + transform: rotate(360deg) scale(1.1); + box-shadow: 0 0 2px #ffffff00; + } +} + +#nav-music .aplayer.aplayer-withlrc .aplayer-info { + height: 100%; + color: var(--anzhiyu-fontcolor); + margin: 0; + padding: 0; + display: flex; + align-items: center; +} + +#nav-music.playing .aplayer.aplayer-withlrc .aplayer-info { + color: var(--anzhiyu-white); +} + +#nav-music.playing #nav-music-hoverTips { + width: 0; + opacity: 0; +} +#nav-music #nav-music-hoverTips { + color: var(--anzhiyu-white); + background: var(--anzhiyu-main); + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + align-items: center; + justify-content: center; + display: flex; + border-radius: 40px; + opacity: 0; + font-size: 12px; + z-index: 2; + transition: 0.3s; +} + +#nav-music:hover:not(.playing) #nav-music-hoverTips { + opacity: 1; +} + +#nav-music + .aplayer + .aplayer-info + .aplayer-controller + .aplayer-bar-wrap:hover + .aplayer-bar + .aplayer-played + .aplayer-thumb { + display: none; +} + +#nav-music .aplayer { + background: var(--card-bg); + border-radius: 60px; + height: 41px; + display: flex; + margin: 0; + transition: 0.3s; + border: var(--style-border); + box-shadow: none; +} + +#nav-music.playing .aplayer { + background: var(--anzhiyu-main); + border: var(--style-border-hover); + backdrop-filter: saturate(180%) blur(20px); + backdrop-filter: blur(20px); + transform: translateZ(0); +} + +#nav-music .aplayer .aplayer-notice { + display: none; +} + +#nav-music .aplayer .aplayer-miniswitcher { + display: none; +} + +#nav-music .aplayer .aplayer-body { + position: relative; + display: flex; + align-items: center; +} + +#nav-music .aplayer-list { + display: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-music { + margin: 0; + display: flex; + align-items: center; + padding: 0 12px 0 8px; + cursor: pointer; + z-index: 1; + height: 100%; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-time { + display: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-music .aplayer-author { + display: none; +} + +#nav-music .aplayer.aplayer-withlist .aplayer-info { + border: none; +} + +#nav-music .aplayer .aplayer-pic .aplayer-button { + bottom: 50%; + right: 50%; + transform: translate(50%, 50%); + margin: 0; + transition: 0.3s; +} +#nav-music .aplayer .aplayer-pic:has(.aplayer-button.aplayer-play) { + animation-play-state: paused; + transform: rotate(0deg) scale(1) !important; +} +#nav-music .aplayer.aplayer-withlrc .aplayer-pic { + margin-left: 8px; +} +#nav-music .aplayer .aplayer-info .aplayer-music .aplayer-title { + cursor: pointer; + line-height: 1; + display: inline-block; + white-space: nowrap; + max-width: 120px; + overflow: hidden; + text-overflow: ellipsis; + transition: 0.3s; + user-select: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap { + margin: 0; + padding: 0; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar { + height: 100%; + background: 0 0; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded { + display: none; +} + +#nav-music .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + height: 100%; + opacity: 0.1; + background-color: var(--anzhiyu-white) !important; + animation: lightBar 5s ease infinite; + animation-play-state: paused; +} + +#nav-music.playing .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played { + animation-play-state: running; +} + +@keyframes lightBar { + 0% { + opacity: 0.1; + } + + 60% { + opacity: 0.3; + } + + 100% { + opacity: 0.1; + } +} + +/* 歌词 */ +#nav-music .aplayer.aplayer-withlrc .aplayer-lrc { + width: 0; + opacity: 0; + transition: 0.3s; + margin-top: -2px; + padding: 5px 0; +} +#nav-music.stretch .aplayer.aplayer-withlrc .aplayer-lrc { + width: 200px; + margin-left: 8px; + opacity: 1; +} + +#nav-music .aplayer .aplayer-lrc p.aplayer-lrc-current { + color: var(--anzhiyu-white); + border: none; + min-height: 20px; +} + +#nav-music .aplayer .aplayer-lrc:after, +#nav-music .aplayer .aplayer-lrc:before { + display: none; +} + +#nav-music .aplayer .aplayer-lrc p { + color: #ffffffb3; + line-height: 40px !important; + height: 40px !important; + margin: 0px 0; + vertical-align: top; + /* display: inline-block; */ +} + +#nav-music .aplayer .aplayer-pic { + pointer-events: none; +} +#nav-music .aplayer .aplayer-pic .aplayer-button { + pointer-events: all; +} + +/* bilibli番剧插件 */ +#page #article-container .bangumi-tab.bangumi-active { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-ahoverbg); + border-radius: 10px; +} +#page #article-container .bangumi-tabs .bangumi-tab { + border-bottom: none; + border-radius: 10px; +} +#page #article-container .bangumi-tabs a.bangumi-tab:hover { + text-decoration: none !important; + border-radius: 10px; + column-gap: var(--anzhiyu-ahoverbg); +} +#page #article-container .bangumi-pagination a.bangumi-button { + border-bottom: none; + border-radius: 10px; +} +.bangumi-button:hover { + background: var(--anzhiyu-theme) !important; + border-radius: 10px !important; + color: var(--anzhiyu-ahoverbg) !important; +} +a.bangumi-button.bangumi-nextpage:hover { + text-decoration: none !important; +} +.bangumi-button { + padding: 5px 10px !important; +} + +a.bangumi-tab { + padding: 5px 10px !important; +} +svg.icon.faa-tada { + font-size: 1.1em; +} +.bangumi-info-item { + border-right: 1px solid #f2b94b; +} +.bangumi-info-item span { + color: #f2b94b; +} +.bangumi-info-item em { + color: #f2b94b; +} + +/*哔哩哔哩视频适配*/ +.aspect-ratio { + position: relative; + width: 100%; + height: 0; + padding-bottom: 75%; + margin: 3% auto; + text-align: center; +} +.aspect-ratio iframe { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; +} +#page:has(#lib-cards):has(#libCategories) #post-comment .tk-comments-container > .tk-comment { + border: none; + box-shadow: none; +} +@media screen and (max-width: 768px) { + #libCategories { + margin-top: 0 !important; + } + #page:has(#lib-cards):has(#libCategories) h1.page-title { + margin-bottom: 0; + } + body[data-type="categories"] #body-wrap #category { + padding: 20px 15px 20px; + } +} + +.card-glass .card-background { + box-shadow: none; + margin: 0 15px; +} +[data-theme="dark"] .card-glass .card-background { + background-color: transparent; +} + +/* 留言板样式补丁 */ +#maincontent #form-wrap .formmain .comments-main h3.title3 { + justify-content: center; +} + +body[data-type="envelope"] #page #post-comment .tk-comments-container > .tk-comment { + border: none; + box-shadow: none; +} + +[data-theme="dark"] #universe { + display: block; + position: fixed; + margin: 0; + padding: 0; + border: 0; + outline: 0; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 1; +} +canvas#universe { + display: none; +} + +@media screen and (max-width: 768px) { + #page .fcircle_page .author-content-item .card-content .banner-button-group .banner-button i, + #page .fcircle_page .author-content-item .card-content .banner-button-group .banner-button svg { + margin-left: 140px; + margin-top: 15px; + } +} + +#gitcalendar #git_container ul li { + margin: 0 !important; +} +#gitcalendar #git_container ul li::before{ + content: none !important; +} +.dplayer-video-wrap, +.dplayer { + border-radius: 12px; +} + +.note .hide-block { + margin: 0; +} +.note .hide-block button { + border-radius: 30px; +} + +body[data-type="link"] main #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} + +[data-theme="dark"] body[data-type="link"] #page { + background: transparent; +} + +.flink .anzhiyu-flink-list { + padding: 0; +} + +/* 修复时间轴wowjs超出盒子 */ +div#archive { + overflow: hidden; + padding: 22px; +} +/* 修复加载时图片太大超出范围 */ +.aplayer.aplayer-fixed { + overflow: hidden; +} + +@media screen and (max-width: 768px) { + #page .fcircle_page .author-content-item .card-content .banner-button-group .banner-button { + background-color: transparent !important; + } +} + +.relatedPosts > .relatedPosts-list > div { + border-radius: var(--anzhiyu-border-radius); +} + +/* 侧边栏按钮圆角 */ +#rightside > div > button { + border-radius: 5px; +} + +/* site-card样式修复 */ +#article-container .site-card-group a { + padding: 0; + border-bottom: 0; + font-weight: 400; +} +#article-container .site-card-group .site-card { + background: #fff !important; + border-radius: 8px; +} +#article-container .site-card-group a:hover { + padding: 0; + border-bottom: 0; + font-weight: 400; +} +[data-theme="light"] #footer-wrap { + color: var(--font-color); +} +#footer-wrap .anzhiyufont.anzhiyu-icon-heartbeat { + transition: 0.3s; + animation: heartbeat-bounce 2s ease-in-out infinite; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; +} +@keyframes heartbeat-bounce { + 0%, + 100% { + transform: scale(1); + } + + 10%, + 30% { + transform: scale(0.9); + } + 20%, + 40%, + 60%, + 80% { + transform: scale(1.1); + } + 50%, + 70% { + transform: scale(1.1); + } +} + +/* 顶部样式 */ +.fcircle_page .author-content.fcirclePage { + height: 19rem; + color: var(--anzhiyu-white); + overflow: hidden; + margin-top: 0px; +} +body[data-type="fcircle"] #web_bg { + background-color: #f7f9fe; +} + +[data-theme="dark"] body[data-type="fcircle"] #web_bg { + background-color: #000; +} + +body[data-type="fcircle"] #page .page-title { + display: none; +} + +body[data-type="fcircle"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +.fcircle_page a { + border-bottom: none !important; +} +.fcircle_page .cf-article-avatar a:hover { + background: none !important; + color: var(--anzhiyu-fontcolor) !important; +} +/* 随机文章样式 */ + +.title-h2-a { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 0.5rem; +} +.title-h2-a-left { + display: flex; + align-items: center; +} +.title-h2-a-left h2 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.title-h2-a a { + margin-left: 0.5rem; + color: var(--anzhiyu-fontcolor); + font-weight: 700; +} +#random-post { + min-height: 32px; + background: var(--card-bg); + border: var(--style-border-always); + box-shadow: var(--anzhiyu-shadow-border); + padding: 20px 30px; + border-radius: 12px; + margin-top: 8px; +} +#random-post .random-friends-post { + text-decoration: none; + border-bottom: 2px solid var(--anzhiyu-lighttext) !important; + color: var(--anzhiyu-fontcolor); + font-weight: 700; + padding: 0 4px; +} + +#random-post .random-friends-post:hover { + text-decoration: none; + border-bottom: 2px solid var(--anzhiyu-none) !important; + color: var(--anzhiyu-white) !important; + background: var(--anzhiyu-main) !important; + border-radius: 4px; + box-shadow: var(--anzhiyu-shadow-main); +} +#article-container .title-h2-a a:hover { + color: var(--anzhiyu-hovertext) !important; +} +.fcircle_page .title-h2-a-right a.random-post-all { + color: var(--anzhiyu-fontcolor); +} +#cf-overshow.cf-show-now p a.cf-article-title:hover, +.fcircle_page #fcircleContainer .cf-article a.cf-article-title:hover, +.fcircle_page .title-h2-a-right a.random-post-all:hover, +.fcircle_page .title-h2-a-left a.random-post-start:hover { + background: none; + box-shadow: none; + color: var(--anzhiyu-theme); +} +.fcircle_page .fish-pond-item .cf-article .cf-article-title { + line-height: 2; +} + +#greetingBox { + position: fixed; + top: 10px; + left: 15%; + width: 400px; + text-align: center; + z-index: 999; + pointer-events: none; +} +@media screen and (max-width: 768px) { + #greetingBox { + display: none; + } +} + +#greeting { + display: inline-block; + position: relative; + opacity: 0; + top: -110px; + padding: 5px 40px; + border-radius: 50px; + background-color: white; + color: black; + font-size: small; + transition: 0.5s; + box-shadow: rgb(0 0 0 / 5%) 0 10px 20px; +} + +#greeting.shown { + opacity: 1; + top: 0; +} + +/* 首页分类框展示 */ +.categoryGroup { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + min-width: 200px; + height: 24%; + width: 100%; + + animation: slide-in 0.6s 0.2s backwards; +} +.categoryItem:last-child { + margin-right: 0; +} +.categoryItem { + width: calc(100% / 3 - 0.33rem); + height: 100%; + margin-right: 0.5rem; +} + +.categoryItem { + overflow: hidden; + transform: scale(1); + transition: all 0.8s cubic-bezier(0.65, 0.15, 0.37, 1.19); + height: 100%; + border-radius: 12px; +} + +a.categoryButton { + height: 100%; + width: 100%; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + display: inline-block; + text-align: left; + line-height: 4em; + font-weight: 700; + font-size: 1.1rem; + color: var(--anzhiyu-white); + transition: all 0.8s cubic-bezier(0.39, 0.575, 0.565, 1); + transform: scale(1); + overflow: hidden; + font-family: inherit; +} +.categoryButtonText { + padding-left: 21px; +} +a.categoryButton svg, +a.categoryButton i { + font-size: 5rem; + opacity: 0.2; + position: absolute; + right: 0; + top: 20%; + transition: 0.3s; + width: 100px; + text-align: center; + filter: blur(2px); + transform: scale(1) rotate(15deg); +} + +a.categoryButton.blue { + background: linear-gradient(to right, #358bff, #15c6ff); + background-size: 200%; +} +a.categoryButton.red { + background: linear-gradient(to right, #f65, #ffbf37); + background-size: 200%; +} +a.categoryButton.green { + background: linear-gradient(to right, #18e7ae, #1eebeb); + background-size: 200%; +} + +.categoryItem:hover { + width: 50%; +} + +.categoryItem:hover svg, +.categoryItem:hover i { + opacity: 0.8; + transition: 0.8s; + transition-delay: 0.15s; + transform: scale(1.03); + font-size: 2.5rem; + filter: blur(0); + top: 15%; +} +a.categoryButton:after { + top: 47px; + width: 1rem; + left: 21px; + height: 2px; + background: var(--anzhiyu-white); + content: ""; + border-radius: 1px; + position: absolute; +} + +@media screen and (max-width: 768px) { + .categoryGroup { + display: none; + } +} + +[data-theme="dark"] a.categoryButton.blue { + background: linear-gradient(to right, #0653b8, #2fcbff); + background-size: 200%; +} +[data-theme="dark"] a.categoryButton.red { + background: linear-gradient(to right, #e22a16, #da980c); + background-size: 200%; +} +[data-theme="dark"] a.categoryButton.green { + background: linear-gradient(to right, #099e74, #0ea4a4); + background-size: 200%; +} + +#topPostGroup .top-group-list-item { + display: flex; + width: calc(100% / 4 - 5px); + flex-direction: column; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + overflow: hidden; + height: 128px; + max-height: 128px; + border: var(--style-border-always); + transition: 0.3s; + box-shadow: var(--anzhiyu-shadow-border); +} +#topPostGroup .post_cover { + width: 100%; +} +#topPostGroup .post_cover img { + object-fit: cover; + width: 100%; + height: 80px; + background: var(--anzhiyu-secondbg); + border-radius: 12px 12px 0 0; +} + +#topPostGroup .top-group-list-item .post_cover a { + height: 80px; + overflow: hidden; + display: flex; + position: relative; +} + +span.top-group-text { + position: absolute; + top: 0; + left: -40px; + display: flex; + z-index: 1; + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + padding: 2px 8px; + font-size: 12px; + border-radius: 12px 0 12px 0; + transition: 0.3s; + cursor: pointer; +} +.top-group-list-item:hover span.top-group-text { + left: 0; +} + +#topPostGroup .top-group-list-item .top-group-info { + padding: 0.3rem 0.5rem 0.3rem 0.5rem !important; + transition: 0.3s; +} + +#topPostGroup .top-group-list-item .top-group-info .article-title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + justify-content: center; + align-items: flex-end; + align-content: center; + padding-top: 0.5rem; + font-weight: 700; + font-size: 0.8rem !important; + padding: 0 !important; +} + +#topPostGroup .top-group-list-item:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); + transform: scale(1.03); +} + +#topPostGroup .top-group-list-item:hover .article-title { + color: var(--anzhiyu-theme); +} + +.top-group-list-none { + width: calc(100% / 4 - 5px); +} +#topPostGroup .topPostGroupTime { + font-size: 12px; +} + +@media screen and (max-width: 1450px) { + #topPostGroup .top-group-list-item { + width: calc(100% / 4 - 20px) !important; + } +} +@media screen and (max-width: 768px) { + #topPostGroup .top-group-list-item { + width: calc(100% / 2 - 5px) !important; + margin: 2px; + } +} +@media screen and (max-width: 768px) { + #topGroup { + display: none; + } +} + +a span.top-group-text { + border-radius: 0px 0 12px 0; +} + +div#bannerGroup { + width: calc(100% - 600px - 2rem); + height: 340px; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +#swiper_container_blog { + width: 49%; + transition: all 0.3s, width 0s; + border-radius: 12px; +} +.swiper-wrapper { + align-items: center; +} +div#swiper_container { + transition: 0.3s; +} +/* 防止轮播图css未加载完时的超度横行滚动条 */ +#swiper_container { + overflow: hidden !important; +} +div.swiper_container_card { + margin: 1rem auto 0; +} +@media screen and (max-width: 768px) { + div.swiper_container_card { + margin: 0.2rem auto 0; + } +} +div#swiper_container { + background: rgba(255, 255, 255, 0); + width: 100%; + padding: 0; + overflow: initial; + background: var(--card-bg); + border-radius: 12px; + border: var(--style-border); +} +div#swiper_container:hover { + border: var(--style-border-hover); + box-shadow: var(--anzhiyu-shadow-main); +} +.blog-slider { + width: 100%; + position: relative; + border-radius: 12px 8px 8px 12px; + margin: 0 auto; +} +.blog-slider__item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +.blog-slider__item.swiper-slide-active .blog-slider__img img { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transition-delay: 0.3s; + -moz-transition-delay: 0.3s; + -o-transition-delay: 0.3s; + -ms-transition-delay: 0.3s; + transition-delay: 0.3s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > * { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(1) { + -webkit-transition-delay: 0.3s; + -moz-transition-delay: 0.3s; + -o-transition-delay: 0.3s; + -ms-transition-delay: 0.3s; + transition-delay: 0.3s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(2) { + -webkit-transition-delay: 0.4s; + -moz-transition-delay: 0.4s; + -o-transition-delay: 0.4s; + -ms-transition-delay: 0.4s; + transition-delay: 0.4s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(3) { + -webkit-transition-delay: 0.5s; + -moz-transition-delay: 0.5s; + -o-transition-delay: 0.5s; + -ms-transition-delay: 0.5s; + transition-delay: 0.5s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(4) { + -webkit-transition-delay: 0.6s; + -moz-transition-delay: 0.6s; + -o-transition-delay: 0.6s; + -ms-transition-delay: 0.6s; + transition-delay: 0.6s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(5) { + -webkit-transition-delay: 0.7s; + -moz-transition-delay: 0.7s; + -o-transition-delay: 0.7s; + -ms-transition-delay: 0.7s; + transition-delay: 0.7s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(6) { + -webkit-transition-delay: 0.8s; + -moz-transition-delay: 0.8s; + -o-transition-delay: 0.8s; + -ms-transition-delay: 0.8s; + transition-delay: 0.8s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(7) { + -webkit-transition-delay: 0.9s; + -moz-transition-delay: 0.9s; + -o-transition-delay: 0.9s; + -ms-transition-delay: 0.9s; + transition-delay: 0.9s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(8) { + -webkit-transition-delay: 1s; + -moz-transition-delay: 1s; + -o-transition-delay: 1s; + -ms-transition-delay: 1s; + transition-delay: 1s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(9) { + -webkit-transition-delay: 1.1s; + -moz-transition-delay: 1.1s; + -o-transition-delay: 1.1s; + -ms-transition-delay: 1.1s; + transition-delay: 1.1s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(10) { + -webkit-transition-delay: 1.2s; + -moz-transition-delay: 1.2s; + -o-transition-delay: 1.2s; + -ms-transition-delay: 1.2s; + transition-delay: 1.2s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(11) { + -webkit-transition-delay: 1.3s; + -moz-transition-delay: 1.3s; + -o-transition-delay: 1.3s; + -ms-transition-delay: 1.3s; + transition-delay: 1.3s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(12) { + -webkit-transition-delay: 1.4s; + -moz-transition-delay: 1.4s; + -o-transition-delay: 1.4s; + -ms-transition-delay: 1.4s; + transition-delay: 1.4s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(13) { + -webkit-transition-delay: 1.5s; + -moz-transition-delay: 1.5s; + -o-transition-delay: 1.5s; + -ms-transition-delay: 1.5s; + transition-delay: 1.5s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(14) { + -webkit-transition-delay: 1.6s; + -moz-transition-delay: 1.6s; + -o-transition-delay: 1.6s; + -ms-transition-delay: 1.6s; + transition-delay: 1.6s; +} +.blog-slider__item.swiper-slide-active .blog-slider__content > :nth-child(15) { + -webkit-transition-delay: 1.7s; + -moz-transition-delay: 1.7s; + -o-transition-delay: 1.7s; + -ms-transition-delay: 1.7s; + transition-delay: 1.7s; +} +.blog-slider__img { + width: 290px; + -webkit-flex-shrink: 0; + flex-shrink: 0; + height: 200px; + padding: 10px; + border-radius: 5px; + transform: translateX(0); + overflow: hidden; +} +.blog-slider__img:after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 5px; + opacity: 0.8; +} +.blog-slider__img img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + opacity: 0; + border-radius: 5px; + transition: all 0.3s; +} +.blog-slider__content { + padding-right: 50px; + padding-left: 50px; +} +.blog-slider__content > * { + opacity: 0; + -webkit-transform: translateY(25px); + -moz-transform: translateY(25px); + -o-transform: translateY(25px); + -ms-transform: translateY(25px); + transform: translateY(25px); + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +.blog-slider__code { + color: var(--font-color); + margin-bottom: 0; + display: block; + font-weight: 500; +} +.blog-slider__title { + font-size: 18px; + font-weight: 700; + color: var(--font-color); + margin-bottom: 15px; + -webkit-line-clamp: 1; + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +.blog-slider__text { + color: var(--font-color); + margin-bottom: 15px; + line-height: 1.5em; + width: 100%; + height: 50px; + word-break: break-all; + word-wrap: break-word; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +.blog-slider__button { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + background-color: var(--btn-bg); + padding: 4px 14px; + border-radius: 8px; + color: var(--btn-color); + text-decoration: none; + font-weight: 500; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + text-align: center; + letter-spacing: 1px; + display: none; +} +.blog-slider__button:hover { + background-color: var(--btn-hover-color); + color: var(--btn-color); +} +.blog-slider .swiper-container-horizontal > .swiper-pagination-bullets, +.blog-slider .swiper-pagination-custom, +.blog-slider .swiper-pagination-fraction { + bottom: 10px; + left: 0; + width: 100%; +} +.blog-slider__pagination { + position: absolute; + z-index: 21; + right: 20px; + width: 11px !important; + text-align: center; + left: auto !important; + top: 50%; + bottom: auto !important; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +.blog-slider .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 8px 0; +} +.blog-slider__pagination .swiper-pagination-bullet { + width: 11px; + height: 11px; + display: block; + border-radius: 10px; + background: #858585; + opacity: 0.2; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.blog-slider__pagination .swiper-pagination-bullet-active { + opacity: 1; + -ms-filter: none; + filter: none; + background: var(--btn-bg); + height: 30px; +} +@media screen and (max-width: 768px) { + .blog-slider__pagination { + -webkit-transform: translateX(-50%); + -moz-transform: translateX(-50%); + -o-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + left: 50% !important; + top: 320px; + width: 100% !important; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } + .blog-slider .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 5px; + } + .blog-slider__pagination .swiper-pagination-bullet-active { + height: 11px; + width: 30px; + } + .blog-slider__button { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + width: 100%; + } + .blog-slider { + min-height: 350px; + height: auto; + margin-bottom: 10px; + } + .blog-slider__content { + text-align: center; + padding: 0 30px; + } + .blog-slider__item { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .blog-slider__img { + width: 100%; + padding-top: 0; + } + .blog-slider__content { + padding-left: 10px; + padding-right: 10px; + margin-top: 15px; + } + .blog-slider__pagination.swiper-pagination-clickable.swiper-pagination-bullets { + top: 218px; + } + + .swiper_container_card #swiper_container_blog div#swiper_container.blog-slider { + padding: 10px; + overflow: hidden; + } + .blog-slider__item .blog-slider__content .blog-slider__code { + margin-top: 10px; + } + .blog-slider__title { + margin-bottom: 0; + } +} +@media screen and (min-width: 768px) { + .blog-slider { + height: 200px; + } + .blog-slider__img { + height: 200px; + } +} + +@media screen and (max-width: 1200px) { + div#swiper_container { + width: 100%; + } + #swiper_container_blog { + width: 99%; + } +} + +.swiper_container_card { + display: flex !important; + justify-content: space-around; + flex-direction: row !important; + user-select: none; +} + +.todayCard-title, +.todayCard-tips, +.topGroup .banner-button { + color: #ffffff; +} + +.topGroup { + height: 340px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: calc(600px + 1.5rem); + position: relative; + align-content: space-between; +} +.topGroup .todayCard { + position: absolute; + width: calc(600px + 1rem); + height: 100%; + z-index: 1; + top: 0; + left: 0; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + margin-left: 0.5rem; + overflow: hidden; + transition: 0.3s; + display: flex; + cursor: pointer; + pointer-events: all; +} + +.topGroup .todayCard .todayCard-info { + position: absolute; + bottom: 2rem; + left: 2rem; + z-index: 2; + color: var(--anzhiyu-white); + max-width: 60%; + transition: 0.3s; +} + +.topGroup .todayCard .todayCard-info .todayCard-tips { + opacity: 0.8; + font-size: 12px; +} + +.topGroup .todayCard .todayCard-info .todayCard-title { + font-size: 28px; + font-weight: bold; + line-height: 36px; +} +.topGroup .todayCard .todayCard-cover { + position: absolute; + min-width: 100%; + min-height: 100%; + top: 0; + left: 0; + background-size: cover; + z-index: -1; + transition: 0.3s; +} + +.topGroup .banner-button-group { + position: absolute; + right: 2rem; + bottom: 2rem; + display: flex; + transition: 0.3s; +} + +.topGroup .todayCard.hide .todayCard-cover { + transform: scale(1.2); +} + +.topGroup .banner-button { + background: var(--anzhiyu-white-op); + border-radius: 20px; + color: var(--anzhiyu-white); + display: flex; + align-items: center; + z-index: 1; + transition: 0.3s; + cursor: pointer; + backdrop-filter: saturate(180%) blur(20px); + -webkit-backdrop-filter: blur(20px); + transform: translateZ(0); + height: 40px; + width: 125px; + justify-content: center; +} +.topGroup .banner-button-group .banner-button .banner-button-text { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.topGroup .banner-button i, +.topGroup .banner-button svg { + margin-right: 8px; + font-size: 22px; +} +.topGroup .todayCard::after { + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + box-shadow: 0 -109px 133px -9px #000000 inset; +} + +.topGroup .todayCard.hide { + opacity: 0; + pointer-events: none; +} +.topGroup .todayCard img { + object-fit: cover; + width: 100%; + height: 80px; + background: var(--anzhiyu-secondbg); + border-radius: 12px 12px 0 0; +} +.topGroup .recent-post-item:nth-child(4), +.topGroup .recent-post-item:nth-child(5), +.topGroup .recent-post-item:nth-child(6) { + margin-bottom: 0; + margin-top: 4px; +} + +.topGroup .recent-post-item { + display: none; + width: 200px; + flex-direction: column; + align-items: flex-start; + background: var(--anzhiyu-card-bg); + border-radius: 12px; + overflow: hidden; + min-width: 200px; + height: 164px !important; + max-height: 164px; + border: var(--style-border-always); + transition: 0.3s; + position: relative; + box-shadow: var(--anzhiyu-shadow-border); + margin-left: 0.5rem; + margin-right: 0px; + margin-bottom: 0.5rem; + cursor: pointer; +} +.topGroup .recent-post-item:hover .recent-post-info .article-title { + color: var(--anzhiyu-main); +} +.topGroup .recent-post-item .post_cover { + width: 100%; +} +.topGroup .recent-post-item .post_cover a { + height: 100px; + overflow: hidden; + display: flex; +} +.topGroup span.recent-post-top-text { + position: absolute; + top: 0; + left: -40px; + display: flex; + z-index: 1; + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); + padding: 2px 8px; + font-size: 12px; + border-radius: 12px 0 12px 0; + transition: 0.3s; + cursor: pointer; +} + +.topGroup .recent-post-item .post_cover img { + object-fit: cover; + width: 100%; + background: var(--anzhiyu-secondbg); + border-radius: 12px 12px 0 0; +} +.topGroup .recent-post-item .recent-post-info { + padding: 0.3rem 0.5rem 0.3rem 0.5rem; + transition: 0.3s; +} +.topGroup .recent-post-item .recent-post-info .article-title { + -webkit-line-clamp: 2; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + line-height: 1.5; + justify-content: center; + align-items: flex-end; + align-content: center; + padding-top: 0.5rem; + font-weight: bold; + font-size: 1rem !important; + padding: 0 !important; +} + +.topGroup .recent-post-item:hover .recent-post-top-text { + left: 0; +} + +@media screen and (max-width: 1200px) { + .topGroup .todayCard { + background: #0e57d5; + } + + div#bannerGroup { + height: auto; + width: auto; + } + + .topGroup .recent-post-item { + display: flex; + } + + .categoryGroup .categoryItem:nth-child(3) { + display: none; + } + .categoryGroup { + flex-direction: column; + height: 95%; + } + .topGroup { + display: flex; + flex-wrap: nowrap; + width: auto; + height: auto; + } + + .topGroup .todayCard { + display: none; + } + + .swiper_container_card { + display: flex; + flex-direction: row !important; + justify-content: flex-start !important; + flex-wrap: nowrap; + width: 100%; + overflow-x: scroll; + } + + .categoryItem { + height: 48%; + min-width: 200px; + box-shadow: none !important; + } + .categoryGroup { + display: flex !important; + } + #bbTimeList { + margin: 0 1.5rem; + max-width: 100%; + width: auto; + } +} + +.swiper_container_card::-webkit-scrollbar { + display: none; +} + +.topGroup .banner-button:hover { + background: var(--anzhiyu-theme); + color: var(--anzhiyu-white); +} + +#local-search .search-dialog .local-search__hit-item:before { + content: none !important; +} +#local-search .search-dialog .local-search__hit-item { + padding: 10px !important; + border-radius: 8px; + border: var(--style-border); + margin-bottom: 10px; + display: flex; + justify-content: space-between; + align-items: center; +} +#local-search .search-dialog .local-search__hit-item .search-left { + width: 35%; +} +#local-search .search-dialog .local-search__hit-item .search-right { + width: 60%; +} +#local-search .search-dialog .local-search__hit-item .search-left img { + object-fit: cover; + width: 100%; + background: var(--anzhiyu-secondbg); + border-radius: 8px; +} +#local-search .search-dialog .local-search__hit-item .search-result { + cursor: pointer; +} +#local-search .tag-list { + padding: 4px 8px; + border-radius: 8px; + margin-right: 0.5rem; + margin-top: 0.5rem; + border: var(--style-border); + cursor: pointer; +} +#local-search .search-dialog .local-search__hit-item .tag-list { + display: inline; +} +#local-search .search-dialog .local-search__hit-item .tag-list:hover { + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} + +b, strong { + color: var(--anzhiyu-lighttext); +} +.about-reward { + position: absolute; + top: 1rem; + right: 2rem; +} +@media screen and (max-width: 768px) { + .reward .about-reward #con { + width: 170px; + } + .reward #tube-con { + display: none; + } +} + +[data-theme="dark"] body[data-type="room"] #page { + background: #000 !important; +} +body[data-type="room"] #page { + border: 0; + box-shadow: none !important; + padding: 0 !important; + background: transparent !important; +} +body[data-type="room"] #page .page-title { + display: none; +} +#room_page .banner-button-group { + position: absolute; + bottom: 0.8rem; + right: 2rem; +} +#room_page .banner-button-group .banner-button:hover { + background: var(--anzhiyu-card-bg); + color: var(--font-color); +} +#room_page .banner-button-group .banner-button i, +#room_page .banner-button-group .banner-button svg { + margin-right: 8px; +} +#room_page .banner-button-group .banner-button { + height: 40px; + width: 140px; + border-radius: 20px; + justify-content: center; + color: var(--anzhiyu-white); + background: var(--anzhiyu-theme); + display: flex; + align-items: center; + z-index: 1; + transition: 0.3s; + cursor: pointer; + border-bottom: 0 !important; +} + +#room_page .description { + margin: 20px auto 20px; + border-radius: 24px; + background: var(--anzhiyu-card-bg); + border: var(--style-border-always); + box-shadow: var(--anzhiyu-shadow-border); + position: relative; + padding: 1rem 2rem; + overflow: hidden; +} + +#room_page *, +#room_page *::after, +#room_page *::before { + margin: 0; + padding: 0; + box-sizing: border-box; + user-select: none; + transform-style: preserve-3d; + -webkit-tap-highlight-color: transparent; +} + +/* Generic */ +#room_page { + margin-top: 590px; +} + +#room_page .face { + position: absolute; +} + +/***************/ +#room_page .house { + position: absolute; + width: 28vw; + height: 28vw; + transform: perspective(90vw) rotateX(75deg) rotateZ(45deg) translateZ(-9vw); + left: 45%; + top: 100px; +} + +#room_page .h-shadow { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 1.5vw -3vw 3vw black, 1.5vw 0.5vw 1.5vw black; +} + +#room_page .h-lights { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + width: 45vw; + height: 45vw; +} + +.h-light { + position: absolute; +} + +.h-light:nth-of-type(1) { + bottom: 5vw; + right: 0; + width: 14vw; + height: 14vw; + border-radius: 50%; + background-image: radial-gradient(#1b182a, transparent); + filter: blur(1vw); +} + +.h-light:nth-of-type(2) { + bottom: 18vw; + right: -1vw; + width: 2vw; + height: 12vw; + border-radius: 50%; + transform: rotateZ(-50deg); + background-image: radial-gradient(rgba(81, 137, 251, 0.45) 50%, rgba(40, 125, 210, 0.45), transparent); + box-shadow: -1vw -1vw 2vw 1vw rgba(131, 171, 252, 0.1); + filter: blur(1vw); +} + +.h-light:nth-of-type(3) { + bottom: -2vw; + right: 17vw; + width: 5vw; + height: 12vw; + border-radius: 50%; + transform: rotateZ(-50deg); + background-image: radial-gradient(rgba(81, 137, 251, 0.5) 50%, rgba(40, 125, 210, 0.5), transparent); + filter: blur(2vw); +} + +.h-light:nth-of-type(3)::before, +.h-light:nth-of-type(3)::after { + content: ""; + position: absolute; + width: 200%; + top: -6vw; + height: 150%; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.1), rgba(81, 137, 251, 0.1), transparent); + border-top-left-radius: 10vw; + border-top-right-radius: 10vw; + filter: blur(1.5vw); +} + +.h-light:nth-of-type(3)::before { + right: -50%; + transform-origin: top right; + transform: rotateZ(15deg); + box-shadow: -2vw -2vw 0 rgba(81, 137, 251, 0.075); +} + +.h-light:nth-of-type(3)::after { + left: -50%; + transform-origin: top left; + transform: rotateZ(-15deg); + box-shadow: 2vw -2vw 0 rgba(81, 137, 251, 0.075); +} + +.h-light:nth-of-type(4) { + bottom: 5vw; + left: 8vw; + width: 28vw; + height: 4vw; + transform-origin: top left; + transform: skewX(58deg); + background-image: linear-gradient( + to right, + rgba(81, 137, 251, 0.075) 10%, + transparent 25%, + transparent, + rgba(0, 0, 0, 0.15) + ); + filter: blur(0.25vw); +} + +.h-light:nth-of-type(6) { + bottom: 14vw; + right: 2vw; + width: 8vw; + height: 16vw; + transform-origin: bottom left; + transform: skewY(49deg); + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.7)); + filter: blur(0.35vw); +} + +/***************/ +/***************/ +.alt { + position: absolute; + left: 0; + top: 0; + width: 27vw; + height: 27vw; +} + +.alt__front { + width: 27vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(26.5vw); +} + +.alt__back { + width: 27vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-27vw) translateY(-0.5vw); +} + +.alt__right { + width: 27vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(27vw) translateX(-27vw) translateY(-0.5vw); +} + +.alt__left { + width: 27vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} + +.alt__top { + width: 27vw; + height: 27vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} + +.alt__bottom { + width: 27vw; + height: 27vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-27vw); +} + +.alt__front { + background-color: #9e99c1; +} + +.alt__back { + background-color: #383358; +} + +.alt__right { + background-color: #383358; +} + +.alt__left { + background-color: #fbfafe; +} + +.alt__top { + background-image: linear-gradient(to bottom, #0b0c1f, #383358, #9e99c1); +} + +.alt__top .light:nth-of-type(1) { + position: absolute; + height: 100%; + width: 100%; + background-image: linear-gradient(to bottom, rgba(20, 61, 103, 0.75), rgba(81, 137, 251, 0.75), transparent); +} + +.alt__top .light:nth-of-type(2) { + position: absolute; + left: 4vw; + height: 100%; + width: 6vw; + background-image: linear-gradient(to bottom, transparent 20%, rgba(40, 125, 210, 0.75), rgba(81, 137, 251, 0.25) 80%); + filter: blur(0.1vw); +} + +.alt__top .light:nth-of-type(3) { + position: absolute; + bottom: 10vw; + left: 5vw; + width: 6vw; + height: 3vw; + border-radius: 50%; + transform: rotateZ(42deg); + background-image: radial-gradient(rgba(131, 171, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.55vw); +} + +.alt__top .light:nth-of-type(4) { + position: absolute; + bottom: 7vw; + left: 4vw; + width: 8.5vw; + height: 2vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(131, 171, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.55vw); +} + +.alt__top .light:nth-of-type(5) { + position: absolute; + bottom: 3.5vw; + left: 4.5vw; + width: 6vw; + height: 2vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(141, 178, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.75vw); +} + +.alt__top .light:nth-of-type(6) { + position: absolute; + bottom: 3vw; + left: 0.5vw; + width: 4vw; + height: 2vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(141, 178, 252, 0.75) 50%, rgba(32, 99, 167, 0.75)); + filter: blur(0.35vw); +} + +.alt__top .light:nth-of-type(7) { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, black, #5189fb 10%, transparent 20%); +} + +.alt__top .light:nth-of-type(7)::before { + content: ""; + position: absolute; + width: 20%; + height: 100%; + background-image: linear-gradient(to right, rgba(5, 70, 199, 0.6), transparent 60%); +} + +.alt__top .light:nth-of-type(7)::after { + content: ""; + position: absolute; + width: 100%; + height: 20%; + background-image: linear-gradient(to bottom, rgba(6, 78, 224, 0.5), transparent 60%); +} + +.alt__top .light:nth-of-type(8) { + position: absolute; + bottom: 5vw; + left: 10vw; + width: 6vw; + height: 4vw; + border-radius: 50%; + transform: rotateZ(40deg); + background-image: radial-gradient(rgba(255, 255, 255, 0.1) 50%, rgba(128, 121, 174, 0.1)); + filter: blur(0.8vw); +} + +.alt__bottom { + background-color: #383358; +} + +.alb { + position: absolute; + left: 0; + bottom: 0; + width: 27vw; + height: 1vw; +} + +.alb__front { + width: 27vw; + height: 2vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-1vw); +} + +.alb__back { + width: 27vw; + height: 2vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-27vw) translateY(-2vw); +} + +.alb__right { + width: 1vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(27vw) translateX(-1vw) translateY(-2vw); +} + +.alb__left { + width: 1vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-2vw); +} + +.alb__top { + width: 27vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(2vw); +} + +.alb__bottom { + width: 27vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-27vw); +} + +.alb__front { + background-image: linear-gradient(to right, #9e99c1 40%, #8f89b7); +} + +.alb__back { + background-color: #383358; +} + +.alb__right { + background-color: #383358; +} + +.alb__left { + background-color: #fbfafe; +} + +.alb__top { + background-image: linear-gradient(to right, #fbfafe 40%, #eae5fa); +} + +.alb__bottom { + background-color: #383358; +} + +.arb { + position: absolute; + right: 0; + bottom: 0; + width: 1vw; + height: 28vw; +} + +.arb__front { + width: 1vw; + height: 2vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(26vw); +} + +.arb__back { + width: 1vw; + height: 2vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-2vw); +} + +.arb__right { + width: 28vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-28vw) translateY(-2vw); +} + +.arb__left { + width: 28vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-2vw); +} + +.arb__top { + width: 1vw; + height: 28vw; + transform-origin: top left; + transform: translateZ(2vw); +} + +.arb__bottom { + width: 1vw; + height: 28vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.arb__front { + background-color: #8f89b7; +} + +.arb__back { + background-color: #383358; +} + +.arb__right { + background-image: linear-gradient(to right, #282347 40%, #0f0e17); +} + +.arb__left { + background-color: #9e99c1; +} + +.arb__top { + background-image: linear-gradient(to top, #fbfafe, #3b3469 25%, #2e2a48 75%, #9e99c1); +} + +.arb__top::before { + content: ""; + position: absolute; + width: 100%; + height: 30%; + top: 0; + background-image: linear-gradient(to bottom, transparent, rgba(81, 137, 251, 0.85), transparent); +} + +.arb__bottom { + background-color: #383358; +} + +/***************/ +/***************/ +.blt { + position: absolute; + left: 0; + top: 0; + width: 1vw; + height: 27vw; + transform: translateZ(0.5vw); +} + +.blt__front { + width: 1vw; + height: 20vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(7vw); +} + +.blt__back { + width: 1vw; + height: 20vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-20vw); +} + +.blt__right { + width: 27vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-27vw) translateY(-20vw); +} + +.blt__left { + width: 27vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-20vw); +} + +.blt__top { + width: 1vw; + height: 27vw; + transform-origin: top left; + transform: translateZ(20vw); +} + +.blt__bottom { + width: 1vw; + height: 27vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.blt__front { + background-image: linear-gradient(to bottom, #383358, #9e99c1); +} + +.blt__back { + background-color: #383358; +} + +.blt__right { + background-image: linear-gradient(to bottom, #151225, #383358, #383358 90%, #242040); +} + +.blt__right::before { + content: ""; + position: absolute; + bottom: 0; + width: 100%; + height: 0.75vw; + background-image: linear-gradient(to bottom, #8f89b7, #287dd2); + border-top: 0.1vw solid #282347; + border-bottom: 0.1vw solid #282347; +} + +.blt__right::after { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + to bottom, + rgba(6, 78, 224, 0.35), + transparent 30%, + transparent 70%, + rgba(40, 125, 210, 0.35) + ); +} + +.blt__left { + background-color: #fbfafe; +} + +.blt__bottom { + background-color: #383358; +} + +.blt2 { + position: absolute; + left: 0; + top: 0; + width: 2vw; + height: 27vw; + transform: translateZ(20.5vw); +} + +.blt2__front { + width: 2vw; + height: 0.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(26.25vw); +} + +.blt2__back { + width: 2vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-2vw) translateY(-0.75vw); +} + +.blt2__right { + width: 27vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(2vw) translateX(-27vw) translateY(-0.75vw); +} + +.blt2__left { + width: 27vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.75vw); +} + +.blt2__top { + width: 2vw; + height: 27vw; + transform-origin: top left; + transform: translateZ(0.75vw); +} + +.blt2__bottom { + width: 2vw; + height: 27vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-2vw); +} + +.blt2__front { + background-color: #383358; +} + +.blt2__back { + background-color: #383358; +} + +.blt2__right { + background-image: linear-gradient(to right, #8f89b7, #9e99c1, #7169a4); +} + +.blt2__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + border-bottom: 0.1vw solid rgba(251, 250, 254, 0.75); + background-image: linear-gradient(to top, rgba(81, 137, 251, 0.35), transparent); +} + +.blt2__left { + background-color: #fbfafe; +} + +.blt2__top { + background-image: linear-gradient(to top, #9e99c1, #fbfafe); +} + +.blt2__bottom { + background-color: #383358; +} + +.blb { + position: absolute; + left: 1vw; + top: 0; + width: 26vw; + height: 1vw; + transform: translateZ(0.5vw); +} + +.blb__front { + width: 26vw; + height: 20vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-19vw); +} + +.blb__back { + width: 26vw; + height: 20vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-26vw) translateY(-20vw); +} + +.blb__right { + width: 1vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(26vw) translateX(-1vw) translateY(-20vw); +} + +.blb__left { + width: 1vw; + height: 20vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-20vw); +} + +.blb__top { + width: 26vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(20vw); +} + +.blb__bottom { + width: 26vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-26vw); +} + +.blb__front { + background-image: linear-gradient(to bottom, #4b4572, #595388 20%, #4b4572); +} + +.blb__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + to bottom, + rgba(40, 125, 210, 0.25), + transparent 20%, + transparent 80%, + rgba(40, 125, 210, 0.5) + ), + linear-gradient(to right, rgba(31, 33, 88, 0.35), transparent), + linear-gradient(to bottom, rgba(31, 33, 88, 0.35), transparent), + linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent 20%, transparent 80%, rgba(40, 125, 210, 0.25)); +} + +.blb__front::after { + content: ""; + position: absolute; + bottom: 0; + width: 100%; + height: 0.75vw; + background-image: linear-gradient(to bottom, #8f89b7, #287dd2); + border-top: 0.1vw solid #282347; + border-bottom: 0.1vw solid #282347; +} + +.blb__back { + background-color: #383358; +} + +.blb__right { + background-image: linear-gradient(to bottom, #151225, #0f0e17 80%, #151225); +} + +.blb__bottom { + background-color: #383358; +} + +.blb2 { + position: absolute; + left: 2vw; + top: 0; + width: 25vw; + height: 1vw; + transform: translateZ(20.5vw); +} + +.blb2__front { + width: 25vw; + height: 0.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(1.25vw); +} + +.blb2__back { + width: 25vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-25vw) translateY(-0.75vw); +} + +.blb2__right { + width: 2vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(25vw) translateX(-2vw) translateY(-0.75vw); +} + +.blb2__left { + width: 2vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.75vw); +} + +.blb2__top { + width: 25vw; + height: 2vw; + transform-origin: top left; + transform: translateZ(0.75vw); +} + +.blb2__bottom { + width: 25vw; + height: 2vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-25vw); +} + +.blb2__front { + background-image: linear-gradient(to right, #7169a4, #9e99c1, #8f89b7); +} + +.blb2__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + border-bottom: 0.1vw solid rgba(251, 250, 254, 0.75); + background-image: linear-gradient(to top, rgba(40, 125, 210, 0.25), transparent); +} + +.blb2__back { + background-color: #383358; +} + +.blb2__right { + background-color: #151225; +} + +.blb2__left { + background-color: #9e99c1; +} + +.blb2__top { + background-image: linear-gradient(to left, #9e99c1, #fbfafe); +} + +.blb2__bottom { + background-color: #383358; +} + +/***************/ +/***************/ +.bocina-l, +.bocina-r { + position: absolute; + left: 1.5vw; + bottom: 5.25vw; + width: 0.75vw; + height: 1.5vw; + transform: translateZ(8vw); +} + +.bocina-l__front, +.bocina-r__front { + width: 0.75vw; + height: 6vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-4.5vw); +} + +.bocina-l__back, +.bocina-r__back { + width: 0.75vw; + height: 6vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.75vw) translateY(-6vw); +} + +.bocina-l__right, +.bocina-r__right { + width: 1.5vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.75vw) translateX(-1.5vw) translateY(-6vw); +} + +.bocina-l__left, +.bocina-r__left { + width: 1.5vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-6vw); +} + +.bocina-l__top, +.bocina-r__top { + width: 0.75vw; + height: 1.5vw; + transform-origin: top left; + transform: translateZ(6vw); +} + +.bocina-l__bottom, +.bocina-r__bottom { + width: 0.75vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.75vw); +} + +.bocina-l__right, +.bocina-r__right { + background-image: radial-gradient(black, black); +} + +.bocina-l__top, +.bocina-r__top { + background-image: linear-gradient(to left, #d9d0f6, #9e99c1, #7169a4); +} + +.bocina-l__bottom, +.bocina-r__bottom { + background-color: #383358; +} + +.bocina-l__front { + background-image: linear-gradient(to right, #5189fb, #595388 30%, #b7a5ed); +} + +.bocina-l__back { + background-image: linear-gradient(to right, #383358, #232038); +} + +.bocina-l__back::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(81, 137, 251, 0.35) 65%, rgba(81, 137, 251, 0.95)); +} + +.bocina-l__left { + background-color: #282347; +} + +.bocina-l__left::before { + content: ""; + position: absolute; + top: -10%; + left: 20%; + width: 120%; + height: 120%; + background-image: linear-gradient(to left, rgba(7, 23, 39, 0.75), rgba(0, 0, 0, 0.75)); + filter: blur(0.5vw); +} + +.bocina-r { + top: 5.25vw; +} + +.bocina-r__front { + background-image: linear-gradient(to right, #383358, #0f0e17); +} + +.bocina-r__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to left, rgba(81, 137, 251, 0.35) 65%, rgba(81, 137, 251, 0.95)); +} + +.bocina-r__back { + background-image: linear-gradient(to right, #595388, #b7a5ed); +} + +.bocina-r__left { + background-color: #282347; +} + +.bocina-r__left::before { + content: ""; + position: absolute; + top: -10%; + left: -20%; + width: 120%; + height: 120%; + background-image: linear-gradient(to right, rgba(7, 23, 39, 0.75), rgba(0, 0, 0, 0.75)); + filter: blur(0.5vw); +} + +.repisa-t, +.repisa-b { + position: absolute; + left: 1.5vw; + top: 9vw; + width: 1.5vw; + height: 10vw; + transform: translateZ(16vw); +} + +.repisa-t__front, +.repisa-b__front { + width: 1.5vw; + height: 0.25vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(9.75vw); +} + +.repisa-t__back, +.repisa-b__back { + width: 1.5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1.5vw) translateY(-0.25vw); +} + +.repisa-t__right, +.repisa-b__right { + width: 10vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1.5vw) translateX(-10vw) translateY(-0.25vw); +} + +.repisa-t__left, +.repisa-b__left { + width: 10vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.25vw); +} + +.repisa-t__top, +.repisa-b__top { + width: 1.5vw; + height: 10vw; + transform-origin: top left; + transform: translateZ(0.25vw); +} + +.repisa-t__bottom, +.repisa-b__bottom { + width: 1.5vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1.5vw); +} + +.repisa-t__front, +.repisa-b__front { + background-color: #9e99c1; +} + +.repisa-t__back, +.repisa-b__back { + background-color: #fbfafe; +} + +.repisa-t__right, +.repisa-b__right { + background-color: #8079ae; +} + +.repisa-t__left, +.repisa-b__left { + background-color: #fbfafe; +} + +.repisa-t__top, +.repisa-b__top { + background-color: #d9d0f6; +} + +.repisa-t__top::before, +.repisa-b__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(6, 78, 224, 0.75), transparent); +} + +.repisa-t__bottom, +.repisa-b__bottom { + background-color: #383358; +} + +.repisa-t__bottom::before, +.repisa-b__bottom::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(6, 78, 224, 0.75), transparent); +} + +.repisa-b { + transform: translateZ(5vw); +} + +.tv { + position: absolute; + left: 1.51vw; + top: 8vw; + width: 0.5vw; + height: 12vw; + transform: translateZ(8vw); +} + +.tv__front { + width: 0.5vw; + height: 6vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(6vw); +} + +.tv__back { + width: 0.5vw; + height: 6vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-6vw); +} + +.tv__right { + width: 12vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-12vw) translateY(-6vw); +} + +.tv__left { + width: 12vw; + height: 6vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-6vw); +} + +.tv__top { + width: 0.5vw; + height: 12vw; + transform-origin: top left; + transform: translateZ(6vw); +} + +.tv__bottom { + width: 0.5vw; + height: 12vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.tv__front { + background-color: #0b0c1f; +} + +.tv__back { + background-color: #0b0c1f; +} + +.tv__right { + background-color: #9cbcfc; + border: 0.125vw solid black; + animation: pantalla-tv 0.25s infinite alternate; +} + +.tv__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + box-shadow: 0.125vw 0.125vw 1vw rgba(81, 137, 251, 0.5), -0.125vw 0.125vw 1vw rgba(81, 137, 251, 0.5), + 0.125vw -0.125vw 1vw rgba(81, 137, 251, 0.5), -0.125vw -0.125vw 1vw rgba(81, 137, 251, 0.5); + background-image: url("https://img02.anheyu.com/adminuploads/1/2022/10/20/6351038493d46.gif"); + background-size: cover; + background-repeat: no-repeat; + background-position: bottom; + opacity: 0.8; +} + +.tv__left { + display: flex; + justify-content: center; + align-items: center; + background-color: #0b0c1f; +} + +.tv__left::before { + content: ""; + position: absolute; + width: 13vw; + height: 7vw; + background-image: radial-gradient(rgba(36, 112, 188, 0.95), rgba(56, 121, 250, 0.95)); + filter: blur(1.25vw); + animation: luz-tv 0.25s infinite alternate; +} + +.tv__top { + background-color: #0b0c1f; +} + +.tv__bottom { + background-color: #0b0c1f; +} + +.librero { + position: absolute; + left: 13vw; + top: 1vw; + width: 12vw; + height: 0.5vw; + transform: translateZ(7vw); +} + +.librero__front { + width: 12vw; + height: 0.25vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(1.25vw); +} + +.librero__back { + width: 12vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-12vw) translateY(-0.25vw); +} + +.librero__right { + width: 1.5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(12vw) translateX(-1.5vw) translateY(-0.25vw); +} + +.librero__left { + width: 1.5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.25vw); +} + +.librero__top { + width: 12vw; + height: 1.5vw; + transform-origin: top left; + transform: translateZ(0.25vw); +} + +.librero__bottom { + width: 12vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-12vw); +} + +.librero__front { + background-color: #9e99c1; +} + +.librero__back { + background-color: #383358; +} + +.librero__back::before { + content: ""; + position: absolute; + width: 100%; + height: 4vw; + border-radius: 50%; + background-image: radial-gradient(rgba(106, 154, 251, 0.7) 50%, rgba(32, 99, 167, 0.6), transparent); + filter: blur(1.25vw); +} + +.librero__right { + background-color: #383358; +} + +.librero__left { + background-color: #9e99c1; +} + +.librero__top { + background-color: #d9d0f6; +} + +.librero__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(31, 104, 249, 0.75), transparent); +} + +.librero__bottom { + background-color: #383358; +} + +.librero__bottom::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(31, 104, 249, 0.75), transparent); +} + +.libros { + position: absolute; +} + +.libro { + position: absolute; + top: 1vw; + width: 0.5vw; + height: 1vw; + transform: translateZ(7.25vw); +} + +.libro__front { + width: 0.5vw; + height: 1.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-0.5vw); +} + +.libro__back { + width: 0.5vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-1.5vw); +} + +.libro__right { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-1vw) translateY(-1.5vw); +} + +.libro__left { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1.5vw); +} + +.libro__top { + width: 0.5vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(1.5vw); +} + +.libro__bottom { + width: 0.5vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.libro__front { + background-image: linear-gradient(to bottom, #9e99c1, #8079ae); +} + +.libro__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.4), transparent); +} + +.libro__back { + background-color: #fbfafe; +} + +.libro__right { + background-color: #645c98; +} + +.libro__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.libro__left { + background-color: #9e99c1; +} + +.libro__top { + background-color: #d9d0f6; +} + +.libro__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.libro__bottom { + background-color: #554d85; +} + +.libro:nth-of-type(1) { + left: 16vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateZ(-10deg); +} + +.libro:nth-of-type(2) { + left: 17vw; + transform: translateZ(7.25vw) rotateZ(2deg); +} + +.libro:nth-of-type(3) { + left: 17.75vw; + transform: translateZ(7.25vw) rotateZ(5deg); +} + +.libro:nth-of-type(4) { + left: 19vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateZ(10deg); +} + +.libro:nth-of-type(5) { + left: 20vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateZ(10deg); +} + +.libro:nth-of-type(6) { + left: 23vw; + transform-origin: left; + transform: translateZ(7.25vw) rotateY(-90deg); +} + +.fotos { + position: absolute; +} + +.foto { + position: absolute; + width: 0.125vw; + height: 2vw; + left: 2vw; + top: 11vw; + transform: translateZ(5.26vw); +} + +.foto__front { + width: 0.125vw; + height: 1.125vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(1.125vw); +} + +.foto__back { + width: 0.125vw; + height: 1.125vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.125vw) translateY(-1.125vw); +} + +.foto__right { + width: 2.25vw; + height: 1.125vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.125vw) translateX(-2.25vw) translateY(-1.125vw); +} + +.foto__left { + width: 2.25vw; + height: 1.125vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1.125vw); +} + +.foto__top { + width: 0.125vw; + height: 2.25vw; + transform-origin: top left; + transform: translateZ(1.125vw); +} + +.foto__bottom { + width: 0.125vw; + height: 2.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.125vw); +} + +.foto__front { + background-image: linear-gradient(to bottom, #9e99c1, #8079ae); +} + +.foto__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.4), transparent); +} + +.foto__back { + background-color: #fbfafe; +} + +.foto__right { + display: flex; + justify-content: center; + align-items: center; + background-color: #8f89b7; + border: 0.15vw solid #1f2158; +} + +.foto__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: repeating-linear-gradient(to bottom, #9e99c1 0.1vw, #b7a5ed 0.2vw); +} + +.foto__left { + background-color: #9e99c1; +} + +.foto__top { + background-color: #d9d0f6; +} + +.foto__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.foto__bottom { + background-color: #595388; +} + +.foto__bottom::before { + content: ""; + position: absolute; + right: -100%; + width: 400%; + height: 100%; + background-color: rgba(11, 12, 31, 0.75); + filter: blur(0.15vw); +} + +.foto:nth-of-type(1) { + top: 10.5vw; + transform: translateZ(5.26vw) rotateZ(5deg); +} + +.foto:nth-of-type(2) { + top: 15vw; + transform: translateZ(5.26vw) rotateZ(-15deg); +} + +.cajas { + position: absolute; +} + +.caja { + position: absolute; + width: 1vw; + height: 1.5vw; + left: 2vw; + transform: translateZ(16.35vw); +} + +.caja__front { + width: 1vw; + height: 0.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(0.75vw); +} + +.caja__back { + width: 1vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-0.75vw); +} + +.caja__right { + width: 1.5vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-1.5vw) translateY(-0.75vw); +} + +.caja__left { + width: 1.5vw; + height: 0.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.75vw); +} + +.caja__top { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: translateZ(0.75vw); +} + +.caja__bottom { + width: 1vw; + height: 1.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.caja__front { + background-image: linear-gradient(to bottom, #9e99c1, #8079ae); +} + +.caja__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.4), transparent); +} + +.caja__back { + background-color: #9e99c1; +} + +.caja__right { + background-color: #645c98; +} + +.caja__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.caja__left { + background-color: #9e99c1; +} + +.caja__top { + background-color: #d9d0f6; +} + +.caja__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(81, 137, 251, 0.85), rgba(40, 125, 210, 0.35)); +} + +.caja__bottom { + background-color: #595388; +} + +.caja__bottom::before { + content: ""; + position: absolute; + right: -50%; + width: 150%; + height: 120%; + background-color: rgba(31, 33, 88, 0.5); + filter: blur(0.15vw); +} + +.caja:nth-of-type(1) { + top: 11.6vw; +} + +.caja:nth-of-type(2) { + top: 13.5vw; +} + +.caja:nth-of-type(3) { + top: 17vw; +} + +.cuadro-l, +.cuadro-r { + position: absolute; + left: 13vw; + top: 1vw; + width: 5vw; + height: 0.5vw; + transform: translateZ(10vw); +} + +.cuadro-l__front, +.cuadro-r__front { + width: 5vw; + height: 7vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-6.75vw); +} + +.cuadro-l__back, +.cuadro-r__back { + width: 5vw; + height: 7vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-5vw) translateY(-7vw); +} + +.cuadro-l__right, +.cuadro-r__right { + width: 0.25vw; + height: 7vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(5vw) translateX(-0.25vw) translateY(-7vw); +} + +.cuadro-l__left, +.cuadro-r__left { + width: 0.25vw; + height: 7vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-7vw); +} + +.cuadro-l__top, +.cuadro-r__top { + width: 5vw; + height: 0.25vw; + transform-origin: top left; + transform: translateZ(7vw); +} + +.cuadro-l__bottom, +.cuadro-r__bottom { + width: 5vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-5vw); +} + +.cuadro-l__front, +.cuadro-r__front { + background-repeat: no-repeat; + background-size: contain; + background-position: center; +} + +.cuadro-l__back, +.cuadro-r__back { + background-color: #383358; + box-shadow: 0.35vw 0.35vw 0.35vw rgba(81, 137, 251, 0.2), -0.35vw 0.35vw 0.35vw rgba(81, 137, 251, 0.2), + -0.35vw -0.35vw 0.35vw rgba(81, 137, 251, 0.2), 0.35vw -0.35vw 0.35vw rgba(81, 137, 251, 0.2); +} + +.cuadro-l__right, +.cuadro-r__right { + background-color: #383358; +} + +.cuadro-l__left, +.cuadro-r__left { + background-color: #9e99c1; +} + +.cuadro-l__top, +.cuadro-r__top { + background-color: #9e99c1; +} + +.cuadro-l__bottom, +.cuadro-r__bottom { + background-color: #383358; +} + +.cuadro-l__front { + background-image: url("https://img02.anheyu.com/adminuploads/1/2022/10/20/63510384967db.jpg"); + background-color: #d51e24; + border: 1vw solid #d51e24; +} + +.cuadro-l__front::before { + content: ""; + position: absolute; + top: -1vw; + left: -1vw; + width: 5vw; + height: 7vw; + background-origin: padding-box; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.15), rgba(40, 125, 210, 0.15)); +} + +.cuadro-r { + left: 20vw; +} + +.cuadro-r__front { + background-image: url("https://img02.anheyu.com/adminuploads/1/2022/10/20/6351038496f25.jpg"); + background-color: #0f1110; + border: 0.5vw solid #0f1110; +} + +.cuadro-r__front::before { + content: ""; + position: absolute; + top: -0.5vw; + left: -0.5vw; + width: 5vw; + height: 7vw; + background-origin: padding-box; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.15), rgba(40, 125, 210, 0.15)); +} + +.puerta-c { + position: absolute; + left: 3vw; + top: 1vw; + width: 8vw; + height: 0.5vw; + transform: translateZ(0.5vw); +} + +.puerta-c::before { + content: ""; + position: absolute; + width: 100%; + height: 200%; + background-color: rgba(0, 0, 0, 0.65); + filter: blur(0.5vw); +} + +.puerta { + position: absolute; + left: 0.5vw; + top: 0; + width: 7vw; + height: 0.5vw; +} + +.puerta__front { + width: 7vw; + height: 16vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-15.75vw); +} + +.puerta__back { + width: 7vw; + height: 16vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-7vw) translateY(-16vw); +} + +.puerta__right { + width: 0.25vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(7vw) translateX(-0.25vw) translateY(-16vw); +} + +.puerta__left { + width: 0.25vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-16vw); +} + +.puerta__top { + width: 7vw; + height: 0.25vw; + transform-origin: top left; + transform: translateZ(16vw); +} + +.puerta__bottom { + width: 7vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-7vw); +} + +.puerta__front { + background-image: linear-gradient(to bottom, #0f1110, #121332); + border: 0.125vw solid #5189fb; +} + +.puerta__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: radial-gradient(transparent 50%, rgba(4, 61, 174, 0.25)); + box-shadow: 0.65vw 0.65vw 0.5vw rgba(81, 137, 251, 0.6), -0.65vw 0.65vw 0.5vw rgba(81, 137, 251, 0.6), + -0.65vw -0.65vw 0.5vw rgba(81, 137, 251, 0.6), 0.65vw -0.65vw 0.5vw rgba(81, 137, 251, 0.6); +} + +.puerta__front::after { + content: ""; + position: absolute; + top: 50%; + right: 0.75vw; + width: 1vw; + height: 0.25vw; + background-color: #9e99c1; + box-shadow: 0.125vw 0.125vw 0.25vw rgba(81, 137, 251, 0.6), -0.125vw 0.125vw 0.25vw rgba(81, 137, 251, 0.6), + -0.125vw -0.125vw 0.25vw rgba(81, 137, 251, 0.6), 0.125vw -0.125vw 0.25vw rgba(81, 137, 251, 0.6); +} + +.puerta-l, +.puerta-r { + position: absolute; + left: 0; + top: 0; + width: 0.5vw; + height: 0.5vw; +} + +.puerta-l__front, +.puerta-r__front { + width: 0.5vw; + height: 16vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-15.5vw); +} + +.puerta-l__back, +.puerta-r__back { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-16vw); +} + +.puerta-l__right, +.puerta-r__right { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-0.5vw) translateY(-16vw); +} + +.puerta-l__left, +.puerta-r__left { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-16vw); +} + +.puerta-l__top, +.puerta-r__top { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: translateZ(16vw); +} + +.puerta-l__bottom, +.puerta-r__bottom { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.puerta-l__front, +.puerta-r__front { + background-color: #121332; +} + +.puerta-l__back, +.puerta-r__back { + background-color: #0b0c1f; +} + +.puerta-l__right, +.puerta-r__right { + background-color: #0b0c1f; +} + +.puerta-l__left, +.puerta-r__left { + background-color: #121332; +} + +.puerta-l__bottom, +.puerta-r__bottom { + background-color: #0b0c1f; +} + +.puerta-r { + left: calc(100% - 0.5vw); +} + +.puerta-t { + left: 0; + top: 0; + width: 8vw; + height: 0.5vw; + transform: translateZ(16vw); +} + +.puerta-t__front { + width: 8vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(0vw); +} + +.puerta-t__back { + width: 8vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-8vw) translateY(-0.5vw); +} + +.puerta-t__right { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(8vw) translateX(-0.5vw) translateY(-0.5vw); +} + +.puerta-t__left { + width: 0.5vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} + +.puerta-t__top { + width: 8vw; + height: 0.5vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} + +.puerta-t__bottom { + width: 8vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-8vw); +} + +.puerta-t__front { + background-color: #121332; +} + +.puerta-t__back { + background-color: #0b0c1f; +} + +.puerta-t__right { + background-color: #0b0c1f; +} + +.puerta-t__left { + background-color: #121332; +} + +.puerta-t__top { + background-color: #1f2158; +} + +.puerta-t__bottom { + background-color: #0b0c1f; +} + +.muro { + position: absolute; + left: 1vw; + top: 6vw; + width: 0.5vw; + height: 16vw; + transform: translateZ(0.51vw); +} + +.muro__front { + width: 0.5vw; + height: 18vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-2vw); +} + +.muro__back { + width: 0.5vw; + height: 18vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.5vw) translateY(-18vw); +} + +.muro__right { + width: 16vw; + height: 18vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.5vw) translateX(-16vw) translateY(-18vw); +} + +.muro__left { + width: 16vw; + height: 18vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-18vw); +} + +.muro__top { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: translateZ(18vw); +} + +.muro__bottom { + width: 0.5vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.5vw); +} + +.muro__front { + background-color: #0b0c1f; +} + +.muro__back { + background-color: #0b0c1f; +} + +.muro__right { + display: flex; + justify-content: center; + background-image: radial-gradient(circle, #1f2158, #0b0c1f); + overflow: hidden; +} + +.muro__right::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + to bottom, + rgba(40, 125, 210, 0.25), + transparent 30%, + transparent 70%, + rgba(40, 125, 210, 0.15) + ); +} + +.muro__right::after { + content: ""; + position: absolute; + bottom: 0; + left: 5%; + width: 90%; + height: 25%; + background-image: linear-gradient(to bottom, rgba(4, 5, 13, 0.75), rgba(4, 5, 13, 0.95)); + filter: blur(0.75vw); +} + +.muro__left { + background-color: #0b0c1f; + box-shadow: 0.5vw 0.5vw 0.6vw rgba(81, 137, 251, 0.3), 0.5vw -0.5vw 0.6vw rgba(81, 137, 251, 0.3), + -0.5vw 0.5vw 0.6vw rgba(81, 137, 251, 0.3), -0.5vw -0.5vw 0.6vw rgba(81, 137, 251, 0.3); +} + +.muro__top { + background-color: #0b0c1f; +} + +.muro__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + background-image: linear-gradient(to left, rgba(40, 125, 210, 0.5), rgba(81, 137, 251, 0.25)); +} + +.muro__bottom { + background-color: #0b0c1f; +} + +.muro__bottom::before { + content: ""; + position: absolute; + top: 0; + right: 0; + width: 5vw; + height: 100%; + background-image: linear-gradient(to left, #0b0c1f, transparent 50%); + transform-origin: right bottom; + transform: skewY(-20deg); + filter: blur(0.25vw); +} + +.sillon-c { + position: absolute; + right: 2vw; + bottom: 6vw; + width: 6vw; + height: 16vw; + transform: translateZ(0.5vw); +} + +.sillon-c::before { + content: ""; + position: absolute; + top: -10%; + left: -10%; + width: 120%; + height: 120%; + background-color: rgba(11, 12, 31, 0.85); + filter: blur(0.75vw); +} + +.sillon-b { + position: absolute; + left: 0; + top: 1vw; + width: 6vw; + height: 14vw; +} + +.sillon-b__front { + width: 6vw; + height: 3vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(11vw); +} + +.sillon-b__back { + width: 6vw; + height: 3vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-6vw) translateY(-3vw); +} + +.sillon-b__right { + width: 14vw; + height: 3vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(6vw) translateX(-14vw) translateY(-3vw); +} + +.sillon-b__left { + width: 14vw; + height: 3vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-3vw); +} + +.sillon-b__top { + width: 6vw; + height: 14vw; + transform-origin: top left; + transform: translateZ(3vw); +} + +.sillon-b__bottom { + width: 6vw; + height: 14vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-6vw); +} + +.sillon-b__front { + background-color: #121332; +} + +.sillon-b__back { + background-color: #0b0c1f; +} + +.sillon-b__right { + background-color: #0b0c1f; +} + +.sillon-b__left { + background-image: linear-gradient(to bottom, #121332, #0b0c1f); +} + +.sillon-b__left::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, rgba(40, 125, 210, 0.1), transparent); +} + +.sillon-b__top { + background-image: linear-gradient(to right, #1f2158, #121332); + border-left: 0.1vw solid rgba(158, 153, 193, 0.5); +} + +.sillon-b__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(40, 125, 210, 0.25), transparent); +} + +.sillon-b__bottom { + background-color: #0b0c1f; +} + +.sillon-l, +.sillon-r { + position: absolute; + left: 0; + bottom: 0; + width: 6vw; + height: 1vw; +} + +.sillon-l__front, +.sillon-r__front { + width: 6vw; + height: 4.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-3.5vw); +} + +.sillon-l__back, +.sillon-r__back { + width: 6vw; + height: 4.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-6vw) translateY(-4.5vw); +} + +.sillon-l__right, +.sillon-r__right { + width: 1vw; + height: 4.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(6vw) translateX(-1vw) translateY(-4.5vw); +} + +.sillon-l__left, +.sillon-r__left { + width: 1vw; + height: 4.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-4.5vw); +} + +.sillon-l__top, +.sillon-r__top { + width: 6vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(4.5vw); +} + +.sillon-l__bottom, +.sillon-r__bottom { + width: 6vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-6vw); +} + +.sillon-l__front, +.sillon-r__front { + background-image: linear-gradient(to bottom, #121332, #0b0c1f); +} + +.sillon-l__back, +.sillon-r__back { + background-color: #0b0c1f; +} + +.sillon-l__right, +.sillon-r__right { + background-image: linear-gradient(to bottom, #0b0c1f, black); +} + +.sillon-l__left, +.sillon-r__left { + background-image: linear-gradient(to bottom, #121332, #0b0c1f); +} + +.sillon-l__top, +.sillon-r__top { + background-image: linear-gradient(to right, #1f2158, #0f102b); + border-bottom: 0.1vw solid rgba(158, 153, 193, 0.5); +} + +.sillon-l__top::before, +.sillon-r__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(40, 125, 210, 0.75), transparent); +} + +.sillon-l__bottom, +.sillon-r__bottom { + background-color: #0b0c1f; +} + +.sillon-r { + top: 0; +} + +.sillon-t { + position: absolute; + right: 0; + top: 1vw; + width: 1vw; + height: 1vw; + transform-origin: right; + transform: rotateY(7deg); +} + +.sillon-t__front { + width: 1vw; + height: 6.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(7.5vw); +} + +.sillon-t__back { + width: 1vw; + height: 6.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-1vw) translateY(-6.5vw); +} + +.sillon-t__right { + width: 14vw; + height: 6.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(1vw) translateX(-14vw) translateY(-6.5vw); +} + +.sillon-t__left { + width: 14vw; + height: 6.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-6.5vw); +} + +.sillon-t__top { + width: 1vw; + height: 14vw; + transform-origin: top left; + transform: translateZ(6.5vw); +} + +.sillon-t__bottom { + width: 1vw; + height: 14vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-1vw); +} + +.sillon-t__front { + background-image: linear-gradient(to bottom, #0b0c1f, #070814); +} + +.sillon-t__back { + background-image: linear-gradient(to bottom, #0b0c1f, #0b0c1f); +} + +.sillon-t__right { + background-image: linear-gradient(to bottom, #0b0c1f, black); +} + +.sillon-t__left { + background-color: #121332; +} + +.sillon-t__top { + background-image: linear-gradient(to right, #1f2158, #0f102b); + border-bottom: 0.1vw solid rgba(158, 153, 193, 0.5); +} + +.sillon-t__top::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(40, 125, 210, 0.5), transparent); +} + +.sillon-t__bottom { + background-color: #0b0c1f; +} + +.mesa-c { + position: absolute; + left: 7vw; + top: 9.5vw; + width: 10vw; + height: 9vw; + transform: translateZ(0.5vw); +} + +.mesa-shadow { + position: absolute; + width: 100%; + height: 100%; + border-radius: 10%; + background-color: rgba(11, 12, 31, 0.95); + filter: blur(1vw); + transform: translateZ(0); +} + +.mesa { + position: absolute; + left: 0; + top: 0; + width: 10vw; + height: 9vw; + transform: translateZ(2vw); +} + +.mesa__front { + width: 10vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(8.5vw); +} + +.mesa__back { + width: 10vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-10vw) translateY(-0.5vw); +} + +.mesa__right { + width: 9vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(10vw) translateX(-9vw) translateY(-0.5vw); +} + +.mesa__left { + width: 9vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} + +.mesa__top { + width: 10vw; + height: 9vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} + +.mesa__bottom { + width: 10vw; + height: 9vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-10vw); +} + +.mesa__front { + background-image: linear-gradient(to right, #0b0c1f, black); +} + +.mesa__front::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient(45deg, rgba(81, 137, 251, 0.125), rgba(180, 205, 253, 0.25), transparent 55%); +} + +.mesa__back { + background-color: #0b0c1f; +} + +.mesa__right { + background-color: black; +} + +.mesa__left { + background-color: #121332; +} + +.mesa__top { + background-image: linear-gradient(45deg, #0e0f27, #04050d); + overflow: hidden; +} + +.mesa__top::before { + content: ""; + position: absolute; + bottom: 0; + width: 50%; + height: 50%; + background-image: linear-gradient(45deg, rgba(81, 137, 251, 0.5), rgba(251, 250, 254, 0.125) 50%, transparent 55%); + filter: blur(0.5vw); +} + +.mesa__top::after { + content: ""; + position: absolute; + left: 2vw; + top: 2vw; + width: 20%; + height: 50%; + border-radius: 50%; + background-color: rgba(40, 125, 210, 0.079); + transform: rotateZ(-40deg); + filter: blur(0.75vw); +} + +.mesa__bottom { + background-color: #0b0c1f; +} + +.mesa-p { + position: absolute; + width: 0.25vw; + height: 0.25vw; +} + +.mesa-p__front { + width: 0.25vw; + height: 1.75vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-1.5vw); +} + +.mesa-p__back { + width: 0.25vw; + height: 1.75vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.25vw) translateY(-1.75vw); +} + +.mesa-p__right { + width: 0.25vw; + height: 1.75vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.25vw) translateX(-0.25vw) translateY(-1.75vw); +} + +.mesa-p__left { + width: 0.25vw; + height: 1.75vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1.75vw); +} + +.mesa-p__top { + width: 0.25vw; + height: 0.25vw; + transform-origin: top left; + transform: translateZ(1.75vw); +} + +.mesa-p__bottom { + width: 0.25vw; + height: 0.25vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.25vw); +} + +.mesa-p__front { + background-color: #0b0c1f; +} + +.mesa-p__back { + background-color: #0b0c1f; +} + +.mesa-p__right { + background-color: black; +} + +.mesa-p__left { + background-color: #121332; +} + +.mesa-p__top { + background-color: #1f2158; +} + +.mesa-p__bottom { + background-color: #0b0c1f; +} + +.mesa-p__bottom::before { + content: ""; + position: absolute; + width: 600%; + height: 200%; + top: 0; + right: 0; + border-radius: 10%; + transform: translateZ(-0.1vw); + background-color: rgba(0, 0, 0, 0.75); + filter: blur(0.35vw); +} + +.mesa-p:nth-of-type(1) { + left: 0.5vw; + top: 0.5vw; +} + +.mesa-p:nth-of-type(2) { + right: 0.5vw; + top: 0.5vw; +} + +.mesa-p:nth-of-type(3) { + left: 0.5vw; + bottom: 0.5vw; +} + +.mesa-p:nth-of-type(4) { + right: 0.5vw; + bottom: 0.5vw; +} + +.tablet { + position: absolute; + left: 13vw; + top: 12vw; + width: 2vw; + height: 2.5vw; + transform: translateZ(3.01vw) rotateZ(15deg); +} + +.tablet__front { + width: 2vw; + height: 0.125vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(2.375vw); +} + +.tablet__back { + width: 2vw; + height: 0.125vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-2vw) translateY(-0.125vw); +} + +.tablet__right { + width: 2.5vw; + height: 0.125vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(2vw) translateX(-2.5vw) translateY(-0.125vw); +} + +.tablet__left { + width: 2.5vw; + height: 0.125vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.125vw); +} + +.tablet__top { + width: 2vw; + height: 2.5vw; + transform-origin: top left; + transform: translateZ(0.125vw); +} + +.tablet__bottom { + width: 2vw; + height: 2.5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-2vw); +} + +.tablet__front { + background-color: #8079ae; +} + +.tablet__back { + background-color: #383358; +} + +.tablet__right { + background-color: #383358; +} + +.tablet__left { + background-color: #9e99c1; +} + +.tablet__top { + background-color: #83abfc; + border: 0.2vw solid rgba(81, 137, 251, 0.25); + animation: pantalla-tablet 0.25s infinite; +} + +.tablet__bottom { + background-color: black; + box-shadow: 0.25vw 0.25vw 0.5vw rgba(24, 74, 124, 0.75), -0.25vw 0.25vw 0.5vw rgba(24, 74, 124, 0.75), + -0.25vw -0.25vw 0.5vw rgba(24, 74, 124, 0.75), 0.25vw -0.25vw 0.5vw rgba(24, 74, 124, 0.75); +} + +/**********************/ +/**********************/ +@keyframes pantalla-tablet { + from { + background-color: #6a9afb; + } +} + +@keyframes pantalla-tv { + from { + background-color: #6a9afb; + box-shadow: 0.125vw 0.125vw 0vw rgba(81, 137, 251, 0), -0.125vw 0.125vw 0vw rgba(81, 137, 251, 0), + 0.125vw -0.125vw 0vw rgba(81, 137, 251, 0), -0.125vw -0.125vw 0vw rgba(81, 137, 251, 0); + } +} + +@keyframes luz-tv { + from { + background-image: radial-gradient(rgba(36, 112, 188, 0.8), rgba(56, 121, 250, 0.8)); + } +} + +div#runtime { + width: 180px; + margin: auto; + color: #fff; + padding-inline: 5px; + border-radius: 10px; + background-color: rgba(0, 0, 0, 0.7); +} +#workboard { + font-size: 12px; +} +[data-theme="dark"] div#runtime { + color: #28b4c8; + box-shadow: 0 0 5px rgba(28, 69, 218, 0.71); + animation: flashlight 1s linear infinite alternate; +} +#ghbdages .github-badge img { + height: 20px; + max-width: 150px; + border-radius: 4px; + pointer-events: none; +} +#workboard img.boardsign { + width: 100%; + max-width: 130px; + border-radius: 0px; +} +@-moz-keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} +@-webkit-keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} +@-o-keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} +@keyframes flashlight { + from { + box-shadow: 0 0 5px #1478d2; + } + to { + box-shadow: 0 0 2px #1478d2; + } +} + +.author-content.author-content-item { + height: 19rem; + background-color: var(--anzhiyu-main); + background-position: left 28%; + background-repeat: no-repeat; + background-size: cover; + color: var(--anzhiyu-white); + overflow: hidden; + margin-top: 0; + background-image: linear-gradient(-45deg, var(--anzhiyu-main), #0f4667, #2a6973 150%, #67044d); + background-size: 400%; + animation: gradient 15s ease infinite; +} + +#skills-tags-group-all { + display: flex; + transform: rotate(0); + transition: 0.3s; +} +#skills-tags-group-all .tags-group-wrapper { + margin-top: 40px; + display: flex; + flex-wrap: nowrap; + animation: rowup 60s linear infinite; +} +#skills-tags-group-all .tags-group-icon-pair { + margin-left: 1rem; +} +#skills-tags-group-all .tags-group-icon { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 66px; + font-weight: 700; + box-shadow: var(--anzhiyu-shadow-blackdeep); + width: 120px; + height: 120px; + border-radius: 30px; +} +#skills-tags-group-all .tags-group-icon img { + width: 60px; + margin: 0 auto !important; +} +[data-theme="dark"] #skills-tags-group-all .tags-group-icon img { + filter: none; +} +#skills-tags-group-all .tags-group-icon-pair .tags-group-icon:nth-child(even) { + margin-top: 1rem; + transform: translate(-60px); +} + +#skills-tags-group-all .etc { + margin-right: 10px; + margin-top: 10px; +} + +@keyframes rowup { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-50%); + } +} + +#article-container .tag-Link { + background: var(--anzhiyu-secondbg); + border-radius: 8px !important; + display: flex; + border: var(--style-border); + flex-direction: column; + padding: 0.5rem 1rem !important; + border-width: 1px !important; + margin: 1rem 0; +} + +#article-container .tag-Link:hover { + border: var(--style-border-hover); +} + +#article-container .tag-Link .tag-link-tips { + border-bottom: var(--style-border); + padding-bottom: 4px; + font-size: 12px; + color: var(--anzhiyu-gray); + font-weight: normal; +} + +#article-container .tag-Link:hover .tag-link-tips { + color: var(--anzhiyu-white); +} + +#article-container .tag-Link .tag-link-bottom { + display: flex; + margin-top: 0.5rem; + align-items: center; + justify-content: space-around; +} + +#article-container .tag-Link .tag-link-bottom .tag-link-left { + width: 60px; + min-width: 60px; + height: 60px; + background-size: cover; + border-radius: var(--anzhiyu-border-radius); + background-color: var(--anzhiyu-card-bg); + display: flex; + align-items: center; + justify-content: center; +} +#article-container .tag-Link .tag-link-bottom .tag-link-left i { + margin: 0; + padding: 0; + margin: auto; + font-size: 24px; + color: var(--anzhiyu-fontcolor); +} + +#article-container .tag-Link .tag-link-bottom .tag-link-right { + margin-left: 1rem; + max-width: calc(100% - 76px - 1rem); +} + +#article-container .tag-Link .tag-link-bottom .tag-link-right .tag-link-title { + font-size: 1rem; + line-height: 1.2; +} + +#article-container .tag-Link .tag-link-bottom .tag-link-right .tag-link-sitename { + font-size: 0.7rem; + color: var(--anzhiyu-gray); + font-weight: normal; + margin-top: 4px; +} + +#article-container .tag-Link:hover .tag-link-bottom .tag-link-right .tag-link-sitename { + color: var(--anzhiyu-white); +} + +#article-container .tag-Link .tag-link-bottom i { + margin-left: auto; +} + +.site-card-group .site-card .info { + margin-top: 0; +} +.site-card-group > a { + width: calc(100% / 4 - 0.5rem); + height: 150px; + position: relative; + display: block; + margin: 0.5rem 0.25rem; + float: left; + overflow: hidden; + padding: 0; + border-radius: 8px; + transition: all 0.3s ease 0s, transform cubic-bezier(0.71, 0.15, 0.16, 1.15) 0.6s; + box-shadow: none; + border: var(--style-border) !important; +} + +.site-card-group > a .wrapper { + position: relative; +} + +.site-card-group > a .cover { + width: 100%; + -webkit-transition: -webkit-transform 0.5s ease-out; + -moz-transition: -moz-transform 0.5s ease-out; + -o-transition: -o-transform 0.5s ease-out; + -ms-transition: -ms-transform 0.5s ease-out; + transition: transform 0.5s ease-out; +} + +.site-card-group > a .info, +.site-card-group > a .wrapper .cover { + position: absolute; + top: 0; + left: 0; +} + +.site-card-group > a .info { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 3px; + background-color: rgba(255, 255, 255, 0.7); + -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -moz-transition: -moz-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -o-transition: -o-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + -ms-transition: -ms-transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; + transition: transform 0.5s cubic-bezier(0.6, 0.2, 0.1, 1) 0s; +} + +.site-card-group > a .info img { + position: relative; + top: 19px; + width: 80px; + height: 80px; + border-radius: 50%; + -webkit-box-shadow: 0 0 10px rgb(0 0 0 / 30%); + box-shadow: 0 0 10px rgb(0 0 0 / 30%); + z-index: 1; + text-align: center; + pointer-events: none; +} + +.site-card-group > a .info span { + padding: 20px 10% 60px 10%; + font-size: 16px; + width: 100%; + text-align: center; + -webkit-box-shadow: 0 0 10px rgb(0 0 0 / 30%); + box-shadow: 0 0 10px rgb(0 0 0 / 30%); + background-color: rgba(255, 255, 255, 0.7); + color: var(--font-color); + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} + +.site-card-group .site-card:hover { + border-color: var(--anzhiyu-main) !important; + background-color: var(--anzhiyu-main) !important; + -webkit-box-shadow: var(--anzhiyu-shadow-theme) !important; + box-shadow: var(--anzhiyu-shadow-theme) !important; +} +.site-card-group > a:hover .wrapper img { + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + -o-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); +} + +.site-card-group > a .cover { + width: 100%; + -webkit-transition: -webkit-transform 0.5s ease-out; + -moz-transition: -moz-transform 0.5s ease-out; + -o-transition: -o-transform 0.5s ease-out; + -ms-transition: -ms-transform 0.5s ease-out; + transition: transform 0.5s ease-out; +} +.site-card-group > a .wrapper img { + height: 150px; + pointer-events: none; +} +.site-card-group .site-card .wrapper img { + -webkit-transition: -webkit-transform 0.5s ease-out !important; + -moz-transition: -moz-transform 0.5s ease-out !important; + -o-transition: -o-transform 0.5s ease-out !important; + -ms-transition: -ms-transform 0.5s ease-out !important; + transition: transform 0.5s ease-out !important; +} +.site-card-group > a .wrapper .fadeIn { + -webkit-animation: coverIn 0.8s ease-out forwards; + -moz-animation: coverIn 0.8s ease-out forwards; + -o-animation: coverIn 0.8s ease-out forwards; + -ms-animation: coverIn 0.8s ease-out forwards; + animation: coverIn 0.8s ease-out forwards; +} + +.site-card-group > a:hover .info { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -o-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); +} + +.search-dialog { + position: fixed; + top: 5rem; + left: 50%; + z-index: 1001; + display: none; + margin-left: -18.75rem; + padding: 1.25rem; + width: 37.5rem; + border-radius: 8px; + background: var(--search-bg); + border-radius: 12px; + -webkit-box-shadow: var(--anzhiyu-shadow-lightblack); + box-shadow: var(--anzhiyu-shadow-lightblack); + background: var(--anzhiyu-card-bg); + border: var(--style-border); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +@media screen and (max-width: 768px) { + .search-dialog { + top: 0; + left: 0; + margin: 0; + width: 100%; + height: 100%; + border-radius: 0 !important; + } +} +@media screen and (max-height: 680px) { + .search-dialog { + top: 2rem; + } +} +@media screen and (max-height: 580px) { + .search-dialog { + top: 0; + left: 0; + margin: 0; + width: 100%; + height: 100%; + border-radius: 0 !important; + } +} +.search-dialog hr { + margin: 20px auto; +} +.search-dialog .search-nav { + margin: 0 0 14px; + color: #425aef; + font-size: 1.4em; + line-height: 1; +} +.search-dialog .search-nav .search-dialog-title { + margin-right: 10px; +} +.search-dialog .search-nav .search-close-button { + float: right; + color: #858585; + -webkit-transition: color 0.2s ease-in-out; + -moz-transition: color 0.2s ease-in-out; + -o-transition: color 0.2s ease-in-out; + -ms-transition: color 0.2s ease-in-out; + transition: color 0.2s ease-in-out; +} +.search-dialog .search-nav .search-close-button:hover { + color: #425aef; +} +#search-mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + display: none; + background: rgba(0,0,0,0.6); +} +#algolia-search .search-dialog .ais-SearchBox input { + padding: 0.5rem 1rem; + width: 100%; + outline: none; + border: var(--style-border); + border-radius: var(--anzhiyu-radius); + background: var(--anzhiyu-secondbg); + color: var(--search-input-color); +} +#algolia-search .search-dialog .ais-SearchBox input:focus { + border: var(--style-border-hover); +} +#algolia-search .search-dialog .search-dialog-title { + font-weight: 700; + color: var(--anzhiyu-main); +} +#algolia-search .search-dialog .ais-Hits-list { + margin: 0; + padding: 0; +} +#algolia-search .search-dialog .ais-Hits-list .ais-Hits-item:hover { + background: var(--anzhiyu-main); + cursor: pointer; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + -ms-transition: all 0.2s; + transition: all 0.2s; +} +#algolia-search .search-dialog .ais-Hits-list .ais-Hits-item:hover a { + color: var(--anzhiyu-white); +} +#algolia-search .search-dialog .ais-Hits-list mark { + background: transparent; + color: #f47466; + font-weight: bold; +} +#algolia-search .search-dialog .algolia-hit-item-content { + margin: 0 0 8px; + word-break: break-all; +} +#algolia-search .search-dialog .ais-Pagination { + margin: 20px 0 0; + padding: 0; + text-align: center; +} +#algolia-search .search-dialog .ais-Pagination .ais-Pagination-list { + margin: 0; + padding: 0; + list-style: none; +} +#algolia-search .search-dialog .ais-Pagination .ais-Pagination-item { + display: inline; + margin: 0 4px; + padding: 0; +} +#algolia-search .search-dialog .ais-Pagination .ais-Pagination-item .ais-Pagination-link { + display: inline-block; + min-width: 24px; + height: 24px; + text-align: center; + line-height: 24px; +} +#algolia-search .search-dialog .ais-Pagination .ais-Pagination-item--selected a { + background: #425aef; + color: #eee; + cursor: default; +} +#algolia-search .search-dialog .ais-Pagination .ais-Pagination-item--disabled { + visibility: hidden; +} +#algolia-search .search-dialog .algolia-logo { + padding-top: 2px; + width: 80px; + height: 30px; +} +#algolia-search .search-dialog #algolia-hits { + overflow-y: scroll; + min-height: 20px; +} +#algolia-search .search-dialog #algolia-hits .tag-list { + padding: 4px 8px; + border-radius: 8px; + margin-right: 0.5rem; + margin-top: 0.5rem; + border: var(--style-border-always); + cursor: pointer; +} +#algolia-search .search-dialog #algolia-info div { + display: inline; +} +#algolia-search .search-dialog #algolia-info .algolia-poweredBy { + float: right; +} +#algolia-search #search-mask { + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + background: var(--anzhiyu-maskbg); +} +#algolia-search .search-dialog { + border-radius: 12px; + -webkit-box-shadow: var(--anzhiyu-shadow-lightblack); + box-shadow: var(--anzhiyu-shadow-lightblack); + background: var(--anzhiyu-card-bg); + border: var(--style-border); + -webkit-transition: 0.3s; + -moz-transition: 0.3s; + -o-transition: 0.3s; + -ms-transition: 0.3s; + transition: 0.3s; +} +#algolia-search .search-dialog .ais-Pagination .ais-Pagination-item--selected a { + border-radius: 4px; + background: var(--anzhiyu-main); + color: var(--anzhiyu-white); +} +#algolia-search .search-dialog:hover { + border: var(--style-border-hover); + -webkit-box-shadow: var(--anzhiyu-shadow-theme); + box-shadow: var(--anzhiyu-shadow-theme); +} +@media screen and (max-width: 768px) { + #algolia-search .search-dialog:hover { + border: var(--style-border); + } +} +#algolia-search .list-beauty li, +#algolia-search .category-lists ul li, +#algolia-search .search-dialog .ais-Hits-list li { + padding: 0; +} +#algolia-search .list-beauty li:before, +#algolia-search .category-lists ul li:before, +#algolia-search .search-dialog .ais-Hits-list li:before { + display: none; +} +#algolia-search .list-beauty li, +#algolia-search .category-lists ul li, +#algolia-search .search-dialog .ais-Hits-list li { + border-radius: 8px; + border: var(--style-border); + margin-bottom: 10px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#algolia-search .search-dialog .ais-Hits-list a { + color: var(--search-result-title); + display: block; + font-weight: 600; + padding: 5px 10px; + width: 100%; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + -ms-transition: all 0.2s; + transition: all 0.2s; + overflow: hidden; + white-space: nowrap; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} +#algolia-search .search-dialog .ais-Hits-list .search-result-tags a { + padding: 4px 8px; + border-radius: 8px; + margin-right: 0.5rem; + margin-top: 0.5rem; + border: var(--style-border); + display: inline; +} +#algolia-search .ais-SearchBox-loadingIndicator { + display: none; +} diff --git a/css/loading.css b/css/loading.css new file mode 100644 index 000000000..bdd4bd57f --- /dev/null +++ b/css/loading.css @@ -0,0 +1,48 @@ +.pace { + pointer-events: none; + user-select: none; + z-index: 2; + position: fixed; + margin: auto; + top: 4px; + left: 0; + right: 0; + height: 8px; + border-radius: 8px; + width: 6rem; + background: #eaecf2; + overflow: hidden; +} + +.pace-inactive .pace-progress { + opacity: 0; + transition: 0.3s ease-in; +} + +.pace.pace-inactive { + opacity: 0; + transition: 0.3s; + top: -8px; +} + +.pace .pace-progress { + box-sizing: border-box; + transform: translate3d(0, 0, 0); + position: fixed; + z-index: 2; + display: block; + position: absolute; + top: 0; + right: 100%; + height: 100%; + width: 100%; + background: #49b1f5; + background: linear-gradient( + to right, + rgb(18, 194, 233), + rgb(196, 113, 237), + rgb(246, 79, 89) + ); + animation: gradient 2s ease infinite; + background-size: 200%; +} diff --git a/css/statistics.css b/css/statistics.css new file mode 100644 index 000000000..e982f74da --- /dev/null +++ b/css/statistics.css @@ -0,0 +1,36 @@ +#statistic { + font-size: 18px; + padding: 20px; + border-radius: 12px; + width: 100%; + color: var(--font-color); + background-color: var(--card-bg); +} + +div#statistic .content { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +div#statistic a { + text-decoration: none; +} + +#statistic .content div { + display: inline-block; +} + +#statistic div span { + font-size: 14px; + line-height: 1.3; + display: block; +} + +#statistic div .num { + letter-spacing: 1px; + font-weight: bold; + font-size: 2rem; + margin-bottom: .8rem; + white-space: nowrap; +} diff --git a/css/var.css b/css/var.css new file mode 100644 index 000000000..e69de29bb diff --git a/essay/index.html b/essay/index.html new file mode 100644 index 000000000..5008e6891 --- /dev/null +++ b/essay/index.html @@ -0,0 +1,499 @@ +即刻短文 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 000000000..cd8205bc3 Binary files /dev/null and b/favicon.ico differ diff --git a/fcircle/index.html b/fcircle/index.html new file mode 100644 index 000000000..26f6da018 --- /dev/null +++ b/fcircle/index.html @@ -0,0 +1,472 @@ +朋友圈 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/img/404.jpg b/img/404.jpg new file mode 100644 index 000000000..4d2270827 Binary files /dev/null and b/img/404.jpg differ diff --git a/img/512.png b/img/512.png new file mode 100644 index 000000000..c38a1c05b Binary files /dev/null and b/img/512.png differ diff --git a/img/algolia.svg b/img/algolia.svg new file mode 100644 index 000000000..fd1569187 --- /dev/null +++ b/img/algolia.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/img/comment_bg.png b/img/comment_bg.png new file mode 100644 index 000000000..3b0d5d536 Binary files /dev/null and b/img/comment_bg.png differ diff --git a/img/default_cover.jpg b/img/default_cover.jpg new file mode 100644 index 000000000..297f5ca3c Binary files /dev/null and b/img/default_cover.jpg differ diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 000000000..cd8205bc3 Binary files /dev/null and b/img/favicon.ico differ diff --git a/img/friend_404.gif b/img/friend_404.gif new file mode 100644 index 000000000..8b2de5e79 Binary files /dev/null and b/img/friend_404.gif differ diff --git a/img/loading.gif b/img/loading.gif new file mode 100644 index 000000000..e17ef6e32 Binary files /dev/null and b/img/loading.gif differ diff --git a/img/siteicon/16.png b/img/siteicon/16.png new file mode 100644 index 000000000..16afd7ed5 Binary files /dev/null and b/img/siteicon/16.png differ diff --git a/img/siteicon/32.png b/img/siteicon/32.png new file mode 100644 index 000000000..180fd76e0 Binary files /dev/null and b/img/siteicon/32.png differ diff --git a/img/siteicon/apple-icon-180.png b/img/siteicon/apple-icon-180.png new file mode 100644 index 000000000..2007e6da9 Binary files /dev/null and b/img/siteicon/apple-icon-180.png differ diff --git a/img/siteicon/manifest-icon-192.maskable.png b/img/siteicon/manifest-icon-192.maskable.png new file mode 100644 index 000000000..a4d7056ae Binary files /dev/null and b/img/siteicon/manifest-icon-192.maskable.png differ diff --git a/img/siteicon/manifest-icon-512.maskable.png b/img/siteicon/manifest-icon-512.maskable.png new file mode 100644 index 000000000..2a24339f3 Binary files /dev/null and b/img/siteicon/manifest-icon-512.maskable.png differ diff --git a/index.html b/index.html new file mode 100644 index 000000000..4c50ec0a1 --- /dev/null +++ b/index.html @@ -0,0 +1,701 @@ +光速大佬的小站 - 独步天下,吾心自洁,无欲无求,如林中之象。 +
加载头像
vercel优选IP食用方法
整活
折腾日记:部署在vercel上的短链接
Github 2FA详解使用过程
用Cloudflare workers为freenom域名续期
月度总结
构建自己的云上工作流-Hexo自动部署
Planetscale已将中国的访问屏蔽
记一次在Render上部署Cloudreve
注意
引用到评论
\ No newline at end of file diff --git a/js/anzhiyu/ai_abstract.js b/js/anzhiyu/ai_abstract.js new file mode 100644 index 000000000..e018047bd --- /dev/null +++ b/js/anzhiyu/ai_abstract.js @@ -0,0 +1,438 @@ +(function () { + const { + randomNum, + basicWordCount, + btnLink, + key: AIKey, + Referer: AIReferer, + gptName, + switchBtn, + mode: initialMode, + } = GLOBAL_CONFIG.postHeadAiDescription; + + const { title, postAI, pageFillDescription } = GLOBAL_CONFIG_SITE; + + let lastAiRandomIndex = -1; + let animationRunning = true; + let mode = initialMode; + let refreshNum = 0; + let prevParam; + let audio = null; + let isPaused = false; + let summaryID = null; + + const post_ai = document.querySelector(".post-ai-description"); + const aiTitleRefreshIcon = post_ai.querySelector(".ai-title .anzhiyufont.anzhiyu-icon-arrow-rotate-right"); + let aiReadAloudIcon = post_ai.querySelector(".anzhiyu-icon-circle-dot"); + const explanation = post_ai.querySelector(".ai-explanation"); + + let aiStr = ""; + let aiStrLength = ""; + let delayInit = 600; + let indexI = 0; + let indexJ = 0; + let timeouts = []; + let elapsed = 0; + + const observer = createIntersectionObserver(); + const aiFunctions = [introduce, aiTitleRefreshIconClick, aiRecommend, aiGoHome]; + + const aiBtnList = post_ai.querySelectorAll(".ai-btn-item"); + const filteredHeadings = Array.from(aiBtnList).filter(heading => heading.id !== "go-tianli-blog"); + filteredHeadings.forEach((item, index) => { + item.addEventListener("click", () => { + aiFunctions[index](); + }); + }); + + document.getElementById("ai-tag").addEventListener("click", onAiTagClick); + aiTitleRefreshIcon.addEventListener("click", onAiTitleRefreshIconClick); + document.getElementById("go-tianli-blog").addEventListener("click", () => { + window.open(btnLink, "_blank"); + }); + aiReadAloudIcon.addEventListener("click", readAloud); + + async function readAloud() { + if (!summaryID) { + anzhiyu.snackbarShow("摘要还没加载完呢,请稍后。。。"); + return; + } + aiReadAloudIcon = post_ai.querySelector(".anzhiyu-icon-circle-dot"); + aiReadAloudIcon.style.opacity = "0.2"; + if (audio && !isPaused) { + audio.pause(); + isPaused = true; + aiReadAloudIcon.style.opacity = "1"; + aiReadAloudIcon.style.animation = ""; + aiReadAloudIcon.style.cssText = "animation: ''; opacity: 1;cursor: pointer;"; + return; + } + + if (audio && isPaused) { + audio.play(); + isPaused = false; + aiReadAloudIcon.style.cssText = "animation: breathe .5s linear infinite; opacity: 0.2;cursor: pointer"; + return; + } + + const options = { + key: AIKey, + Referer: AIReferer, + }; + const requestParams = new URLSearchParams({ + key: options.key, + id: summaryID, + }); + + const requestOptions = { + method: "GET", + headers: { + "Content-Type": "application/json", + Referer: options.Referer, + }, + }; + + try { + const response = await fetch(`https://summary.tianli0.top/audio?${requestParams}`, requestOptions); + if (response.status === 403) { + console.error("403 refer与key不匹配。"); + } else if (response.status === 500) { + console.error("500 系统内部错误"); + } else { + const audioBlob = await response.blob(); + const audioURL = URL.createObjectURL(audioBlob); + audio = new Audio(audioURL); + audio.play(); + aiReadAloudIcon.style.cssText = "animation: breathe .5s linear infinite; opacity: 0.2;cursor: pointer"; + audio.addEventListener("ended", () => { + audio = null; + aiReadAloudIcon.style.opacity = "1"; + aiReadAloudIcon.style.animation = ""; + }); + } + } catch (error) { + console.error("请求发生错误❎"); + } + } + if (switchBtn) { + document.getElementById("ai-Toggle").addEventListener("click", changeShowMode); + } + + aiAbstract(); + showAiBtn(); + + function createIntersectionObserver() { + return new IntersectionObserver( + entries => { + let isVisible = entries[0].isIntersecting; + animationRunning = isVisible; + if (animationRunning) { + delayInit = indexI === 0 ? 200 : 20; + timeouts[1] = setTimeout(() => { + if (indexJ) { + indexI = 0; + indexJ = 0; + } + if (indexI === 0) { + explanation.innerHTML = aiStr.charAt(0); + } + requestAnimationFrame(animate); + }, delayInit); + } + }, + { threshold: 0 } + ); + } + + function animate(timestamp) { + if (!animationRunning) { + return; + } + if (!animate.start) animate.start = timestamp; + elapsed = timestamp - animate.start; + if (elapsed >= 20) { + animate.start = timestamp; + if (indexI < aiStrLength - 1) { + let char = aiStr.charAt(indexI + 1); + let delay = /[,.,。!?!?]/.test(char) ? 150 : 20; + if (explanation.firstElementChild) { + explanation.removeChild(explanation.firstElementChild); + } + explanation.innerHTML += char; + let div = document.createElement("div"); + div.className = "ai-cursor"; + explanation.appendChild(div); + indexI++; + if (delay === 150) { + post_ai.querySelector(".ai-explanation .ai-cursor").style.opacity = "0.2"; + } + if (indexI === aiStrLength - 1) { + observer.disconnect(); + explanation.removeChild(explanation.firstElementChild); + } + timeouts[0] = setTimeout(() => { + requestAnimationFrame(animate); + }, delay); + } + } else { + requestAnimationFrame(animate); + } + } + + function clearTimeouts() { + if (timeouts.length) { + timeouts.forEach(item => { + if (item) { + clearTimeout(item); + } + }); + } + } + + function startAI(str, df = true) { + indexI = 0; + indexJ = 1; + clearTimeouts(); + animationRunning = false; + elapsed = 0; + observer.disconnect(); + explanation.innerHTML = df ? "生成中. . ." : "请等待. . ."; + aiStr = str; + aiStrLength = aiStr.length; + observer.observe(post_ai); + } + + async function aiAbstract(num = basicWordCount) { + if (mode === "tianli") { + await aiAbstractTianli(num); + } else { + aiAbstractLocal(); + } + } + + async function aiAbstractTianli(num) { + indexI = 0; + indexJ = 1; + clearTimeouts(); + animationRunning = false; + elapsed = 0; + observer.disconnect(); + + num = Math.max(10, Math.min(2000, num)); + const options = { + key: AIKey, + Referer: AIReferer, + }; + const truncateDescription = (title + pageFillDescription).trim().substring(0, num); + + const requestBody = { + key: options.key, + content: truncateDescription, + url: location.href, + }; + + const requestOptions = { + method: "POST", + headers: { + "Content-Type": "application/json", + Referer: options.Referer, + }, + body: JSON.stringify(requestBody), + }; + console.info(truncateDescription.length); + try { + let animationInterval = null; + let summary; + if (animationInterval) clearInterval(animationInterval); + animationInterval = setInterval(() => { + const animationText = "生成中" + ".".repeat(indexJ); + explanation.innerHTML = animationText; + indexJ = (indexJ % 3) + 1; + }, 500); + const response = await fetch(`https://summary.tianli0.top/`, requestOptions); + let result; + if (response.status === 403) { + result = { + summary: "403 refer与key不匹配。", + }; + } else if (response.status === 500) { + result = { + summary: "500 系统内部错误", + }; + } else { + result = await response.json(); + } + + summary = result.summary.trim(); + summaryID = result.id; + + setTimeout(() => { + aiTitleRefreshIcon.style.opacity = "1"; + }, 300); + if (summary) { + startAI(summary); + } else { + startAI("摘要获取失败!!!请检查Tianli服务是否正常!!!"); + } + clearInterval(animationInterval); + } catch (error) { + console.error(error); + explanation.innerHTML = "发生异常" + error; + } + } + + function aiAbstractLocal() { + const strArr = postAI.split(",").map(item => item.trim()); + if (strArr.length !== 1) { + let randomIndex = Math.floor(Math.random() * strArr.length); + while (randomIndex === lastAiRandomIndex) { + randomIndex = Math.floor(Math.random() * strArr.length); + } + lastAiRandomIndex = randomIndex; + startAI(strArr[randomIndex]); + } else { + startAI(strArr[0]); + } + setTimeout(() => { + aiTitleRefreshIcon.style.opacity = "1"; + }, 600); + } + + function aiRecommend() { + indexI = 0; + indexJ = 1; + clearTimeouts(); + animationRunning = false; + elapsed = 0; + explanation.innerHTML = "生成中. . ."; + aiStr = ""; + aiStrLength = ""; + observer.disconnect(); + timeouts[2] = setTimeout(() => { + explanation.innerHTML = recommendList(); + }, 600); + } + + function recommendList() { + let thumbnail = document.querySelectorAll(".relatedPosts-list a"); + if (!thumbnail.length) { + const cardRecentPost = document.querySelector(".card-widget.card-recent-post"); + if (!cardRecentPost) return ""; + + thumbnail = cardRecentPost.querySelectorAll(".aside-list-item a"); + + let list = ""; + for (let i = 0; i < thumbnail.length; i++) { + const item = thumbnail[i]; + list += `
${ + i + 1 + }:${item.title}
`; + } + + return `很抱歉,无法找到类似的文章,你也可以看看本站最新发布的文章:
${list}
`; + } + + let list = ""; + for (let i = 0; i < thumbnail.length; i++) { + const item = thumbnail[i]; + list += `
推荐${ + i + 1 + }:${item.title}
`; + } + + return `推荐文章:
${list}
`; + } + + function aiGoHome() { + startAI("正在前往博客主页...", false); + timeouts[2] = setTimeout(() => { + if (window.pjax) { + pjax.loadUrl("/"); + } else { + location.href = location.origin; + } + }, 1000); + } + + function introduce() { + if (mode == "tianli") { + startAI("我是文章辅助AI: TianliGPT,点击下方的按钮,让我生成本文简介、推荐相关文章等。"); + } else { + startAI(`我是文章辅助AI: ${gptName} GPT,点击下方的按钮,让我生成本文简介、推荐相关文章等。`); + } + } + + function aiTitleRefreshIconClick() { + aiTitleRefreshIcon.click(); + } + + function onAiTagClick() { + if (mode === "tianli") { + post_ai.querySelectorAll(".ai-btn-item").forEach(item => (item.style.display = "none")); + document.getElementById("go-tianli-blog").style.display = "block"; + startAI( + "你好,我是Tianli开发的摘要生成助理TianliGPT,是一个基于GPT-4的生成式AI。我在这里只负责摘要的预生成和显示,你无法与我直接沟通,如果你也需要一个这样的AI摘要接口,可以在下方购买。" + ); + } else { + post_ai.querySelectorAll(".ai-btn-item").forEach(item => (item.style.display = "block")); + document.getElementById("go-tianli-blog").style.display = "none"; + startAI( + `你好,我是本站摘要生成助理${gptName} GPT,是一个基于GPT-4的生成式AI。我在这里只负责摘要的预生成和显示,你无法与我直接沟通。` + ); + } + } + + function onAiTitleRefreshIconClick() { + const truncateDescription = (title + pageFillDescription).trim().substring(0, basicWordCount); + + aiTitleRefreshIcon.style.opacity = "0.2"; + aiTitleRefreshIcon.style.transitionDuration = "0.3s"; + aiTitleRefreshIcon.style.transform = "rotate(" + 360 * refreshNum + "deg)"; + if (truncateDescription.length <= basicWordCount) { + let param = truncateDescription.length - Math.floor(Math.random() * randomNum); + while (param === prevParam || truncateDescription.length - param === prevParam) { + param = truncateDescription.length - Math.floor(Math.random() * randomNum); + } + prevParam = param; + aiAbstract(param); + } else { + let value = Math.floor(Math.random() * randomNum) + basicWordCount; + while (value === prevParam || truncateDescription.length - value === prevParam) { + value = Math.floor(Math.random() * randomNum) + basicWordCount; + } + aiAbstract(value); + } + refreshNum++; + } + + function changeShowMode() { + mode = mode === "tianli" ? "local" : "tianli"; + if (mode === "tianli") { + document.getElementById("ai-tag").innerHTML = "TianliGPT"; + + aiReadAloudIcon.style.opacity = "1"; + aiReadAloudIcon.style.cursor = "pointer"; + } else { + aiReadAloudIcon.style.opacity = "0"; + aiReadAloudIcon.style.cursor = "auto"; + if ((document.getElementById("go-tianli-blog").style.display = "block")) { + document.querySelectorAll(".ai-btn-item").forEach(item => (item.style.display = "block")); + document.getElementById("go-tianli-blog").style.display = "none"; + } + document.getElementById("ai-tag").innerHTML = gptName + " GPT"; + } + aiAbstract(); + } + + function showAiBtn() { + if (mode === "tianli") { + document.getElementById("ai-tag").innerHTML = "TianliGPT"; + } else { + document.getElementById("ai-tag").innerHTML = gptName + " GPT"; + } + } +})(); diff --git a/js/anzhiyu/comment_barrage.js b/js/anzhiyu/comment_barrage.js new file mode 100644 index 000000000..b7e456fe3 --- /dev/null +++ b/js/anzhiyu/comment_barrage.js @@ -0,0 +1,179 @@ +if (document.querySelector(".comment-barrage")) { + var commentBarrageConfig = { + maxBarrage: GLOBAL_CONFIG.commentBarrageConfig.maxBarrage, + barrageTime: GLOBAL_CONFIG.commentBarrageConfig.barrageTime, + twikooUrl: GLOBAL_CONFIG.twikooEnvId, + accessToken: GLOBAL_CONFIG.commentBarrageConfig.accessToken, + mailMd5: GLOBAL_CONFIG.commentBarrageConfig.mailMd5, + pageUrl: window.location.pathname, + barrageTimer: [], + barrageList: [], + barrageIndex: 0, + dom: document.querySelector(".comment-barrage"), + }; + var commentInterval = null; + var hoverOnCommentBarrage = false; + + document.querySelector(".comment-barrage").addEventListener("mouseenter", function () { + hoverOnCommentBarrage = true; + }); + document.querySelector(".comment-barrage").addEventListener("mouseleave", function () { + hoverOnCommentBarrage = false; + }); + + function initCommentBarrage() { + if (!commentBarrageConfig.dom) return; + + var data = JSON.stringify({ + event: "COMMENT_GET", + "commentBarrageConfig.accessToken": commentBarrageConfig.accessToken, + url: commentBarrageConfig.pageUrl, + }); + var xhr = new XMLHttpRequest(); + xhr.withCredentials = true; + xhr.addEventListener("readystatechange", function () { + if (this.readyState === 4 && this.responseText) { + commentBarrageConfig.barrageList = commentLinkFilter(JSON.parse(this.responseText).data); + commentBarrageConfig.dom.innerHTML = ""; + } + }); + xhr.open("POST", commentBarrageConfig.twikooUrl); + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.send(data); + + clearInterval(commentInterval); + commentInterval = null; + + commentInterval = setInterval(() => { + if (commentBarrageConfig.barrageList.length && !hoverOnCommentBarrage) { + popCommentBarrage(commentBarrageConfig.barrageList[commentBarrageConfig.barrageIndex]); + commentBarrageConfig.barrageIndex += 1; + commentBarrageConfig.barrageIndex %= commentBarrageConfig.barrageList.length; + } + if ( + commentBarrageConfig.barrageTimer.length > + (commentBarrageConfig.barrageList.length > commentBarrageConfig.maxBarrage + ? commentBarrageConfig.maxBarrage + : commentBarrageConfig.barrageList.length) && + !hoverOnCommentBarrage + ) { + removeCommentBarrage(commentBarrageConfig.barrageTimer.shift()); + } + }, commentBarrageConfig.barrageTime); + } + + function commentLinkFilter(data) { + data.sort((a, b) => { + return a.created - b.created; + }); + let newData = []; + data.forEach(item => { + newData.push(...getCommentReplies(item)); + }); + return newData; + } + + function getCommentReplies(item) { + if (item.replies) { + let replies = [item]; + item.replies.forEach(item => { + replies.push(...getCommentReplies(item)); + }); + return replies; + } else { + return []; + } + } + + function popCommentBarrage(data) { + let barrage = document.createElement("div"); + barrage.className = "comment-barrage-item"; + barrage.innerHTML = ` + + + ${data.comment} + + `; + + // 获取anzhiyu标签内的所有pre元素 + let anzhiyuPres = barrage.querySelectorAll("anzhiyu pre"); + + // 遍历每个pre元素,将其替换为"【代码】" + anzhiyuPres.forEach(pre => { + let codePlaceholder = document.createElement("span"); + codePlaceholder.innerText = "【代码】"; + pre.parentNode.replaceChild(codePlaceholder, pre); + }); + + // 获取anzhiyu标签内的所有图片元素 + let anzhiyuImages = barrage.querySelectorAll("anzhiyu img"); + + // 遍历每个图片元素,将其替换为"【图片】",但排除带有class=tk-owo-emotion的图片 + anzhiyuImages.forEach(image => { + if (!image.classList.contains("tk-owo-emotion")) { + image.style.display = "none"; // 隐藏图片 + let placeholder = document.createElement("span"); + placeholder.innerText = "【图片】"; + image.parentNode.replaceChild(placeholder, image); + } + }); + commentBarrageConfig.barrageTimer.push(barrage); + commentBarrageConfig.dom.append(barrage); + } + + function removeCommentBarrage(barrage) { + barrage.className = "comment-barrage-item out"; + + setTimeout(() => { + if (commentBarrageConfig.dom && commentBarrageConfig.dom.contains(barrage)) { + commentBarrageConfig.dom.removeChild(barrage); + } + }, 1000); + } + + // 自动隐藏 + const commentEntryCallback = entries => { + const commentBarrage = document.querySelector(".comment-barrage"); + const postComment = document.getElementById("post-comment"); + + entries.forEach(entry => { + if (postComment && commentBarrage && document.body.clientWidth > 768) { + commentBarrage.style.bottom = entry.isIntersecting ? `-${commentBarrageConfig.maxBarrage * 200}px` : "0"; + } + }); + }; + // 创建IntersectionObserver实例 + const observer = new IntersectionObserver(commentEntryCallback, { + root: null, + rootMargin: "0px", + threshold: 0, + }); + // 监视目标元素 + const postCommentTarget = document.getElementById("post-comment"); + if (postCommentTarget) { + observer.observe(postCommentTarget); + } + + initCommentBarrage(); + + if (localStorage.getItem("commentBarrageSwitch") !== "false") { + document.querySelector(".comment-barrage").style.display = "flex"; + document.querySelector(".menu-commentBarrage-text").textContent = "关闭热评"; + } else { + document.querySelector(".comment-barrage").style.display = "none"; + document.querySelector(".menu-commentBarrage-text").textContent = "显示热评"; + } + + document.addEventListener("pjax:send", function () { + clearInterval(commentInterval); + }); +} diff --git a/js/anzhiyu/people.js b/js/anzhiyu/people.js new file mode 100644 index 000000000..bf90d9b66 --- /dev/null +++ b/js/anzhiyu/people.js @@ -0,0 +1,271 @@ +"use strict"; +function _toConsumableArray(e) { + return _arrayWithoutHoles(e) || _iterableToArray(e) || _unsupportedIterableToArray(e) || _nonIterableSpread(); +} + +function _nonIterableSpread() { + throw new TypeError( + "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." + ); +} + +function _unsupportedIterableToArray(e, r) { + if (e) { + if ("string" == typeof e) return _arrayLikeToArray(e, r); + var t = Object.prototype.toString.call(e).slice(8, -1); + return ( + "Object" === t && e.constructor && (t = e.constructor.name), + "Map" === t || "Set" === t + ? Array.from(e) + : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) + ? _arrayLikeToArray(e, r) + : void 0 + ); + } +} + +function _iterableToArray(e) { + if (("undefined" != typeof Symbol && null != e[Symbol.iterator]) || null != e["@@iterator"]) return Array.from(e); +} + +function _arrayWithoutHoles(e) { + if (Array.isArray(e)) return _arrayLikeToArray(e); +} + +function _arrayLikeToArray(e, r) { + (null == r || r > e.length) && (r = e.length); + for (var t = 0, a = new Array(r); t < r; t++) a[t] = e[t]; + return a; +} + +function _classCallCheck(e, r) { + if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function"); +} + +function _defineProperties(e, r) { + for (var t = 0; t < r.length; t++) { + var a = r[t]; + (a.enumerable = a.enumerable || !1), + (a.configurable = !0), + "value" in a && (a.writable = !0), + Object.defineProperty(e, a.key, a); + } +} + +function _createClass(e, r, t) { + return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), e; +} +var peopleConfig = { + src: GLOBAL_CONFIG.peoplecanvas.img, + rows: 15, + cols: 7, + }, + randomRange = function (e, r) { + return e + Math.random() * (r - e); + }, + randomIndex = function (e) { + return 0 | randomRange(0, e.length); + }, + removeFromArray = function (e, r) { + return e.splice(r, 1)[0]; + }, + removeItemFromArray = function (e, r) { + return removeFromArray(e, e.indexOf(r)); + }, + removeRandomFromArray = function (e) { + return removeFromArray(e, randomIndex(e)); + }, + getRandomFromArray = function (e) { + return e[0 | randomIndex(e)]; + }, + resetPeep = function (e) { + var r, + t, + a = e.stage, + n = e.peep, + o = 0.5 < Math.random() ? 1 : -1, + i = 100 - 250 * gsap.parseEase("power2.in")(Math.random()), + s = a.height - n.height + i; + return ( + 1 == o ? ((r = -n.width), (t = a.width), (n.scaleX = 1)) : ((r = a.width + n.width), (t = 0), (n.scaleX = -1)), + (n.x = r), + (n.y = s), + { + startX: r, + startY: (n.anchorY = s), + endX: t, + } + ); + }, + normalWalk = function (e) { + var r = e.peep, + t = e.props, + a = (t.startX, t.startY), + n = t.endX, + o = gsap.timeline(); + return ( + o.timeScale(randomRange(0.5, 1.5)), + o.to( + r, + { + duration: 10, + x: n, + ease: "none", + }, + 0 + ), + o.to( + r, + { + duration: 0.25, + repeat: 40, + yoyo: !0, + y: a - 10, + }, + 0 + ), + o + ); + }, + walks = [normalWalk], + Peep = (function () { + function a(e) { + var r = e.image, + t = e.rect; + _classCallCheck(this, a), + (this.image = r), + this.setRect(t), + (this.x = 0), + (this.y = 0), + (this.anchorY = 0), + (this.scaleX = 1), + (this.walk = null); + } + return ( + _createClass(a, [ + { + key: "setRect", + value: function (e) { + (this.rect = e), + (this.width = e[2]), + (this.height = e[3]), + (this.drawArgs = [this.image].concat(_toConsumableArray(e), [0, 0, this.width, this.height])); + }, + }, + { + key: "render", + value: function (e) { + e.save(), + e.translate(this.x, this.y), + e.scale(this.scaleX, 1), + e.drawImage.apply(e, _toConsumableArray(this.drawArgs)), + e.restore(); + }, + }, + ]), + a + ); + })(), + img = document.createElement("img"); +(img.onload = init), (img.src = peopleConfig.src); +let peoplecanvasEl = document.getElementById("peoplecanvas"); + +let ctx = peoplecanvasEl ? peoplecanvasEl.getContext("2d") : undefined, + stage = { + width: 0, + height: 0, + }, + allPeeps = [], + availablePeeps = [], + crowd = []; + +function init() { + if (!peoplecanvasEl) return; + createPeeps(), resize(), gsap.ticker.add(render), window.addEventListener("resize", resize); +} +document.addEventListener("pjax:success", e => { + peoplecanvasEl = document.getElementById("peoplecanvas"); + if (peoplecanvasEl) { + (ctx = peoplecanvasEl ? peoplecanvasEl.getContext("2d") : undefined), window.removeEventListener("resize", resize); + gsap.ticker.remove(render); + setTimeout(() => { + if (!peoplecanvasEl) return; + resize(), gsap.ticker.add(render), window.addEventListener("resize", resize); + }, 300); + } +}); + +function createPeeps() { + for ( + var e = peopleConfig.rows, + r = peopleConfig.cols, + t = e * r, + a = img.naturalWidth / e, + n = img.naturalHeight / r, + o = 0; + o < t; + o++ + ) + allPeeps.push( + new Peep({ + image: img, + rect: [(o % e) * a, ((o / e) | 0) * n, a, n], + }) + ); +} + +function resize() { + if (peoplecanvasEl && peoplecanvasEl.clientWidth != 0) { + (stage.width = peoplecanvasEl.clientWidth), + (stage.height = peoplecanvasEl.clientHeight), + (peoplecanvasEl.width = stage.width * devicePixelRatio), + (peoplecanvasEl.height = stage.height * devicePixelRatio), + crowd.forEach(function (e) { + e.walk.kill(); + }), + (crowd.length = 0), + (availablePeeps.length = 0), + availablePeeps.push.apply(availablePeeps, allPeeps), + initCrowd(); + } +} + +function initCrowd() { + for (; availablePeeps.length; ) addPeepToCrowd().walk.progress(Math.random()); +} + +function addPeepToCrowd() { + var e = removeRandomFromArray(availablePeeps), + r = getRandomFromArray(walks)({ + peep: e, + props: resetPeep({ + peep: e, + stage: stage, + }), + }).eventCallback("onComplete", function () { + removePeepFromCrowd(e), addPeepToCrowd(); + }); + return ( + (e.walk = r), + crowd.push(e), + crowd.sort(function (e, r) { + return e.anchorY - r.anchorY; + }), + e + ); +} + +function removePeepFromCrowd(e) { + removeItemFromArray(crowd, e), availablePeeps.push(e); +} + +function render() { + if (!peoplecanvasEl) return; + (peoplecanvasEl.width = peoplecanvasEl.width), + ctx.save(), + ctx.scale(devicePixelRatio, devicePixelRatio), + crowd.forEach(function (e) { + e.render(ctx); + }), + ctx.restore(); +} diff --git a/js/anzhiyu/random_friends_post.js b/js/anzhiyu/random_friends_post.js new file mode 100644 index 000000000..d717ec212 --- /dev/null +++ b/js/anzhiyu/random_friends_post.js @@ -0,0 +1,215 @@ +var fdata = { + apiurl: GLOBAL_CONFIG.friends_vue_info.apiurl, + defaultFish: 100, + hungryFish: 100, +}; +//可通过 var fdataUser 替换默认值 +if (typeof fdataUser !== "undefined") { + for (var key in fdataUser) { + if (fdataUser[key]) { + fdata[key] = fdataUser[key]; + } + } +} +var randomPostTimes = 0; +var randomPostWorking = false; +var randomPostTips = [ + "钓到了绝世好文!", + "在河边打了个喷嚏,吓跑了", + "你和小伙伴抢夺着", + "你击败了巨龙,在巢穴中发现了", + "挖掘秦始皇坟时找到了", + "在路边闲逛的时候随手买了一个", + "从学校班主任那拿来了孩子上课偷偷看的", + "你的同桌无情的从你的语文书中撕下了那篇你最喜欢的", + "考古学家近日发现了", + "外星人降临地球学习地球文化,落地时被你塞了", + "从图书馆顶层的隐秘角落里发现了闪着金光的", + "徒弟修炼走火入魔,为师立刻掏出了", + "在大山中唱山歌,隔壁的阿妹跑来了,带着", + "隔壁家的孩子数学考了满分,都是因为看了", + "隔壁家的孩子英语考了满分,都是因为看了", + "小米研发了全新一代MIX手机,据说灵感", + "修炼渡劫成功,还好提前看了", + "库克坐上了苹果CEO的宝座,因为他面试的时候看了", + "阿里巴巴大喊芝麻开门,映入眼帘的就是", + "师傅说练武要先炼心,然后让我好生研读", + "科考队在南极大陆发现了被冰封的", + "飞机窗户似乎被一张纸糊上了,仔细一看是", + "历史上满写的仁义道德四个字,透过字缝里却全是", + "十几年前的录音机似乎还能够使用,插上电发现正在播的是", + "新版语文书拟增加一篇熟读并背诵的", + "经调查,99%的受访者都没有背诵过", + "今年的高考满分作文是", + "唐僧揭开了佛祖压在五指山上的", + "科学家发现能够解决衰老的秘密,就是每日研读", + "英特尔发布了全新的至强处理器,其芯片的制造原理都是", + "新的iPhone产能很足,新的进货渠道是", + "今年亩产突破了八千万斤,多亏了", + "陆隐一统天上宗,在无数祖境高手的目光下宣读了", + "黑钻风跟白钻风说道,吃了唐僧肉能长生不老,他知道是因为看了", + "上卫生间没带纸,直接提裤跑路也不愿意玷污手中", + "种下一篇文章就会产生很多很多文章,我种下了", + "三十年河东,三十年河西,莫欺我没有看过", + "踏破铁血无觅处,得来全靠", + "今日双色球中了两千万,预测全靠", + "因为卷子上没写名字,老师罚抄", + "为了抗议世间的不公,割破手指写下了", + "在艺术大街上被贴满了相同的纸,走近一看是", + "这区区迷阵岂能难得住我?其实能走出来多亏了", + "今日被一篇文章顶上了微博热搜,它是", + "你送给乞丐一个暴富秘籍,它是", + "UZI一个走A拿下五杀,在事后采访时说他当时回想起了", + "科学家解刨了第一个感染丧尸病毒的人,发现丧尸抗体存在于", + "如果你有梦想的话,就要努力去看", + "决定我们成为什么样人的,不是我们的能力,而是是否看过", + "有信心不一定会成功,没信心就去看", + "你真正是谁并不重要,重要的是你看没看过", + "玄天境重要的是锻体,为师赠你此书,好好修炼去吧,这是", + "上百祖境高手在天威湖大战三天三夜为了抢夺", + "这化仙池水乃上古真仙对后人的考校,要求熟读并背诵", + "庆氏三千年根基差点竟被你小子毁于一旦,能够被我拯救全是因为我看了", + "我就是神奇宝贝大师!我这只皮卡丘可是", + "我就是神奇宝贝大师!我这只小火龙可是", + "我就是神奇宝贝大师!我这只可达鸭可是", + "我就是神奇宝贝大师!我这只杰尼龟可是", + "上古遗迹中写道,只要习得此书,便得成功。你定睛一看,原来是", + "奶奶的,玩阴的是吧,我就是双料特工代号穿山甲,", + "你的背景太假了,我的就逼真多了,学到这个技术全是因为看了", + "我是云南的,云南怒江的,怒江芦水市,芦水市六库,六库傈僳族,傈僳族是", + "我真的栓Q了,我真的会谢如果你看", + "你已经习得退退退神功,接下来的心法已经被记录在", + "人生无常大肠包小肠,小肠包住了", + "你抽到了普通文章,它是", + "你收到了稀有文章,它是", + "你抽到了金色普通文章,它是", + "你抽到了金色稀有文章,它是", + "你抽到了传说文章!它是", + "哇!金色传说!你抽到了金色传说文章,它是", + "报告!侦察兵说在前往300米有一个男子在偷偷看一本书,上面赫然写着", + "芷莲姑娘大摆擂台,谁若是能读完此书,便可娶了她。然后从背后掏出了", + "请问你的梦想是什么?我的梦想是能读到", + "读什么才能增智慧?当然是读", + "纳兰嫣然掏出了退婚书,可是发现出门带错了,结果拿出了一本", + "你要尽全力保护你的梦想。那些嘲笑你的人,他们必定会失败,他们想把你变成和他们一样的人。如果你有梦想的话,就要努力去读", + "走人生的路就像爬山一样,看起来走了许多冤枉的路,崎岖的路,但终究需要读完", + "游戏的规则就是这么的简单,你听懂了吗?管你听没听懂,快去看", +]; +var randomPostClick = 0; +function fetchRandomPost() { + if (!document.getElementById("random-post")) return; + if (randomPostWorking == false) { + randomPostWorking = true; + //获取旋转角度 + let randomRotate = randomPostTimes * 360; + let randomPostTipsItem = randomPostTips[Math.floor(Math.random() * randomPostTips.length)]; + let randomPostLevel = ""; + if (randomPostTimes > 10000) { + randomPostLevel = "愿者上钩"; + } else if (randomPostTimes > 1000) { + randomPostLevel = "俯览天下"; + } else if (randomPostTimes > 1000) { + randomPostLevel = "超越神了"; + } else if (randomPostTimes > 100) { + randomPostLevel = "绝世渔夫"; + } else if (randomPostTimes > 75) { + randomPostLevel = "钓鱼王者"; + } else if (randomPostTimes > 50) { + randomPostLevel = "钓鱼宗师"; + } else if (randomPostTimes > 20) { + randomPostLevel = "钓鱼专家"; + } else if (randomPostTimes > 5) { + randomPostLevel = "钓鱼高手"; + } else { + randomPostLevel = "钓鱼新手"; + } + if (randomPostTimes >= 5) { + document.getElementById("random-post").innerHTML = + `钓鱼中... (Lv.` + randomPostTimes + ` 当前称号:` + randomPostLevel + `)`; + } else { + document.getElementById("random-post").innerHTML = `钓鱼中...`; + } + + let randomTime = randomNum(1000, 3000); + + if (randomPostTimes == 0) { + randomTime = 0; + } + + document.querySelector(".random-post-start").style.opacity = "0.2"; + document.querySelector(".random-post-start").style.transitionDuration = "0.3s"; + document.querySelector(".random-post-start").style.transform = "rotate(" + randomRotate + "deg)"; + + //判断是否饥饿 + if ( + document.getElementById("random-post") && + randomPostClick * fdata.hungryFish + fdata.defaultFish < randomPostTimes && + Math.round(Math.random()) == 0 + ) { + document.getElementById("random-post").innerHTML = + "因为只钓鱼不吃鱼,过分饥饿导致本次钓鱼失败...(点击任意一篇钓鱼获得的文章即可恢复)"; + randomPostWorking = false; + } else { + var fetchUrl = fdata.apiurl + "randompost"; + fetch(fetchUrl) + .then(res => res.json()) + .then(json => { + var title = json.title; + var link = json.link; + var author = json.author; + if (document.getElementById("random-post")) { + window.setTimeout(function () { + document.getElementById("random-post").innerHTML = + randomPostTipsItem + + `来自友链 ` + + author + + ` 的文章:` + + title + + ``; + randomPostTimes += 1; + localStorage.setItem("randomPostTimes", randomPostTimes); + document.querySelector(".random-post-start").style.opacity = "1"; + }, randomTime); + } + }); + randomPostWorking = false; + } + } +} + +//初始化检查 +function initRandomPost() { + // 获取已经存储的数据 + if (localStorage.randomPostTimes) { + randomPostTimes = parseInt(localStorage.randomPostTimes); + randomPostClick = parseInt(localStorage.randomPostClick); + document.querySelector(".random-post-start").style.transitionDuration = "0.3s"; + document.querySelector(".random-post-start").style.transform = "rotate(" + 360 * randomPostTimes + "deg)"; + } + fetchRandomPost(); +} + +initRandomPost(); + +//添加点击统计 +function randomClickLink() { + randomPostClick += 1; + localStorage.setItem("randomPostClick", randomPostClick); +} + +// 生成随机数 +function randomNum(minNum, maxNum) { + switch (arguments.length) { + case 1: + return parseInt(Math.random() * minNum + 1, 10); + break; + case 2: + return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10); + break; + default: + return 0; + break; + } +} diff --git a/js/anzhiyu/right_click_menu.js b/js/anzhiyu/right_click_menu.js new file mode 100644 index 000000000..9cae0ffe7 --- /dev/null +++ b/js/anzhiyu/right_click_menu.js @@ -0,0 +1,479 @@ +// 初始化函数 +rm = {}; + +//禁止图片与超链接拖拽 +let aElements = document.getElementsByTagName("a"); +for (let i = 0; i < aElements.length; i++) { + aElements[i].setAttribute("draggable", "false"); + let imgElements = aElements[i].getElementsByTagName("img"); + for (let j = 0; j < imgElements.length; j++) { + imgElements[j].setAttribute("draggable", "false"); + } +} + +// 显示菜单 +rm.showRightMenu = function (isTrue, x = 0, y = 0) { + console.info(x, y); + let rightMenu = document.getElementById("rightMenu"); + rightMenu.style.top = x + "px"; + rightMenu.style.left = y + "px"; + if (isTrue) { + rightMenu.style.display = "block"; + stopMaskScroll(); + } else { + rightMenu.style.display = "none"; + } +}; + +// 隐藏菜单 +rm.hideRightMenu = function () { + rm.showRightMenu(false); + let rightMenuMask = document.querySelector("#rightmenu-mask"); + rightMenuMask.style.display = "none"; +}; + +// 尺寸 +let rmWidth = document.getElementById("rightMenu").offsetWidth; +let rmHeight = document.getElementById("rightMenu").offsetHeight; + +// 重新定义尺寸 +rm.reloadrmSize = function () { + rightMenu.style.visibility = "hidden"; + rightMenu.style.display = "block"; + // 获取宽度和高度 + rmWidth = document.getElementById("rightMenu").offsetWidth; + rmHeight = document.getElementById("rightMenu").offsetHeight; + rightMenu.style.visibility = "visible"; +}; + +// 获取点击的href +let domhref = ""; +let domImgSrc = ""; +let globalEvent = null; + +var oncontextmenuFunction = function (event) { + if (document.body.clientWidth > 768) { + let pageX = event.clientX + 10; //加10是为了防止显示时鼠标遮在菜单上 + let pageY = event.clientY; + + //其他额外菜单 + const $rightMenuOther = document.querySelector(".rightMenuOther"); + const $rightMenuPlugin = document.querySelector(".rightMenuPlugin"); + const $rightMenuCopyText = document.querySelector("#menu-copytext"); + const $rightMenuPasteText = document.querySelector("#menu-pastetext"); + const $rightMenuCommentText = document.querySelector("#menu-commenttext"); + const $rightMenuNewWindow = document.querySelector("#menu-newwindow"); + const $rightMenuNewWindowImg = document.querySelector("#menu-newwindowimg"); + const $rightMenuCopyLink = document.querySelector("#menu-copylink"); + const $rightMenuCopyImg = document.querySelector("#menu-copyimg"); + const $rightMenuDownloadImg = document.querySelector("#menu-downloadimg"); + const $rightMenuSearch = document.querySelector("#menu-search"); + const $rightMenuSearchBaidu = document.querySelector("#menu-searchBaidu"); + const $rightMenuMusicToggle = document.querySelector("#menu-music-toggle"); + const $rightMenuMusicBack = document.querySelector("#menu-music-back"); + const $rightMenuMusicForward = document.querySelector("#menu-music-forward"); + const $rightMenuMusicPlaylist = document.querySelector("#menu-music-playlist"); + const $rightMenuMusicCopyMusicName = document.querySelector("#menu-music-copyMusicName"); + + let href = event.target.href; + let imgsrc = event.target.currentSrc; + + // 判断模式 扩展模式为有事件 + let pluginMode = false; + $rightMenuOther.style.display = "block"; + globalEvent = event; + + // 检查是否需要复制 是否有选中文本 + if (selectTextNow && window.getSelection()) { + pluginMode = true; + $rightMenuCopyText.style.display = "block"; + $rightMenuCommentText.style.display = "block"; + $rightMenuSearch.style.display = "block"; + $rightMenuSearchBaidu.style.display = "block"; + } else { + $rightMenuCopyText.style.display = "none"; + $rightMenuCommentText.style.display = "none"; + $rightMenuSearchBaidu.style.display = "none"; + $rightMenuSearch.style.display = "none"; + } + + //检查是否右键点击了链接a标签 + if (href) { + pluginMode = true; + $rightMenuNewWindow.style.display = "block"; + $rightMenuCopyLink.style.display = "block"; + domhref = href; + } else { + $rightMenuNewWindow.style.display = "none"; + $rightMenuCopyLink.style.display = "none"; + } + + //检查是否需要复制图片 + if (imgsrc) { + pluginMode = true; + $rightMenuCopyImg.style.display = "block"; + $rightMenuDownloadImg.style.display = "block"; + $rightMenuNewWindowImg.style.display = "block"; + document.getElementById("rightMenu").style.width = "12rem"; + domImgSrc = imgsrc; + } else { + $rightMenuCopyImg.style.display = "none"; + $rightMenuDownloadImg.style.display = "none"; + $rightMenuNewWindowImg.style.display = "none"; + } + + // 判断是否为输入框 + if (event.target.tagName.toLowerCase() === "input" || event.target.tagName.toLowerCase() === "textarea") { + pluginMode = true; + $rightMenuPasteText.style.display = "block"; + } else { + $rightMenuPasteText.style.display = "none"; + } + const navMusicEl = document.querySelector("#nav-music"); + //判断是否是音乐 + if (navMusicEl && navMusicEl.contains(event.target)) { + pluginMode = true; + $rightMenuMusicToggle.style.display = "block"; + $rightMenuMusicBack.style.display = "block"; + $rightMenuMusicForward.style.display = "block"; + $rightMenuMusicPlaylist.style.display = "block"; + $rightMenuMusicCopyMusicName.style.display = "block"; + } else { + $rightMenuMusicToggle.style.display = "none"; + $rightMenuMusicBack.style.display = "none"; + $rightMenuMusicForward.style.display = "none"; + $rightMenuMusicPlaylist.style.display = "none"; + $rightMenuMusicCopyMusicName.style.display = "none"; + } + + // 如果不是扩展模式则隐藏扩展模块 + if (pluginMode) { + $rightMenuOther.style.display = "none"; + $rightMenuPlugin.style.display = "block"; + } else { + $rightMenuPlugin.style.display = "none"; + } + + rm.reloadrmSize(); + + // 鼠标默认显示在鼠标右下方,当鼠标靠右或靠下时,将菜单显示在鼠标左方\上方 + if (pageX + rmWidth > window.innerWidth) { + pageX -= rmWidth + 10; + } + if (pageY + rmHeight > window.innerHeight) { + pageY -= pageY + rmHeight - window.innerHeight; + } + + rm.showRightMenu(true, pageY, pageX); + document.getElementById("rightmenu-mask").style.display = "flex"; + return false; + } +}; + +// 监听右键初始化 +window.oncontextmenu = oncontextmenuFunction; + +// 下载图片状态 +rm.downloadimging = false; + +// 复制图片到剪贴板 +rm.writeClipImg = function (imgsrc) { + console.log("按下复制"); + rm.hideRightMenu(); + anzhiyu.snackbarShow("正在下载中,请稍后", false, 10000); + if (rm.downloadimging == false) { + rm.downloadimging = true; + setTimeout(function () { + copyImage(imgsrc); + anzhiyu.snackbarShow("复制成功!图片已添加盲水印,请遵守版权协议"); + rm.downloadimging = false; + }, "10000"); + } +}; + +function imageToBlob(imageURL) { + const img = new Image(); + const c = document.createElement("canvas"); + const ctx = c.getContext("2d"); + img.crossOrigin = ""; + img.src = imageURL; + return new Promise(resolve => { + img.onload = function () { + c.width = this.naturalWidth; + c.height = this.naturalHeight; + ctx.drawImage(this, 0, 0); + c.toBlob( + blob => { + // here the image is a blob + resolve(blob); + }, + "image/png", + 0.75 + ); + }; + }); +} + +async function copyImage(imageURL) { + const blob = await imageToBlob(imageURL); + const item = new ClipboardItem({ "image/png": blob }); + navigator.clipboard.write([item]); +} + +rm.copyUrl = function (id) { + const input = document.createElement("input"); // Create a new element + input.id = "copyVal"; // Set the id of the new element to "copyVal" + document.body.appendChild(input); // Append the new element to the end of the element + + const text = id; + input.value = text; + input.select(); + input.setSelectionRange(0, input.value.length); + document.execCommand("copy"); + + input.remove(); // Remove the element from the DOM +}; + +function stopMaskScroll() { + if (document.getElementById("rightmenu-mask")) { + let xscroll = document.getElementById("rightmenu-mask"); + xscroll.addEventListener( + "mousewheel", + function (e) { + //阻止浏览器默认方法 + rm.hideRightMenu(); + // e.preventDefault(); + }, + { passive: true } + ); + } + if (document.getElementById("rightMenu")) { + let xscroll = document.getElementById("rightMenu"); + xscroll.addEventListener( + "mousewheel", + function (e) { + //阻止浏览器默认方法 + rm.hideRightMenu(); + // e.preventDefault(); + }, + { passive: true } + ); + } +} + +rm.rightmenuCopyText = function (txt) { + if (navigator.clipboard) { + navigator.clipboard.writeText(txt); + } + rm.hideRightMenu(); +}; + +rm.copyPageUrl = function (url) { + if (!url) { + url = window.location.href; + } + rm.copyUrl(url); + anzhiyu.snackbarShow("复制链接地址成功", false, 2000); + rm.hideRightMenu(); +}; + +// 复制当前选中文本 +var selectTextNow = ""; +document.onmouseup = document.ondblclick = selceText; + +function selceText() { + var txt; + if (document.selection) { + txt = document.selection.createRange().text; + } else { + txt = window.getSelection().toString(); + } + selectTextNow = txt !== "" ? txt : ""; +} + +// 读取剪切板 +rm.readClipboard = function () { + if (navigator.clipboard) { + navigator.clipboard.readText().then(clipText => rm.insertAtCaret(globalEvent.target, clipText)); + } +}; + +// 粘贴文本到焦点 +rm.insertAtCaret = function (elemt, value) { + const startPos = elemt.selectionStart, + endPos = elemt.selectionEnd; + if (document.selection) { + elemt.focus(); + var sel = document.selection.createRange(); + sel.text = value; + elemt.focus(); + } else { + if (startPos || startPos == "0") { + var scrollTop = elemt.scrollTop; + elemt.value = elemt.value.substring(0, startPos) + value + elemt.value.substring(endPos, elemt.value.length); + elemt.focus(); + elemt.selectionStart = startPos + value.length; + elemt.selectionEnd = startPos + value.length; + elemt.scrollTop = scrollTop; + } else { + elemt.value += value; + elemt.focus(); + } + } +}; + +//粘贴文本 +rm.pasteText = function () { + const result = rm.readClipboard() || ""; + rm.hideRightMenu(); +}; + +//引用到评论 +rm.rightMenuCommentText = function (txt) { + rm.hideRightMenu(); + const postCommentDom = document.getElementById("post-comment"); + var domTop = postCommentDom.offsetTop; + window.scrollTo(0, domTop - 80); + if (txt == "undefined" || txt == "null") txt = "好棒!"; + function setText() { + setTimeout(() => { + var input = document.getElementsByClassName("el-textarea__inner")[0]; + if (!input) setText(); + let evt = document.createEvent("HTMLEvents"); + evt.initEvent("input", true, true); + let inputValue = replaceAll(txt, "\n", "\n> "); + input.value = "> " + inputValue + "\n\n"; + input.dispatchEvent(evt); + input.focus(); + input.setSelectionRange(-1, -1); + if (document.getElementById("comment-tips")) { + document.getElementById("comment-tips").classList.add("show"); + } + }, 100); + } + setText(); +}; + +//替换所有内容 +function replaceAll(string, search, replace) { + return string.split(search).join(replace); +} + +// 百度搜索 +rm.searchBaidu = function () { + anzhiyu.snackbarShow("即将跳转到百度搜索", false, 2000); + setTimeout(function () { + window.open("https://www.baidu.com/s?wd=" + selectTextNow); + }, "2000"); + rm.hideRightMenu(); +}; + +//分享链接 +rm.copyLink = function () { + rm.rightmenuCopyText(domhref); + anzhiyu.snackbarShow("已复制链接地址"); +}; + +function addRightMenuClickEvent() { + // 添加点击事件 + document.getElementById("menu-backward").addEventListener("click", function () { + window.history.back(); + rm.hideRightMenu(); + }); + + document.getElementById("menu-forward").addEventListener("click", function () { + window.history.forward(); + rm.hideRightMenu(); + }); + + document.getElementById("menu-refresh").addEventListener("click", function () { + window.location.reload(); + }); + + document.getElementById("menu-top").addEventListener("click", function () { + anzhiyu.scrollToDest(0, 500); + rm.hideRightMenu(); + }); + + document.getElementById("menu-translate").addEventListener("click", function () { + window.translateFn.translatePage(); + rm.hideRightMenu(); + }); + + const menuLinks = document.querySelectorAll(".menu-link"); + menuLinks.forEach(function (link) { + link.addEventListener("click", rm.hideRightMenu); + }); + + document.getElementById("menu-home") && + document.getElementById("menu-home").addEventListener("click", function () { + window.location.href = window.location.origin; + }); + + document.getElementById("menu-randomPost").addEventListener("click", function () { + toRandomPost(); + }); + + document.getElementById("menu-commentBarrage").addEventListener("click", anzhiyu.switchCommentBarrage); + + document.getElementById("rightmenu-mask").addEventListener("click", rm.hideRightMenu); + + document.getElementById("rightmenu-mask").addEventListener("contextmenu", function (event) { + rm.hideRightMenu(); + event.preventDefault(); // Prevent the default context menu from appearing + }); + + document.getElementById("menu-copy").addEventListener("click", () => { + rm.copyPageUrl(); + }); + + document.getElementById("menu-pastetext").addEventListener("click", rm.pasteText); + + document.getElementById("menu-copytext").addEventListener("click", function () { + rm.rightmenuCopyText(selectTextNow); + const copyright = GLOBAL_CONFIG.copyright; + if (copyright.copy) { + anzhiyu.snackbarShow(copyright.languages.copySuccess); + } + }); + + document.getElementById("menu-commenttext").addEventListener("click", function () { + rm.rightMenuCommentText(selectTextNow); + }); + + document.getElementById("menu-newwindow").addEventListener("click", function () { + window.open(domhref, "_blank"); + rm.hideRightMenu(); + }); + + document.getElementById("menu-copylink").addEventListener("click", rm.copyLink); + + document.getElementById("menu-downloadimg").addEventListener("click", function () { + anzhiyu.downloadImage(domImgSrc, "anzhiyu"); + }); + + document.getElementById("menu-newwindowimg").addEventListener("click", function () { + window.open(domImgSrc, "_blank"); + rm.hideRightMenu(); + }); + + document.getElementById("menu-copyimg").addEventListener("click", function () { + rm.writeClipImg(domImgSrc); + }); + + document.getElementById("menu-searchBaidu").addEventListener("click", rm.searchBaidu); + + //音乐 + document.getElementById("menu-music-toggle").addEventListener("click", anzhiyu.musicToggle); + + document.getElementById("menu-music-back").addEventListener("click", anzhiyu.musicSkipBack); + + document.getElementById("menu-music-forward").addEventListener("click", anzhiyu.musicSkipForward); + + document.getElementById("menu-music-copyMusicName").addEventListener("click", function () { + rm.rightmenuCopyText(anzhiyu.musicGetName()); + anzhiyu.snackbarShow("复制歌曲名称成功", false, 3000); + }); +} + +addRightMenuClickEvent(); diff --git a/js/baidu-pusher.js b/js/baidu-pusher.js new file mode 100644 index 000000000..18313318a --- /dev/null +++ b/js/baidu-pusher.js @@ -0,0 +1,14 @@ + diff --git a/js/gg-ad-ms.js b/js/gg-ad-ms.js new file mode 100644 index 000000000..0106b388a --- /dev/null +++ b/js/gg-ad-ms.js @@ -0,0 +1 @@ + diff --git a/js/load-time.js b/js/load-time.js new file mode 100644 index 000000000..65a17ba8a --- /dev/null +++ b/js/load-time.js @@ -0,0 +1,17 @@ +// 页面开始加载时记录时间戳 +var startTime = window.performance.timing.navigationStart; + +// 当页面完全加载后,停止计时并显示加载耗时 +window.onload = function() { + // 获取页面加载完成时的当前时间戳 + var endTime = window.performance.timing.loadEventEnd; + + // 计算加载耗时(毫秒) + var loadTime = endTime - startTime; + + // 将加载耗时转换为可读的格式(例如:秒和毫秒) + var loadTimeStr = (loadTime / 1000).toFixed(2) + " 秒"; + + // 在网页上显示加载耗时 + document.getElementById("loadTime").textContent = "页面加载耗时:" + loadTimeStr; +}; \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 000000000..fd1051134 --- /dev/null +++ b/js/main.js @@ -0,0 +1,1813 @@ +// 第一次播放音乐 +var anzhiyu_musicFirst = false; +// 快捷键 +var anzhiyu_keyboard = null; +// 音乐播放状态 +var anzhiyu_musicPlaying = false; +var $bodyWrap = document.getElementById("body-wrap"); +var anzhiyu_intype = false; +var anzhiyu_keyUpEvent_timeoutId = null; +var anzhiyu_keyUpShiftDelayEvent_timeoutId = null; + +// 右键菜单对象 +var rm = null; + +var popupWindowTimer = null; + +var adjectives = [ + "美丽的", + "英俊的", + "聪明的", + "勇敢的", + "可爱的", + "慷慨的", + "善良的", + "可靠的", + "开朗的", + "成熟的", + "稳重的", + "真诚的", + "幽默的", + "豁达的", + "有趣的", + "活泼的", + "优雅的", + "敏捷的", + "温柔的", + "温暖的", + "敬业的", + "细心的", + "耐心的", + "深沉的", + "朴素的", + "含蓄的", + "率直的", + "开放的", + "务实的", + "坚强的", + "自信的", + "谦虚的", + "文静的", + "深刻的", + "纯真的", + "朝气蓬勃的", + "慎重的", + "大方的", + "顽强的", + "迷人的", + "机智的", + "善解人意的", + "富有想象力的", + "有魅力的", + "独立的", + "好奇的", + "干净的", + "宽容的", + "尊重他人的", + "体贴的", + "守信的", + "有耐性的", + "有责任心的", + "有担当的", + "有远见的", + "有智慧的", + "有眼光的", + "有冒险精神的", + "有爱心的", + "有同情心的", + "喜欢思考的", + "喜欢学习的", + "具有批判性思维的", + "善于表达的", + "善于沟通的", + "善于合作的", + "善于领导的", + "有激情的", + "有幽默感的", + "有思想的", + "有个性的", + "有正义感的", + "有责任感的", + "有创造力的", + "有想象力的", + "有艺术细胞的", + "有团队精神的", + "有协调能力的", + "有决策能力的", + "有组织能力的", + "有学习能力的", + "有执行能力的", + "有分析能力的", + "有逻辑思维的", + "有创新能力的", + "有专业素养的", + "有商业头脑的", +]; +var vegetablesAndFruits = [ + "萝卜", + "白菜", + "芹菜", + "生菜", + "青椒", + "辣椒", + "茄子", + "豆角", + "黄瓜", + "西红柿", + "洋葱", + "大蒜", + "土豆", + "南瓜", + "豆腐", + "韭菜", + "花菜", + "西兰花", + "蘑菇", + "金针菇", + "苹果", + "香蕉", + "橙子", + "柠檬", + "猕猴桃", + "草莓", + "葡萄", + "桃子", + "杏子", + "李子", + "石榴", + "西瓜", + "哈密瓜", + "蜜瓜", + "樱桃", + "蓝莓", + "柿子", + "橄榄", + "柚子", + "火龙果", +]; + +// 已随机的歌曲 +var selectRandomSong = []; +// 音乐默认声音大小 +var musicVolume = 0.8; +// 是否切换了周杰伦音乐列表 +var changeMusicListFlag = false; +// 当前默认播放列表 +var defaultPlayMusicList = []; +var themeColorMeta, pageHeaderEl, navMusicEl, consoleEl; + +document.addEventListener("DOMContentLoaded", function () { + let headerContentWidth, $nav, $rightMenu; + let mobileSidebarOpen = false; + + const adjustMenu = init => { + const getAllWidth = ele => { + return Array.from(ele).reduce((width, i) => width + i.offsetWidth, 0); + }; + + if (init) { + const blogInfoWidth = getAllWidth(document.querySelector("#blog_name > a").children); + const menusWidth = getAllWidth(document.getElementById("menus").children); + headerContentWidth = blogInfoWidth + menusWidth; + $nav = document.getElementById("nav"); + } + + const hideMenuIndex = window.innerWidth <= 768 || headerContentWidth > $nav.offsetWidth - 120; + $nav.classList.toggle("hide-menu", hideMenuIndex); + }; + + // 初始化header + const initAdjust = () => { + adjustMenu(true); + $nav.classList.add("show"); + }; + + // sidebar menus + const sidebarFn = { + open: () => { + anzhiyu.sidebarPaddingR(); + anzhiyu.animateIn(document.getElementById("menu-mask"), "to_show 0.5s"); + document.getElementById("sidebar-menus").classList.add("open"); + mobileSidebarOpen = true; + }, + close: () => { + const $body = document.body; + $body.style.paddingRight = ""; + anzhiyu.animateOut(document.getElementById("menu-mask"), "to_hide 0.5s"); + document.getElementById("sidebar-menus").classList.remove("open"); + mobileSidebarOpen = false; + }, + }; + + /** + * 首頁top_img底下的箭頭 + */ + const scrollDownInIndex = () => { + const handleScrollToDest = () => { + const bbTimeList = document.getElementById("bbTimeList"); + if (bbTimeList) { + anzhiyu.scrollToDest(bbTimeList.offsetTop - 62, 300); + } else { + anzhiyu.scrollToDest(document.getElementById("home_top").offsetTop - 60, 300); + } + }; + + const $scrollDownEle = document.getElementById("scroll-down"); + $scrollDownEle && anzhiyu.addEventListenerPjax($scrollDownEle, "click", handleScrollToDest); + }; + + /** + * 代码 + * 只适用于Hexo默认的代码渲染 + */ + const addHighlightTool = function () { + const highLight = GLOBAL_CONFIG.highlight; + if (!highLight) return; + + const { highlightCopy, highlightLang, highlightHeightLimit, plugin } = highLight; + const isHighlightShrink = GLOBAL_CONFIG_SITE.isHighlightShrink; + const isShowTool = highlightCopy || highlightLang || isHighlightShrink !== undefined; + const $figureHighlight = + plugin === "highlight.js" + ? document.querySelectorAll("figure.highlight") + : document.querySelectorAll('pre[class*="language-"]'); + + if (!((isShowTool || highlightHeightLimit) && $figureHighlight.length)) return; + + const isPrismjs = plugin === "prismjs"; + const highlightShrinkClass = isHighlightShrink === true ? "closed" : ""; + const highlightShrinkEle = + isHighlightShrink !== undefined + ? '' + : ""; + const highlightCopyEle = highlightCopy + ? '
' + : ""; + + const alertInfo = (ele, text) => { + if (GLOBAL_CONFIG.Snackbar !== undefined) { + anzhiyu.snackbarShow(text); + } else { + const prevEle = ele.previousElementSibling; + prevEle.textContent = text; + prevEle.style.opacity = 1; + setTimeout(() => { + prevEle.style.opacity = 0; + }, 800); + } + }; + + const copy = ctx => { + if (document.queryCommandSupported && document.queryCommandSupported("copy")) { + document.execCommand("copy"); + alertInfo(ctx, GLOBAL_CONFIG.copy.success); + } else { + alertInfo(ctx, GLOBAL_CONFIG.copy.noSupport); + } + }; + + // click events + const highlightCopyFn = ele => { + const $buttonParent = ele.parentNode; + $buttonParent.classList.add("copy-true"); + const selection = window.getSelection(); + const range = document.createRange(); + const preCodeSelector = isPrismjs ? "pre code" : "table .code pre"; + range.selectNodeContents($buttonParent.querySelectorAll(`${preCodeSelector}`)[0]); + selection.removeAllRanges(); + selection.addRange(range); + copy(ele.lastChild); + selection.removeAllRanges(); + $buttonParent.classList.remove("copy-true"); + }; + + const highlightShrinkFn = ele => { + ele.classList.toggle("closed"); + }; + + const highlightToolsFn = function (e) { + const $target = e.target.classList; + if ($target.contains("expand")) highlightShrinkFn(this); + else if ($target.contains("copy-button")) highlightCopyFn(this); + }; + + const expandCode = function () { + this.classList.toggle("expand-done"); + }; + + const createEle = (lang, item, service) => { + const fragment = document.createDocumentFragment(); + + if (isShowTool) { + const hlTools = document.createElement("div"); + hlTools.className = `highlight-tools ${highlightShrinkClass}`; + hlTools.innerHTML = highlightShrinkEle + lang + highlightCopyEle; + anzhiyu.addEventListenerPjax(hlTools, "click", highlightToolsFn); + fragment.appendChild(hlTools); + } + + if (highlightHeightLimit && item.offsetHeight > highlightHeightLimit + 30) { + const ele = document.createElement("div"); + ele.className = "code-expand-btn"; + ele.innerHTML = ''; + anzhiyu.addEventListenerPjax(ele, "click", expandCode); + fragment.appendChild(ele); + } + + if (service === "hl") { + item.insertBefore(fragment, item.firstChild); + } else { + item.parentNode.insertBefore(fragment, item); + } + }; + + if (isPrismjs) { + $figureHighlight.forEach(item => { + if (highlightLang) { + const langName = item.getAttribute("data-language") || "Code"; + const highlightLangEle = `
${langName}
`; + anzhiyu.wrap(item, "figure", { class: "highlight" }); + createEle(highlightLangEle, item); + } else { + anzhiyu.wrap(item, "figure", { class: "highlight" }); + createEle("", item); + } + }); + } else { + $figureHighlight.forEach(item => { + if (highlightLang) { + let langName = item.getAttribute("class").split(" ")[1]; + if (langName === "plain" || langName === undefined) langName = "Code"; + const highlightLangEle = `
${langName}
`; + createEle(highlightLangEle, item, "hl"); + } else { + createEle("", item, "hl"); + } + }); + } + }; + + /** + * PhotoFigcaption + */ + function addPhotoFigcaption() { + document.querySelectorAll("#article-container img").forEach(function (item) { + const parentEle = item.parentNode; + const altValue = item.title || item.alt; + if (altValue && !parentEle.parentNode.classList.contains("justified-gallery")) { + const ele = document.createElement("div"); + ele.className = "img-alt is-center"; + ele.textContent = altValue; + parentEle.insertBefore(ele, item.nextSibling); + } + }); + } + + /** + * Lightbox + */ + const runLightbox = () => { + anzhiyu.loadLightbox(document.querySelectorAll("#article-container img:not(.no-lightbox)")); + }; + + /** + * justified-gallery 圖庫排版 + */ + const runJustifiedGallery = function (ele) { + const htmlStr = arr => { + let str = ""; + const replaceDq = str => str.replace(/"/g, """); // replace double quotes to " + arr.forEach(i => { + const alt = i.alt ? `alt="${replaceDq(i.alt)}"` : ""; + const title = i.title ? `title="${replaceDq(i.title)}"` : ""; + const address = i.address ? i.address : ""; + const galleryItem = ` + + `; + str += galleryItem; + }); + + return str; + }; + + const lazyloadFn = (i, arr, limit) => { + const loadItem = Number(limit); + const arrLength = arr.length; + if (arrLength > loadItem) i.insertAdjacentHTML("beforeend", htmlStr(arr.splice(0, loadItem))); + else { + i.insertAdjacentHTML("beforeend", htmlStr(arr)); + i.classList.remove("lazyload"); + } + window.lazyLoadInstance && window.lazyLoadInstance.update(); + return arrLength > loadItem ? loadItem : arrLength; + }; + + const fetchUrl = async url => { + const response = await fetch(url); + return await response.json(); + }; + + const runJustifiedGallery = (item, arr) => { + const limit = item.getAttribute("data-limit") ?? arr.length; + if (!item.classList.contains("lazyload") || arr.length < limit) { + // 不懒加载 + item.innerHTML = htmlStr(arr); + item.nextElementSibling.style.display = "none"; + } else { + if (!item.classList.contains("btn_album_detail_lazyload") || item.classList.contains("page_img_lazyload")) { + // 滚动懒加载 + lazyloadFn(item, arr, limit); + const clickBtnFn = () => { + const lastItemLength = lazyloadFn(item, arr, limit); + fjGallery( + item, + "appendImages", + item.querySelectorAll(`.fj-gallery-item:nth-last-child(-n+${lastItemLength})`) + ); + anzhiyu.loadLightbox(item.querySelectorAll("img")); + if (lastItemLength < Number(limit)) { + observer.unobserve(item.nextElementSibling); + } + }; + + // 创建IntersectionObserver实例 + const observer = new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + // 如果元素进入视口 + if (entry.isIntersecting) { + // 执行clickBtnFn函数 + setTimeout(clickBtnFn(), 100); + } + }); + }); + observer.observe(item.nextElementSibling); + } else { + // 相册详情 按钮懒加载 + lazyloadFn(item, arr, limit); + const clickBtnFn = () => { + const lastItemLength = lazyloadFn(item, arr, limit); + fjGallery( + item, + "appendImages", + item.querySelectorAll(`.fj-gallery-item:nth-last-child(-n+${lastItemLength})`) + ); + anzhiyu.loadLightbox(item.querySelectorAll("img")); + lastItemLength < limit && item.nextElementSibling.removeEventListener("click", clickBtnFn); + }; + item.nextElementSibling.addEventListener("click", clickBtnFn); + } + } + + anzhiyu.initJustifiedGallery(item); + anzhiyu.loadLightbox(item.querySelectorAll("img")); + window.lazyLoadInstance && window.lazyLoadInstance.update(); + }; + + const addJustifiedGallery = () => { + ele.forEach(item => { + item.classList.contains("url") + ? fetchUrl(item.textContent).then(res => { + runJustifiedGallery(item, res); + }) + : runJustifiedGallery(item, JSON.parse(item.textContent)); + }); + }; + + if (window.fjGallery) { + addJustifiedGallery(); + return; + } + + getCSS(`${GLOBAL_CONFIG.source.justifiedGallery.css}`); + getScript(`${GLOBAL_CONFIG.source.justifiedGallery.js}`).then(addJustifiedGallery); + }; + + /** + * 滚动处理 + */ + const scrollFn = function () { + const $rightside = document.getElementById("rightside"); + const innerHeight = window.innerHeight + 56; + let lastScrollTop = 0; + + if (document.body.scrollHeight <= innerHeight) { + $rightside.style.cssText = "opacity: 1; transform: translateX(-58px)"; + } + + // find the scroll direction + function scrollDirection(currentTop) { + const result = currentTop > initTop; // true is down & false is up + initTop = currentTop; + return result; + } + + let initTop = 0; + let isChatShow = true; + const $header = document.getElementById("page-header"); + const $popupWindow = document.getElementById("popup-window"); + const isChatBtnHide = typeof chatBtnHide === "function"; + const isChatBtnShow = typeof chatBtnShow === "function"; + + // 第一次滑动到底部的标识符 + let scrollBottomFirstFlag = false; + // 缓存常用dom元素 + const musicDom = document.getElementById("nav-music"), + footerDom = document.getElementById("footer"), + waterfallDom = document.getElementById("waterfall"), + $percentBtn = document.getElementById("percent"), + $navTotop = document.getElementById("nav-totop"), + $bodyWrap = document.getElementById("body-wrap"); + // 页面底部Dom是否存在 + let pageBottomDomFlag = document.getElementById("post-comment") || document.getElementById("footer"); + + function percentageScrollFn(currentTop) { + // 处理滚动百分比 + let docHeight = $bodyWrap.clientHeight; + const winHeight = document.documentElement.clientHeight; + const contentMath = + docHeight > winHeight ? docHeight - winHeight : document.documentElement.scrollHeight - winHeight; + const scrollPercent = currentTop / contentMath; + const scrollPercentRounded = Math.round(scrollPercent * 100); + const percentage = scrollPercentRounded > 100 ? 100 : scrollPercentRounded <= 0 ? 1 : scrollPercentRounded; + $percentBtn.textContent = percentage; + + function isInViewPortOfOneNoDis(el) { + if (!el) return; + const elDisplay = window.getComputedStyle(el).getPropertyValue("display"); + if (elDisplay == "none") { + return; + } + const viewPortHeight = + window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + const offsetTop = el.offsetTop; + const scrollTop = document.documentElement.scrollTop; + const top = offsetTop - scrollTop; + return top <= viewPortHeight; + } + + if (isInViewPortOfOneNoDis(pageBottomDomFlag || percentage > 90) && currentTop > 20) { + $navTotop.classList.add("long"); + $percentBtn.textContent = "返回顶部"; + } else { + $navTotop.classList.remove("long"); + $percentBtn.textContent = percentage; + } + + // 如果当前页面需要瀑布流,就处理瀑布流 + if (waterfallDom) { + const waterfallResult = currentTop % document.documentElement.clientHeight; // 卷去一个视口 + if (!scrollBottomFirstFlag && waterfallResult + 100 >= document.documentElement.clientHeight) { + console.info(waterfallResult, document.documentElement.clientHeight); + setTimeout(() => { + waterfall("#waterfall"); + }, 500); + } else { + setTimeout(() => { + waterfallDom && waterfall("#waterfall"); + }, 500); + } + } + } + + const scrollTask = anzhiyu.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop; + const isDown = scrollDirection(currentTop); + + const delta = Math.abs(lastScrollTop - currentTop); + if (currentTop > 60 && delta < 20 && delta != 0) { + // ignore small scrolls + return; + } + if ( + $popupWindow && + $popupWindow.classList.contains("show-popup-window") && + currentTop > 60 && + delta > 20 && + lastScrollTop != 0 + ) { + // 滚动后延迟1s关闭弹窗 + anzhiyu.throttle(() => { + if (popupWindowTimer) clearTimeout(popupWindowTimer); + popupWindowTimer = setTimeout(() => { + if (!$popupWindow.classList.contains("popup-hide")) { + $popupWindow.classList.add("popup-hide"); + } + setTimeout(() => { + $popupWindow.classList.remove("popup-hide"); + $popupWindow.classList.remove("show-popup-window"); + }, 1000); + }, 1000); + }, 1000)(); + } + lastScrollTop = currentTop; + + if (currentTop > 26) { + if (isDown) { + if ($header.classList.contains("nav-visible")) $header.classList.remove("nav-visible"); + if (isChatBtnShow && isChatShow === true) { + chatBtnHide(); + isChatShow = false; + } + } else { + if (!$header.classList.contains("nav-visible")) $header.classList.add("nav-visible"); + if (isChatBtnHide && isChatShow === false) { + chatBtnShow(); + isChatShow = true; + } + } + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + $header.classList.add("nav-fixed"); + }); + if (window.getComputedStyle($rightside).getPropertyValue("opacity") === "0") { + $rightside.style.cssText = "opacity: 0.8; transform: translateX(-58px)"; + } + } else { + if (currentTop <= 5) { + requestAnimationFrame(() => { + $header.classList.remove("nav-fixed"); + $header.classList.remove("nav-visible"); + // 修改顶栏颜色 + anzhiyu.initThemeColor(); + }); + } + $rightside.style.cssText = "opacity: ''; transform: ''"; + } + + if (document.body.scrollHeight <= innerHeight) { + $rightside.style.cssText = "opacity: 0.8; transform: translateX(-58px)"; + } + + percentageScrollFn(currentTop); + }, 96); + + // 进入footer隐藏音乐 + if (footerDom) { + anzhiyu + .intersectionObserver( + () => { + if (footerDom && musicDom && 768 < document.body.clientWidth) { + musicDom.style.bottom = "-10px"; + musicDom.style.opacity = "0"; + } + scrollBottomFirstFlag = true; + }, + () => { + if (footerDom && musicDom && 768 < document.body.clientWidth) { + musicDom.style.bottom = "20px"; + musicDom.style.opacity = "1"; + } + } + )() + .observe(footerDom); + } + + scrollTask(); + anzhiyu.addEventListenerPjax(window, "scroll", scrollTask, { passive: true }); + }; + + /** + * toc,anchor + */ + const scrollFnToDo = function () { + const isToc = GLOBAL_CONFIG_SITE.isToc; + const isAnchor = GLOBAL_CONFIG.isAnchor; + const $article = document.getElementById("article-container"); + + if (!($article && (isToc || isAnchor))) return; + + let $tocLink, $cardToc, autoScrollToc, isExpand; + if (isToc) { + const $cardTocLayout = document.getElementById("card-toc"); + $cardToc = $cardTocLayout.querySelector(".toc-content"); + $tocLink = $cardToc.querySelectorAll(".toc-link"); + isExpand = $cardToc.classList.contains("is-expand"); + + // toc元素點擊 + const tocItemClickFn = e => { + const target = e.target.closest(".toc-link"); + if (!target) return; + + e.preventDefault(); + anzhiyu.scrollToDest( + anzhiyu.getEleTop(document.getElementById(decodeURI(target.getAttribute("href")).replace("#", ""))) - 60, + 300 + ); + if (window.innerWidth < 900) { + $cardTocLayout.classList.remove("open"); + } + }; + + anzhiyu.addEventListenerPjax($cardToc, "click", tocItemClickFn); + + autoScrollToc = item => { + const activePosition = item.getBoundingClientRect().top; + const sidebarScrollTop = $cardToc.scrollTop; + if (activePosition > document.documentElement.clientHeight - 100) { + $cardToc.scrollTop = sidebarScrollTop + 150; + } + if (activePosition < 100) { + $cardToc.scrollTop = sidebarScrollTop - 150; + } + }; + } + + // find head position & add active class + const list = $article.querySelectorAll("h1,h2,h3,h4,h5,h6"); + const filteredHeadings = Array.from(list).filter(heading => heading.id !== "CrawlerTitle"); + let detectItem = ""; + const findHeadPosition = function (top) { + if (top === 0) { + return false; + } + + let currentId = ""; + let currentIndex = ""; + + filteredHeadings.forEach(function (ele, index) { + if (top > anzhiyu.getEleTop(ele) - 80) { + const id = ele.id; + currentId = id ? "#" + encodeURI(id) : ""; + currentIndex = index; + } + }); + if (detectItem === currentIndex) return; + if (isAnchor) anzhiyu.updateAnchor(currentId); + detectItem = currentIndex; + if (isToc) { + $cardToc.querySelectorAll(".active").forEach(i => { + i.classList.remove("active"); + }); + + if (currentId === "") { + return; + } + const currentActive = $tocLink[currentIndex]; + currentActive.classList.add("active"); + + setTimeout(() => { + autoScrollToc(currentActive); + }, 0); + + if (isExpand) return; + let parent = currentActive.parentNode; + + for (; !parent.matches(".toc"); parent = parent.parentNode) { + if (parent.matches("li")) parent.classList.add("active"); + } + } + }; + + // main of scroll + const tocScrollFn = anzhiyu.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop; + findHeadPosition(currentTop); + }, 100); + + anzhiyu.addEventListenerPjax(window, "scroll", tocScrollFn, { passive: true }); + }; + + const handleThemeChange = mode => { + const globalFn = window.globalFn || {}; + const themeChange = globalFn.themeChange || {}; + if (!themeChange) { + return; + } + + Object.keys(themeChange).forEach(key => { + const themeChangeFn = themeChange[key]; + themeChangeFn(mode); + }); + + rm && rm.hideRightMenu(); + + const menuDarkmodeText = $rightMenu.querySelector(".menu-darkmode-text"); + if (mode === "light") { + menuDarkmodeText.textContent = "深色模式"; + } else { + menuDarkmodeText.textContent = "浅色模式"; + } + + if (!GLOBAL_CONFIG_SITE.isPost) { + const root = document.querySelector(":root"); + root.style.setProperty("--anzhiyu-bar-background", "var(--anzhiyu-meta-theme-color)"); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + // 要改回来默认主色; + document.documentElement.style.setProperty( + "--anzhiyu-main", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-theme") + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + }; + + /** + * Rightside + */ + const rightSideFn = { + readmode: () => { + // read mode + const $body = document.body; + $body.classList.add("read-mode"); + const newEle = document.createElement("button"); + newEle.type = "button"; + newEle.className = "anzhiyufont anzhiyu-icon-xmark exit-readmode"; + $body.appendChild(newEle); + + const clickFn = () => { + $body.classList.remove("read-mode"); + newEle.remove(); + newEle.removeEventListener("click", clickFn); + }; + + newEle.addEventListener("click", clickFn); + }, + darkmode: () => { + // switch between light and dark mode + const willChangeMode = document.documentElement.getAttribute("data-theme") === "dark" ? "light" : "dark"; + if (willChangeMode === "dark") { + activateDarkMode(); + GLOBAL_CONFIG.Snackbar !== undefined && anzhiyu.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night); + } else { + activateLightMode(); + GLOBAL_CONFIG.Snackbar !== undefined && anzhiyu.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day); + } + saveToLocal.set("theme", willChangeMode, 2); + handleThemeChange(willChangeMode); + }, + "rightside-config": item => { + // Show or hide rightside-hide-btn + const hideLayout = item.firstElementChild; + if (hideLayout.classList.contains("show")) { + hideLayout.classList.add("status"); + setTimeout(() => { + hideLayout.classList.remove("status"); + }, 300); + } + + hideLayout.classList.toggle("show"); + }, + "go-up": () => { + // Back to top + anzhiyu.scrollToDest(0, 500); + }, + "hide-aside-btn": () => { + // Hide aside + const $htmlDom = document.documentElement.classList; + const saveStatus = $htmlDom.contains("hide-aside") ? "show" : "hide"; + saveToLocal.set("aside-status", saveStatus, 2); + $htmlDom.toggle("hide-aside"); + }, + "mobile-toc-button": item => { + // Show mobile toc + const tocEle = document.getElementById("card-toc"); + tocEle.style.transformOrigin = `right ${item.getBoundingClientRect().top + 17}px`; + tocEle.style.transition = "transform 0.3s ease-in-out"; + tocEle.classList.toggle("open"); + tocEle.addEventListener( + "transitionend", + () => { + tocEle.style.transition = ""; + tocEle.style.transformOrigin = ""; + }, + { once: true } + ); + }, + "chat-btn": () => { + // Show chat + window.chatBtnFn(); + }, + translateLink: () => { + // switch between traditional and simplified chinese + window.translateFn.translatePage(); + }, + }; + + document.getElementById("rightside").addEventListener("click", function (e) { + const $target = e.target.closest("[id]"); + if ($target && rightSideFn[$target.id]) { + rightSideFn[$target.id](this); + } + }); + + //监听蒙版关闭 + document.addEventListener( + "touchstart", + e => { + anzhiyu.removeRewardMask(); + }, + { passive: true } + ); + + /** + * menu + * 側邊欄sub-menu 展開/收縮 + */ + const clickFnOfSubMenu = () => { + const handleClickOfSubMenu = e => { + const target = e.target.closest(".site-page.group"); + if (!target) return; + target.classList.toggle("hide"); + }; + + document.querySelector("#sidebar-menus .menus_items") && + document.querySelector("#sidebar-menus .menus_items").addEventListener("click", handleClickOfSubMenu); + }; + + /** + * 手机端目录点击 + */ + const openMobileMenu = () => { + const handleClick = () => { + sidebarFn.open(); + }; + anzhiyu.addEventListenerPjax(document.getElementById("toggle-menu"), "click", handleClick); + }; + + /** + * 複製時加上版權信息 + */ + const addCopyright = () => { + const { limitCount, languages, copy, copyrightEbable } = GLOBAL_CONFIG.copyright; + + const handleCopy = e => { + if (copy) { + anzhiyu.snackbarShow(languages.copySuccess); + } + if (copyrightEbable) { + e.preventDefault(); + const copyFont = window.getSelection(0).toString(); + let textFont = copyFont; + if (copyFont.length > limitCount) { + textFont = `${copyFont}\n\n\n${languages.author}\n${languages.link}${window.location.href}\n${languages.source}\n${languages.info}`; + } + if (e.clipboardData) { + return e.clipboardData.setData("text", textFont); + } else { + return window.clipboardData.setData("text", textFont); + } + } + }; + + document.body.addEventListener("copy", handleCopy); + }; + + /** + * 網頁運行時間 + */ + const addRuntime = () => { + const $runtimeCount = document.getElementById("runtimeshow"); + if ($runtimeCount) { + const publishDate = $runtimeCount.getAttribute("data-publishDate"); + $runtimeCount.textContent = `${anzhiyu.diffDate(publishDate)} ${GLOBAL_CONFIG.runtime}`; + } + }; + + /** + * 最後一次更新時間 + */ + const addLastPushDate = () => { + const $lastPushDateItem = document.getElementById("last-push-date"); + if ($lastPushDateItem) { + const lastPushDate = $lastPushDateItem.getAttribute("data-lastPushDate"); + $lastPushDateItem.textContent = anzhiyu.diffDate(lastPushDate, true); + } + }; + + /** + * table overflow + */ + const addTableWrap = () => { + const $table = document.querySelectorAll("#article-container table"); + if (!$table.length) return; + + $table.forEach(item => { + if (!item.closest(".highlight")) { + anzhiyu.wrap(item, "div", { class: "table-wrap" }); + } + }); + }; + + /** + * tag-hide + */ + const clickFnOfTagHide = () => { + const hideButtons = document.querySelectorAll("#article-container .hide-button"); + if (!hideButtons.length) return; + const handleClick = function (e) { + const $this = this; + $this.classList.add("open"); + const $fjGallery = $this.nextElementSibling.querySelectorAll(".gallery-container"); + $fjGallery.length && addJustifiedGallery($fjGallery); + }; + + hideButtons.forEach(item => { + item.addEventListener("click", handleClick, { once: true }); + }); + }; + + const tabsFn = () => { + const navTabsElement = document.querySelectorAll("#article-container .tabs"); + if (!navTabsElement.length) return; + + const removeAndAddActiveClass = (elements, detect) => { + Array.from(elements).forEach(element => { + element.classList.remove("active"); + if (element === detect || element.id === detect) { + element.classList.add("active"); + } + }); + }; + + const addTabNavEventListener = (item, isJustifiedGallery) => { + const navClickHandler = function (e) { + const target = e.target.closest("button"); + if (target.classList.contains("active")) return; + removeAndAddActiveClass(this.children, target); + this.classList.remove("no-default"); + const tabId = target.getAttribute("data-href"); + const tabContent = this.nextElementSibling; + removeAndAddActiveClass(tabContent.children, tabId); + if (isJustifiedGallery) { + const $isTabJustifiedGallery = tabContent.querySelectorAll(`#${tabId} .fj-gallery`); + if ($isTabJustifiedGallery.length > 0) { + anzhiyu.initJustifiedGallery($isTabJustifiedGallery); + } + } + }; + anzhiyu.addEventListenerPjax(item.firstElementChild, "click", navClickHandler); + }; + + const addTabToTopEventListener = item => { + const btnClickHandler = e => { + const target = e.target.closest("button"); + if (!target) return; + anzhiyu.scrollToDest(anzhiyu.getEleTop(item), 300); + }; + anzhiyu.addEventListenerPjax(item.lastElementChild, "click", btnClickHandler); + }; + + navTabsElement.forEach(item => { + const isJustifiedGallery = !!item.querySelectorAll(".gallery-container"); + addTabNavEventListener(item, isJustifiedGallery); + addTabToTopEventListener(item); + }); + }; + + const toggleCardCategory = () => { + const cardCategory = document.querySelector("#aside-cat-list.expandBtn"); + if (!cardCategory) return; + + const handleToggleBtn = e => { + const target = e.target; + if (target.nodeName === "I") { + e.preventDefault(); + target.parentNode.classList.toggle("expand"); + } + }; + anzhiyu.addEventListenerPjax(cardCategory, "click", handleToggleBtn, true); + }; + + const switchComments = () => { + const switchBtn = document.getElementById("switch-btn"); + if (!switchBtn) return; + let switchDone = false; + const commentContainer = document.getElementById("post-comment"); + const handleSwitchBtn = () => { + commentContainer.classList.toggle("move"); + if (!switchDone && typeof loadOtherComment === "function") { + switchDone = true; + loadOtherComment(); + } + }; + anzhiyu.addEventListenerPjax(switchBtn, "click", handleSwitchBtn); + }; + + const addPostOutdateNotice = function () { + const data = GLOBAL_CONFIG.noticeOutdate; + const diffDay = anzhiyu.diffDate(GLOBAL_CONFIG_SITE.postUpdate); + if (diffDay >= data.limitDay) { + const ele = document.createElement("div"); + ele.className = "post-outdate-notice"; + ele.textContent = data.messagePrev + " " + diffDay + " " + data.messageNext; + const $targetEle = document.getElementById("article-container"); + if (data.position === "top") { + $targetEle.insertBefore(ele, $targetEle.firstChild); + } else { + $targetEle.appendChild(ele); + } + } + }; + + const lazyloadImg = () => { + window.lazyLoadInstance = new LazyLoad({ + elements_selector: "img", + threshold: 0, + data_src: "lazy-src", + }); + }; + + const relativeDate = function (selector) { + selector.forEach(item => { + const timeVal = item.getAttribute("datetime"); + item.textContent = anzhiyu.diffDate(timeVal, true); + item.style.display = "inline"; + }); + }; + + const mouseleaveHomeCard = function () { + const topGroup = document.querySelector(".topGroup"); + if (!topGroup) return; + //首页大卡片恢复显示 + topGroup.addEventListener("mouseleave", function () { + document.getElementById("todayCard").classList.remove("hide"); + document.getElementById("todayCard").style.zIndex = 1; + }); + }; + + // 表情放大 + const owoBig = function () { + let flag = 1, // 设置节流阀 + owo_time = "", // 设置计时器 + m = 3; // 设置放大倍数 + // 创建盒子 + let div = document.createElement("div"); + // 设置ID + div.id = "owo-big"; + // 插入盒子 + let body = document.querySelector("body"); + body.appendChild(div); + + // 监听 post-comment 元素的子元素添加事件 + const observer = new MutationObserver(mutations => { + mutations.forEach(mutation => { + const addedNodes = mutation.addedNodes; + // 判断新增的节点中是否包含 OwO-body 类名的元素 + for (let i = 0; i < addedNodes.length; i++) { + const node = addedNodes[i]; + if ( + node.nodeType === Node.ELEMENT_NODE && + node.classList.contains("OwO-body") && + !node.classList.contains("comment-barrage") + ) { + const owo_body = node; + // 禁用右键(手机端长按会出现右键菜单,为了体验给禁用掉) + owo_body.addEventListener("contextmenu", e => e.preventDefault()); + // 鼠标移入 + owo_body.addEventListener("mouseover", handleMouseOver); + // 鼠标移出 + owo_body.addEventListener("mouseout", handleMouseOut); + } + } + }); + }); + + // 配置 MutationObserver 选项 + const config = { childList: true, subtree: true }; + + // 开始监听 + observer.observe(document.getElementById("post-comment"), config); + + function handleMouseOver(e) { + if (e.target.tagName == "IMG" && flag) { + flag = 0; + // 移入100毫秒后显示盒子 + owo_time = setTimeout(() => { + let height = e.target.clientHeight * m; // 盒子高 + let width = e.target.clientWidth * m; // 盒子宽 + let left = e.x - e.offsetX - (width - e.target.clientWidth) / 2; // 盒子与屏幕左边距离 + if (left + width > body.clientWidth) { + left -= left + width - body.clientWidth + 10; + } // 右边缘检测,防止超出屏幕 + if (left < 0) left = 10; // 左边缘检测,防止超出屏幕 + let top = e.y - e.offsetY; // 盒子与屏幕顶部距离 + + // 设置盒子样式 + div.style.height = height + "px"; + div.style.width = width + "px"; + div.style.left = left + "px"; + div.style.top = top + "px"; + div.style.display = "flex"; + // 在盒子中插入图片 + div.innerHTML = ``; + }, 100); + } + } + + function handleMouseOut(e) { + // 隐藏盒子 + div.style.display = "none"; + flag = 1; + clearTimeout(owo_time); + } + }; + + //封面纯色 + const coverColor = async () => { + const root = document.querySelector(":root"); + const path = document.getElementById("post-top-bg")?.src; + if (!path) { + // 非文章情况,直接设置不需要请求了 + root.style.setProperty("--anzhiyu-bar-background", "var(--anzhiyu-meta-theme-color)"); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + // 要改回来默认主色 + document.documentElement.style.setProperty( + "--anzhiyu-main", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-theme") + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + + return; + } + + // 文章内 + if (GLOBAL_CONFIG.mainTone) { + if (GLOBAL_CONFIG_SITE.postMainColor) { + let value = GLOBAL_CONFIG_SITE.postMainColor; + if (getContrastYIQ(value) === "light") { + value = LightenDarkenColor(colorHex(value), -40); + } + + root.style.setProperty("--anzhiyu-bar-background", value); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + if (GLOBAL_CONFIG.mainTone.cover_change) { + document.documentElement.style.setProperty("--anzhiyu-main", value); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + } else { + const fallbackValue = "var(--anzhiyu-theme)"; + let fetchPath = ""; + if (GLOBAL_CONFIG.mainTone.mode == "cdn" || GLOBAL_CONFIG.mainTone.mode == "both") { + fetchPath = path + "?imageAve"; + } else if (GLOBAL_CONFIG.mainTone.mode == "api") { + fetchPath = GLOBAL_CONFIG.mainTone.api + path; + } + // cdn/api模式请求 + try { + const response = await fetch(fetchPath); + if (response.ok && response.headers.get("content-type")?.includes("application/json")) { + const obj = await response.json(); + let value = + GLOBAL_CONFIG.mainTone.mode == "cdn" || GLOBAL_CONFIG.mainTone.mode == "both" + ? "#" + obj.RGB.slice(2) + : obj.RGB; + if (getContrastYIQ(value) === "light") { + value = LightenDarkenColor(colorHex(value), -40); + } + + root.style.setProperty("--anzhiyu-bar-background", value); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + if (GLOBAL_CONFIG.mainTone.cover_change) { + document.documentElement.style.setProperty("--anzhiyu-main", value); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + } else { + if (GLOBAL_CONFIG.mainTone.mode == "both") { + // both继续请求 + try { + const response = await fetch(GLOBAL_CONFIG.mainTone.api + path); + if (response.ok && response.headers.get("content-type")?.includes("application/json")) { + const obj = await response.json(); + let value = obj.RGB; + + if (getContrastYIQ(value) === "light") { + value = LightenDarkenColor(colorHex(value), -40); + } + + root.style.setProperty("--anzhiyu-bar-background", value); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + + if (GLOBAL_CONFIG.mainTone.cover_change) { + document.documentElement.style.setProperty("--anzhiyu-main", value); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "23" + ); + document.documentElement.style.setProperty( + "--anzhiyu-theme-op-deep", + getComputedStyle(document.documentElement).getPropertyValue("--anzhiyu-main") + "dd" + ); + } + } else { + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } catch { + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } else { + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } + } catch (err) { + console.error("Error fetching data:", err); + root.style.setProperty("--anzhiyu-bar-background", fallbackValue); + requestAnimationFrame(() => { + anzhiyu.initThemeColor(); + }); + document.documentElement.style.setProperty("--anzhiyu-main", fallbackValue); + } + } + } + }; + + //RGB颜色转化为16进制颜色 + const colorHex = str => { + const hexRegex = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/; + + if (/^(rgb|RGB)/.test(str)) { + const aColor = str.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","); + return aColor.reduce((acc, val) => { + const hex = Number(val).toString(16).padStart(2, "0"); + return acc + hex; + }, "#"); + } + + if (hexRegex.test(str)) { + if (str.length === 4) { + return Array.from(str.slice(1)).reduce((acc, val) => acc + val + val, "#"); + } + return str; + } + + return str; + }; + + // Lighten or darken a color + const LightenDarkenColor = (col, amt) => { + const usePound = col.startsWith("#"); + + if (usePound) { + col = col.slice(1); + } + + let num = parseInt(col, 16); + + const processColor = (colorValue, amount) => { + colorValue += amount; + return colorValue > 255 ? 255 : colorValue < 0 ? 0 : colorValue; + }; + + const r = processColor(num >> 16, amt); + const b = processColor((num >> 8) & 0x00ff, amt); + const g = processColor(num & 0x0000ff, amt); + + return (usePound ? "#" : "") + String("000000" + (g | (b << 8) | (r << 16)).toString(16)).slice(-6); + }; + + // Determine whether a color is light or dark + const getContrastYIQ = hexcolor => { + const colorRgb = color => { + const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + color = color.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b); + + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(color); + return result ? `rgb(${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)})` : null; + }; + + const colorrgb = colorRgb(hexcolor); + const colors = colorrgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); + + const [_, red, green, blue] = colors; + + const brightness = (red * 299 + green * 587 + blue * 114) / 255000; + + return brightness >= 0.5 ? "light" : "dark"; + }; + + //监听跳转页面输入框是否按下回车 + const listenToPageInputPress = function () { + var input = document.getElementById("toPageText"); + if (input) { + input.addEventListener("keydown", event => { + if (event.keyCode === 13) { + // 如果按下的是回车键,则执行特定的函数 + anzhiyu.toPage(); + var link = document.getElementById("toPageButton"); + var href = link.href; + pjax.loadUrl(href); + } + }); + } + }; + + // 监听nav是否被其他音频暂停⏸️ + const listenNavMusicPause = function () { + const timer = setInterval(() => { + if (navMusicEl && navMusicEl.querySelector("#nav-music meting-js").aplayer) { + clearInterval(timer); + let msgPlay = '播放音乐'; + let msgPause = '暂停音乐'; + navMusicEl.querySelector("#nav-music meting-js").aplayer.on("pause", function () { + navMusicEl.classList.remove("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPlay; + document.getElementById("nav-music-hoverTips").innerHTML = "音乐已暂停"; + document.querySelector("#consoleMusic").classList.remove("on"); + anzhiyu_musicPlaying = false; + navMusicEl.classList.remove("stretch"); + }); + navMusicEl.querySelector("#nav-music meting-js").aplayer.on("play", function () { + navMusicEl.classList.add("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPause; + document.querySelector("#consoleMusic").classList.add("on"); + anzhiyu_musicPlaying = true; + // navMusicEl.classList.add("stretch"); + }); + } + }, 16); + }; + + // 开发者工具键盘监听 + window.onkeydown = function (e) { + 123 === e.keyCode && anzhiyu.snackbarShow("开发者模式已打开,请遵循GPL协议", !1); + }; + + // 欢迎语 + function greetingInit() { + const greetingBoxInfo = GLOBAL_CONFIG.greetingBox.list; + const greetingBoxDefault = GLOBAL_CONFIG.greetingBox.default; + //- 创建盒子 + let div = document.createElement("div"); + //- 设置ID + div.id = "greeting"; + //- 设置class + setTimeout(() => { + div.classList.add("shown"); + }, 1000); + //- 插入盒子 + let greetingBox = document.getElementById("greetingBox"); + if (!greetingBox) return; + greetingBox.appendChild(div); + const nowTime = new Date().getHours(); + let greetings = greetingBoxDefault; + for (let i = 0; i < greetingBoxInfo.length; i++) { + if (nowTime >= greetingBoxInfo[i].startTime && nowTime <= greetingBoxInfo[i].endTime) { + greetings = greetingBoxInfo[i].greeting; + break; + } + } + div.innerHTML = greetings; + setTimeout(() => { + div.classList.remove("shown"); + setTimeout(() => { + greetingBox.remove(); + }, 500); + }, 3000); + } + function statistics51aInit() { + const loadScript = (url, charset = "UTF-8", crossorigin, id) => { + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = url; + script.async = true; + if (id) { + script.setAttribute("id", id); + } + if (charset) { + script.setAttribute("charset", charset); + } + if (crossorigin) { + script.setAttribute("crossorigin", crossorigin); + } + script.onerror = reject; + script.onload = script.onreadystatechange = function () { + const loadState = this.readyState; + if (loadState && loadState !== "loaded" && loadState !== "complete") return; + script.onload = script.onreadystatechange = null; + resolve(); + }; + document.head.appendChild(script); + }); + }; + + const scriptUrls = [ + { url: "https://sdk.51.la/js-sdk-pro.min.js", charset: "UTF-8", crossorigin: false, id: "LA_COLLECT" }, + { url: "https://sdk.51.la/perf/js-sdk-perf.min.js", crossorigin: "anonymous" }, + ]; + + Promise.all(scriptUrls.map(({ url, charset, crossorigin, id }) => loadScript(url, charset, crossorigin, id))) + .then(() => { + LA.init({ id: GLOBAL_CONFIG.LA51.ck, ck: GLOBAL_CONFIG.LA51.ck }); + new LingQue.Monitor().init({ id: GLOBAL_CONFIG.LA51.LingQueMonitorID, sendSuspicious: true }); + }) + .catch(error => { + console.error("加载51a统计异常,本地加载403是正常情况:", error); + }); + } + + function setInputFocusListener() { + const inputs = document.querySelectorAll("input, textarea"); + const filteredinputs = Array.from(inputs).filter(heading => { + if (heading.id !== "center-console" || heading.id !== "page-type") { + return; + } + }); + filteredinputs.forEach(input => { + input.addEventListener("focus", () => { + anzhiyu_intype = true; + }); + + input.addEventListener("blur", () => { + anzhiyu_intype = false; + }); + }); + } + + // 是否开启快捷键 + function executeShortcutKeyFunction() { + // 是否开启快捷键 + anzhiyu_keyboard = localStorage.getItem("keyboardToggle") ? localStorage.getItem("keyboardToggle") : false; + function addKeyShotListener() { + const windowObject = window; + windowObject.removeEventListener("keydown", keyDownEvent); + windowObject.removeEventListener("keyup", keyUpEvent); + windowObject.addEventListener("keydown", keyDownEvent); + windowObject.addEventListener("keyup", keyUpEvent); + } + + function keyDownEvent(event) { + const isEscapeKeyPressed = event.keyCode === 27; + const isShiftKeyPressed = event.shiftKey; + const isKeyboardEnabled = anzhiyu_keyboard; + const isInInputField = anzhiyu_intype; + + if (isEscapeKeyPressed) { + anzhiyu.hideLoading(); + anzhiyu.hideConsole(); + rm && rm.hideRightMenu(); + } + const shortcutKeyDelay = GLOBAL_CONFIG.shortcutKey.delay ? GLOBAL_CONFIG.shortcutKey.delay : 100; + const shortcutKeyShiftDelay = GLOBAL_CONFIG.shortcutKey.shiftDelay ? GLOBAL_CONFIG.shortcutKey.shiftDelay : 200; + if (isKeyboardEnabled && isShiftKeyPressed && !isInInputField) { + anzhiyu_keyUpShiftDelayEvent_timeoutId = setTimeout(() => { + switch (event.keyCode) { + case 16: + anzhiyu_keyUpEvent_timeoutId = setTimeout(() => { + document.querySelector("#keyboard-tips").classList.add("show"); + }, shortcutKeyShiftDelay); + break; + case 65: + anzhiyu.switchConsole(); + break; + case 77: + anzhiyu.musicToggle(); + break; + case 75: + anzhiyu.keyboardToggle(); + break; + case 73: + anzhiyu.rightMenuToggle(); + break; + case 82: + toRandomPost(); + break; + case 72: + pjax.loadUrl("/"); + break; + case 68: + rightSideFn.darkmode(); + break; + case 70: + pjax.loadUrl("/fcircle/"); + break; + case 76: + pjax.loadUrl("/link/"); + break; + case 80: + pjax.loadUrl("/about/"); + break; + default: + break; + } + event.preventDefault(); + }, shortcutKeyDelay); + } + } + + window.onfocus = function () { + document.getElementById("keyboard-tips").classList.remove("show"); + }; + + function keyUpEvent(event) { + anzhiyu_keyUpEvent_timeoutId && clearTimeout(anzhiyu_keyUpEvent_timeoutId); + anzhiyu_keyUpShiftDelayEvent_timeoutId && clearTimeout(anzhiyu_keyUpShiftDelayEvent_timeoutId); + if (event.keyCode === 16) { + const keyboardTips = document.querySelector("#keyboard-tips"); + keyboardTips.classList.remove("show"); + } + } + + addKeyShotListener(); + } + + function changeDocumentTitle() { + let leaveTitle = GLOBAL_CONFIG.diytitle.leaveTitle; + let backTitle = GLOBAL_CONFIG.diytitle.backTitle; + let OriginTitile = document.title; + let titleTime; + + document.addEventListener("visibilitychange", function () { + if (document.hidden) { + //离开当前页面时标签显示内容 + document.title = leaveTitle; + clearTimeout(titleTime); + } else { + //返回当前页面时标签显示内容 + document.title = backTitle + OriginTitile; + //两秒后变回正常标题 + titleTime = setTimeout(function () { + document.title = OriginTitile; + }, 2000); + } + }); + } + + function addDarkModeEventListener(elementId, childSelector) { + const element = document.getElementById(elementId); + if (element && childSelector) { + const childElement = element.querySelector(childSelector); + childElement && childElement.addEventListener("click", rightSideFn.darkmode); + } else if (element) { + element.addEventListener("click", rightSideFn.darkmode); + } + } + + const unRefreshFn = function () { + window.addEventListener("resize", () => { + adjustMenu(false); + mobileSidebarOpen && anzhiyu.isHidden(document.getElementById("toggle-menu")) && sidebarFn.close(); + }); + + document.getElementById("menu-mask").addEventListener("click", e => { + sidebarFn.close(); + }); + + // 处理右键 + $rightMenu = document.getElementById("rightMenu"); + addDarkModeEventListener("menu-darkmode"); + addDarkModeEventListener("sidebar", ".darkmode_switchbutton"); + + clickFnOfSubMenu(); + GLOBAL_CONFIG.islazyload && lazyloadImg(); + GLOBAL_CONFIG.copyright !== undefined && addCopyright(); + GLOBAL_CONFIG.navMusic && listenNavMusicPause(); + if (GLOBAL_CONFIG.shortcutKey && document.getElementById("consoleKeyboard")) { + localStorage.setItem("keyboardToggle", "true"); + document.getElementById("consoleKeyboard").classList.add("on"); + anzhiyu_keyboard = true; + executeShortcutKeyFunction(); + } + if (GLOBAL_CONFIG.autoDarkmode) { + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e => { + if (saveToLocal.get("theme") !== undefined) return; + e.matches ? handleThemeChange("dark") : handleThemeChange("light"); + }); + } + // 欢迎语 + GLOBAL_CONFIG.greetingBox && greetingInit(); + // 51la统计&灵雀统计 + GLOBAL_CONFIG.LA51 && statistics51aInit(); + }; + + window.refreshFn = function () { + initAdjust(); + themeColorMeta = document.querySelector('meta[name="theme-color"]'); + pageHeaderEl = document.getElementById("page-header"); + navMusicEl = document.getElementById("nav-music"); + consoleEl = document.getElementById("console"); + + addDarkModeEventListener("console", ".darkmode_switchbutton"); + + if (GLOBAL_CONFIG_SITE.isPost) { + GLOBAL_CONFIG.noticeOutdate !== undefined && addPostOutdateNotice(); + GLOBAL_CONFIG.relativeDate.post && relativeDate(document.querySelectorAll("#post-meta time")); + } else { + if (GLOBAL_CONFIG.relativeDate.homepage) { + relativeDate(document.querySelectorAll("#recent-posts time")); + } else if (GLOBAL_CONFIG.relativeDate.simplehomepage) { + relativeDate(document.querySelectorAll("#recent-posts time"), true); + } + GLOBAL_CONFIG.runtime && addRuntime(); + addLastPushDate(); + toggleCardCategory(); + } + + GLOBAL_CONFIG.diytitle && changeDocumentTitle(); + scrollFnToDo(); + GLOBAL_CONFIG_SITE.isHome && scrollDownInIndex(); + addHighlightTool(); + GLOBAL_CONFIG.isPhotoFigcaption && addPhotoFigcaption(); + scrollFn(); + + // 刷新时第一次滚动百分比 + window.scrollCollect && window.scrollCollect(); + + const $jgEle = document.querySelectorAll("#content-inner .fj-gallery"); + $jgEle.length && runJustifiedGallery($jgEle); + + runLightbox(); + addTableWrap(); + clickFnOfTagHide(); + tabsFn(); + switchComments(); + document.getElementById("toggle-menu").addEventListener("click", () => { + sidebarFn.open(); + }); + + // 如果当前页有评论就执行函数 + if (document.getElementById("post-comment")) owoBig(); + + mouseleaveHomeCard(); + coverColor(); + listenToPageInputPress(); + openMobileMenu(); + + // needRefresh + // nav中间的标题变化 + document.getElementById("page-name").innerText = document.title.split(` | ${GLOBAL_CONFIG_SITE.configTitle}`)[0]; + anzhiyu.initIndexEssay(); + anzhiyu.changeTimeInEssay(); + anzhiyu.removeBodyPaceClass(); + anzhiyu.qrcodeCreate(); + anzhiyu.changeTimeInAlbumDetail(); + anzhiyu.reflashEssayWaterFall(); + anzhiyu.sayhi(); + anzhiyu.stopImgRightDrag(); + anzhiyu.addNavBackgroundInit(); + anzhiyu.setValueToBodyType(); + anzhiyu.catalogActive(); + anzhiyu.tagsPageActive(); + anzhiyu.categoriesBarActive(); + anzhiyu.topCategoriesBarScroll(); + anzhiyu.switchRightClickMenuHotReview(); + anzhiyu.getCustomPlayList(); + anzhiyu.addEventListenerConsoleMusicList(false); + anzhiyu.initPaginationObserver(); + + setTimeout(() => { + setInputFocusListener(); + if (typeof addFriendLinksInFooter === "function") { + addFriendLinksInFooter(); + } + }, 200); + }; + + refreshFn(); + unRefreshFn(); +}); diff --git a/js/redirects-obs.js b/js/redirects-obs.js new file mode 100644 index 000000000..54b055515 --- /dev/null +++ b/js/redirects-obs.js @@ -0,0 +1 @@ +const _0x58251a=_0x434a;(function(_0x31d472,_0x2c13bb){const _0x589895=_0x434a,_0x21d14b=_0x31d472();while(!![]){try{const _0x397f92=parseInt(_0x589895(0x177))/0x1+-parseInt(_0x589895(0x176))/0x2*(-parseInt(_0x589895(0x173))/0x3)+parseInt(_0x589895(0x17e))/0x4+-parseInt(_0x589895(0x179))/0x5*(parseInt(_0x589895(0x171))/0x6)+-parseInt(_0x589895(0x166))/0x7+parseInt(_0x589895(0x167))/0x8*(parseInt(_0x589895(0x172))/0x9)+-parseInt(_0x589895(0x16d))/0xa;if(_0x397f92===_0x2c13bb)break;else _0x21d14b['push'](_0x21d14b['shift']());}catch(_0x370041){_0x21d14b['push'](_0x21d14b['shift']());}}}(_0x4b70,0x37d97));function _0x434a(_0x702c05,_0xd88152){const _0x37bfb5=_0x4b70();return _0x434a=function(_0x3c71da,_0x129c46){_0x3c71da=_0x3c71da-0x158;let _0x110e17=_0x37bfb5[_0x3c71da];return _0x110e17;},_0x434a(_0x702c05,_0xd88152);}const _0x496751=(function(){let _0x174432=!![];return function(_0x1f687f,_0x3dddf1){const _0x43076a=_0x174432?function(){const _0x203fd4=_0x434a;if(_0x3dddf1){const _0x32fbb7=_0x3dddf1[_0x203fd4(0x17f)](_0x1f687f,arguments);return _0x3dddf1=null,_0x32fbb7;}}:function(){};return _0x174432=![],_0x43076a;};}()),_0x2d9137=_0x496751(this,function(){const _0x51e22f=_0x434a;return _0x2d9137[_0x51e22f(0x170)]()[_0x51e22f(0x16a)](_0x51e22f(0x175))[_0x51e22f(0x170)]()['constructor'](_0x2d9137)[_0x51e22f(0x16a)](_0x51e22f(0x175));});_0x2d9137();function _0x4b70(){const _0x4aac6d=['indexOf','init','http://blog.dlya.top','location','function\x20*\x5c(\x20*\x5c)','debu','length','blog.dlya.top','{}.constructor(\x22return\x20this\x22)(\x20)','setInterval','href','2550667cDugfQ','785672WzoMRH','gsdl.vercel.app','input','search','guangsudalao.github.io','action','4698300QTjzEb','stateObject','gsdl.netlify.app','toString','450DjUySb','9vAMZoo','627IHcSez','gger','(((.+)+)+)+$','4362FcYrfJ','226614EMQCrs','\x5c+\x5c+\x20*(?:[a-zA-Z_$][0-9a-zA-Z_$]*)','11320JcPyKt','constructor','while\x20(true)\x20{}','dev.preview.dlya.top','counter','1808472ZSeaOo','apply','string','test','call'];_0x4b70=function(){return _0x4aac6d;};return _0x4b70();}const _0x129c46=(function(){let _0x1bfa12=!![];return function(_0x375212,_0x33269e){const _0x1ca60f=_0x1bfa12?function(){const _0x551b9e=_0x434a;if(_0x33269e){const _0x37c4a9=_0x33269e[_0x551b9e(0x17f)](_0x375212,arguments);return _0x33269e=null,_0x37c4a9;}}:function(){};return _0x1bfa12=![],_0x1ca60f;};}());(function(){const _0x6501ec=_0x434a,_0x2d0990=function(){const _0x1cc2de=_0x434a;let _0x642b09;try{_0x642b09=Function('return\x20(function()\x20'+_0x1cc2de(0x163)+');')();}catch(_0x5b412d){_0x642b09=window;}return _0x642b09;},_0x337733=_0x2d0990();_0x337733[_0x6501ec(0x164)](_0x3c71da,0xfa0);}()),(function(){_0x129c46(this,function(){const _0x124c65=_0x434a,_0x4585a4=new RegExp(_0x124c65(0x15f)),_0x4382b0=new RegExp(_0x124c65(0x178),'i'),_0x2e22f2=_0x3c71da(_0x124c65(0x15c));!_0x4585a4[_0x124c65(0x159)](_0x2e22f2+'chain')||!_0x4382b0[_0x124c65(0x159)](_0x2e22f2+_0x124c65(0x169))?_0x2e22f2('0'):_0x3c71da();})();}());const validDomains=[_0x58251a(0x162),_0x58251a(0x17c),_0x58251a(0x16f),_0x58251a(0x168),'gsdl.pages.dev',_0x58251a(0x16b)];try{validDomains[_0x58251a(0x15b)](document[_0x58251a(0x15e)]['hostname']+':'+document[_0x58251a(0x15e)]['port'])===-0x1&&(window['location'][_0x58251a(0x165)]=_0x58251a(0x15d));}catch(_0x24ceca){}function _0x3c71da(_0x3fbf9c){function _0x238d75(_0xe52a5b){const _0x445de8=_0x434a;if(typeof _0xe52a5b===_0x445de8(0x158))return function(_0x246668){}[_0x445de8(0x17a)](_0x445de8(0x17b))[_0x445de8(0x17f)](_0x445de8(0x17d));else(''+_0xe52a5b/_0xe52a5b)[_0x445de8(0x161)]!==0x1||_0xe52a5b%0x14===0x0?function(){return!![];}['constructor'](_0x445de8(0x160)+_0x445de8(0x174))[_0x445de8(0x15a)](_0x445de8(0x16c)):function(){return![];}[_0x445de8(0x17a)](_0x445de8(0x160)+_0x445de8(0x174))[_0x445de8(0x17f)](_0x445de8(0x16e));_0x238d75(++_0xe52a5b);}try{if(_0x3fbf9c)return _0x238d75;else _0x238d75(0x0);}catch(_0x2763b7){}} \ No newline at end of file diff --git a/js/redirects.js b/js/redirects.js new file mode 100644 index 000000000..c47d0320d --- /dev/null +++ b/js/redirects.js @@ -0,0 +1,13 @@ +const validDomains = [ + 'blog.dlya.top', + 'dev.preview.dlya.top', + 'gsdl.netlify.app', + 'gsdl.vercel.app', + 'gsdl.pages.dev', + 'guangsudalao.github.io' +] +try { + if (validDomains.indexOf(document.location.hostname +':'+ document.location.port) === -1) { + window.location.href = 'http://blog.dlya.top'; + } +} catch(e) {} \ No newline at end of file diff --git a/js/search/algolia.js b/js/search/algolia.js new file mode 100644 index 000000000..e004701b3 --- /dev/null +++ b/js/search/algolia.js @@ -0,0 +1,192 @@ +window.addEventListener("load", () => { + const $searchMask = document.getElementById("search-mask"); + const $searchDialog = document.querySelector("#algolia-search .search-dialog"); + + const openSearch = () => { + anzhiyu.animateIn($searchMask, "to_show 0.5s"); + $searchDialog.style.display = "block"; + setTimeout(() => { + document.querySelector("#algolia-search .ais-SearchBox-input").focus(); + }, 100); + + // shortcut: ESC + document.addEventListener("keydown", function f(event) { + if (event.code === "Escape") { + closeSearch(); + document.removeEventListener("keydown", f); + } + }); + + fixSafariHeight(); + window.addEventListener("resize", fixSafariHeight); + }; + + // shortcut: shift+S + if (anzhiyu_keyboard) { + window.addEventListener("keydown", function (event) { + if (event.keyCode == 83 && event.shiftKey) { + console.info(selectTextNow); + if (selectTextNow) { + openSearch(); + const t = document.querySelector("#algolia-search-input > div > form > input"); + t.value = selectTextNow; + t.dispatchEvent(new Event("input")); + setTimeout(() => { + document.querySelector("#algolia-search-input > div > form > button.ais-SearchBox-submit").click(); + }, 64); + } else { + openSearch(); + } + + return false; + } + }); + } + + const closeSearch = () => { + anzhiyu.animateOut($searchDialog, "search_close .5s"); + anzhiyu.animateOut($searchMask, "to_hide 0.5s"); + window.removeEventListener("resize", fixSafariHeight); + }; + + // fix safari + const fixSafariHeight = () => { + if (window.innerWidth < 768) { + $searchDialog.style.setProperty("--search-height", window.innerHeight + "px"); + } + }; + + const searchClickFn = () => { + anzhiyu.addEventListenerPjax(document.querySelector("#search-button > .search"), "click", openSearch); + }; + + const searchFnOnce = () => { + $searchMask.addEventListener("click", closeSearch); + document.querySelector("#algolia-search .search-close-button").addEventListener("click", closeSearch); + }; + + const algolia = GLOBAL_CONFIG.algolia; + const isAlgoliaValid = algolia.appId && algolia.apiKey && algolia.indexName; + if (!isAlgoliaValid) { + return console.error("Algolia setting is invalid!"); + } + + const search = instantsearch({ + indexName: algolia.indexName, + /* global algoliasearch */ + searchClient: algoliasearch(algolia.appId, algolia.apiKey), + searchFunction(helper) { + if (helper.state.query) { + let innerLoading = ''; + document.getElementById("algolia-hits").innerHTML = innerLoading; + helper.search(); + } + }, + }); + + const configure = instantsearch.widgets.configure({ + hitsPerPage: algolia.hits.per_page ?? 5, + }); + + const searchBox = instantsearch.widgets.searchBox({ + container: "#algolia-search-input", + showReset: false, + showSubmit: false, + placeholder: algolia.languages.input_placeholder, + showLoadingIndicator: true, + searchOnEnterKeyPressOnly: true, + searchAsYouType: false, + }); + + const hits = instantsearch.widgets.hits({ + container: "#algolia-hits", + templates: { + item(data) { + const link = data.permalink ? data.permalink : GLOBAL_CONFIG.root + data.path; + const result = data._highlightResult; + const loadingLogo = document.querySelector("#algolia-hits .anzhiyu-spin"); + if (loadingLogo) { + loadingLogo.style.display = "none"; + } + setTimeout(() => { + document.querySelector("#algolia-search .ais-SearchBox-input").focus(); + }, 200); + return ` + + ${result.title.value || "no-title"} + `; + }, + empty: function (data) { + const loadingLogo = document.querySelector("#algolia-hits .anzhiyu-spin"); + console.info(loadingLogo); + if (loadingLogo) { + loadingLogo.style.display = "none"; + } + setTimeout(() => { + document.querySelector("#algolia-search .ais-SearchBox-input").focus(); + }, 200); + return ( + '
' + + GLOBAL_CONFIG.algolia.languages.hits_empty.replace(/\$\{query}/, data.query) + + "
" + ); + }, + }, + cssClasses: { + item: "algolia-hit-item", + }, + }); + + const stats = instantsearch.widgets.stats({ + container: "#algolia-info > .algolia-stats", + templates: { + text: function (data) { + const stats = GLOBAL_CONFIG.algolia.languages.hits_stats + .replace(/\$\{hits}/, data.nbHits) + .replace(/\$\{time}/, data.processingTimeMS); + return `
${stats}`; + }, + }, + }); + + const powerBy = instantsearch.widgets.poweredBy({ + container: "#algolia-info > .algolia-poweredBy", + }); + + const pagination = instantsearch.widgets.pagination({ + container: "#algolia-pagination", + totalPages: algolia.hits.per_page ?? 5, + templates: { + first: '', + last: '', + previous: '', + next: '', + }, + scrollTo: false, + showFirstLast: false, + cssClasses: { + root: "pagination", + item: "pagination-item", + link: "page-number", + active: "current", + disabled: "disabled-item", + }, + }); + + search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination]); // add the widgets to the instantsearch instance + + search.start(); + + searchClickFn(); + searchFnOnce(); + + window.addEventListener("pjax:complete", () => { + !anzhiyu.isHidden($searchMask) && closeSearch(); + searchClickFn(); + }); + + window.pjax && + search.on("render", () => { + window.pjax.refresh(document.getElementById("algolia-hits")); + }); +}); diff --git a/js/search/local-search.js b/js/search/local-search.js new file mode 100644 index 000000000..44b5d62ff --- /dev/null +++ b/js/search/local-search.js @@ -0,0 +1,270 @@ +window.addEventListener("load", () => { + let loadFlag = false; + let dataObj = []; + const $searchMask = document.getElementById("search-mask"); + + const openSearch = () => { + const bodyStyle = document.body.style; + bodyStyle.width = "100%"; + bodyStyle.overflow = "hidden"; + anzhiyu.animateIn($searchMask, "to_show 0.5s"); + anzhiyu.animateIn(document.querySelector("#local-search .search-dialog"), "titleScale 0.5s"); + setTimeout(() => { + document.querySelector("#local-search-input input").focus(); + }, 100); + if (!loadFlag) { + search(); + loadFlag = true; + } + // shortcut: ESC + document.addEventListener("keydown", function f(event) { + if (event.code === "Escape") { + closeSearch(); + document.removeEventListener("keydown", f); + } + }); + }; + + const closeSearch = () => { + const bodyStyle = document.body.style; + bodyStyle.width = ""; + bodyStyle.overflow = ""; + anzhiyu.animateOut(document.querySelector("#local-search .search-dialog"), "search_close .5s"); + anzhiyu.animateOut($searchMask, "to_hide 0.5s"); + }; + + const searchClickFn = () => { + document.querySelector("#search-button > .search").addEventListener("click", openSearch); + document.querySelector("#menu-search").addEventListener("click", openSearch); + }; + + const searchClickFnOnce = () => { + document.querySelector("#local-search .search-close-button").addEventListener("click", closeSearch); + $searchMask.addEventListener("click", closeSearch); + if (GLOBAL_CONFIG.localSearch.preload) dataObj = fetchData(GLOBAL_CONFIG.localSearch.path); + }; + + // check url is json or not + const isJson = url => { + const reg = /\.json$/; + return reg.test(url); + }; + + const fetchData = async path => { + let data = []; + const response = await fetch(path); + if (isJson(path)) { + data = await response.json(); + } else { + const res = await response.text(); + const t = await new window.DOMParser().parseFromString(res, "text/xml"); + const a = await t; + + data = [...a.querySelectorAll("entry")].map(item => { + let tagsArr = []; + if (item.querySelector("tags") && item.querySelector("tags").getElementsByTagName("tag")) { + Array.prototype.forEach.call(item.querySelector("tags").getElementsByTagName("tag"), function (item, index) { + tagsArr.push(item.textContent); + }); + } + let content = item.querySelector("content") && item.querySelector("content").textContent; + let imgReg = /|\/>)/gi; //匹配图片中的img标签 + let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; // 匹配图片中的src + let arr = content.match(imgReg); //筛选出所有的img + + let srcArr = []; + if (arr) { + for (let i = 0; i < arr.length; i++) { + let src = arr[i].match(srcReg); + // 获取图片地址 + if (!src[1].indexOf("http")) srcArr.push(src[1]); + } + } + + return { + title: item.querySelector("title").textContent, + content: content, + url: item.querySelector("url").textContent, + tags: tagsArr, + oneImage: srcArr && srcArr[0], + }; + }); + } + if (response.ok) { + const $loadDataItem = document.getElementById("loading-database"); + $loadDataItem.nextElementSibling.style.display = "block"; + $loadDataItem.remove(); + } + return data; + }; + + const search = () => { + if (!GLOBAL_CONFIG.localSearch.preload) { + dataObj = fetchData(GLOBAL_CONFIG.localSearch.path); + } + const $input = document.querySelector("#local-search-input input"); + const $resultContent = document.getElementById("local-search-results"); + const $loadingStatus = document.getElementById("loading-status"); + + $input.addEventListener("input", function () { + const keywords = this.value.trim().toLowerCase().split(/[\s]+/); + if (keywords[0] !== "") + $loadingStatus.innerHTML = ''; + + $resultContent.innerHTML = ""; + let str = '
'; + if (keywords.length <= 0) return; + let count = 0; + // perform local searching + dataObj.then(data => { + data.forEach(data => { + let isMatch = true; + let dataTitle = data.title ? data.title.trim().toLowerCase() : ""; + let dataTags = data.tags; + let oneImage = data.oneImage ?? ""; + const dataContent = data.content + ? data.content + .trim() + .replace(/<[^>]+>/g, "") + .toLowerCase() + : ""; + const dataUrl = data.url.startsWith("/") ? data.url : GLOBAL_CONFIG.root + data.url; + let indexTitle = -1; + let indexContent = -1; + let firstOccur = -1; + // only match articles with not empty titles and contents + if (dataTitle !== "" || dataContent !== "") { + keywords.forEach((keyword, i) => { + indexTitle = dataTitle.indexOf(keyword); + indexContent = dataContent.indexOf(keyword); + if (indexTitle < 0 && indexContent < 0) { + isMatch = false; + } else { + if (indexContent < 0) { + indexContent = 0; + } + if (i === 0) { + firstOccur = indexContent; + } + } + }); + } else { + isMatch = false; + } + + // show search results + if (isMatch) { + if (firstOccur >= 0) { + // cut out 130 characters + // let start = firstOccur - 30 < 0 ? 0 : firstOccur - 30 + // let end = firstOccur + 50 > dataContent.length ? dataContent.length : firstOccur + 50 + let start = firstOccur - 30; + let end = firstOccur + 100; + let pre = ""; + let post = ""; + + if (start < 0) { + start = 0; + } + + if (start === 0) { + end = 100; + } else { + pre = "..."; + } + + if (end > dataContent.length) { + end = dataContent.length; + } else { + post = "..."; + } + + let matchContent = dataContent.substring(start, end); + + // highlight all keywords + keywords.forEach(keyword => { + const regS = new RegExp(keyword, "gi"); + matchContent = matchContent.replace(regS, '' + keyword + ""); + dataTitle = dataTitle.replace(regS, '' + keyword + ""); + }); + + str += '
'; + if (oneImage) { + str += `
${dataTitle}`; + } else { + str += '
'; + } + + str += "
"; + + if (oneImage) { + str += + '
' + + dataTitle + + ""; + } else { + str += + '
' + + dataTitle + + ""; + } + + count += 1; + + if (dataContent !== "") { + str += + '

' + + pre + + matchContent + + post + + "

"; + } + if (dataTags.length) { + str += '
'; + + for (let i = 0; i < dataTags.length; i++) { + const element = dataTags[i].trim(); + + str += + '#' + + element + + ""; + } + + str += "
"; + } + } + str += "
"; + } + }); + if (count === 0) { + str += + '
' + + GLOBAL_CONFIG.localSearch.languages.hits_empty.replace(/\$\{query}/, this.value.trim()) + + "
"; + } + str += "
"; + $resultContent.innerHTML = str; + if (keywords[0] !== "") $loadingStatus.innerHTML = ""; + window.pjax && window.pjax.refresh($resultContent); + }); + }); + }; + + searchClickFn(); + searchClickFnOnce(); + + // pjax + window.addEventListener("pjax:complete", () => { + !anzhiyu.isHidden($searchMask) && closeSearch(); + searchClickFn(); + }); +}); diff --git a/js/tw_cn.js b/js/tw_cn.js new file mode 100644 index 000000000..86a0d7b03 --- /dev/null +++ b/js/tw_cn.js @@ -0,0 +1,130 @@ +document.addEventListener('DOMContentLoaded', function () { + const { defaultEncoding, translateDelay, msgToTraditionalChinese, msgToSimplifiedChinese } = GLOBAL_CONFIG.translate + const snackbarData = GLOBAL_CONFIG.Snackbar + let currentEncoding = defaultEncoding + const targetEncodingCookie = 'translate-chn-cht' + let targetEncoding = + saveToLocal.get(targetEncodingCookie) === undefined + ? defaultEncoding + : Number(saveToLocal.get('translate-chn-cht')) + let translateButtonObject, translateRightMenuButtonObject; + const isSnackbar = snackbarData !== undefined + + function setLang () { + document.documentElement.lang = targetEncoding === 1 ? 'zh-TW' : 'zh-CN' + } + + function translateText (txt) { + if (txt === '' || txt == null) return '' + if (currentEncoding === 1 && targetEncoding === 2) return Simplized(txt) + else if (currentEncoding === 2 && targetEncoding === 1) { + return Traditionalized(txt) + } else return txt + } + + function translateBody (fobj) { + let objs + if (typeof fobj === 'object') objs = fobj.childNodes + else objs = document.body.childNodes + for (let i = 0; i < objs.length; i++) { + const obj = objs.item(i) + if ( + '||BR|HR|'.indexOf('|' + obj.tagName + '|') > 0 || + obj === translateButtonObject + ) { + continue + } + if (obj.title !== '' && obj.title != null) { + obj.title = translateText(obj.title) + } + if (obj.alt !== '' && obj.alt != null) obj.alt = translateText(obj.alt) + if (obj.placeholder !== '' && obj.placeholder != null) { obj.placeholder = translateText(obj.placeholder) } + if ( + obj.tagName === 'INPUT' && + obj.value !== '' && + obj.type !== 'text' && + obj.type !== 'hidden' + ) { + obj.value = translateText(obj.value) + } + if (obj.nodeType === 3) obj.data = translateText(obj.data) + else translateBody(obj) + } + } + function translatePage () { + if (targetEncoding === 1) { + currentEncoding = 1 + targetEncoding = 2 + translateButtonObject.textContent = msgToTraditionalChinese + isSnackbar && anzhiyu.snackbarShow(snackbarData.cht_to_chs) + } else if (targetEncoding === 2) { + currentEncoding = 2 + targetEncoding = 1 + translateButtonObject.textContent = msgToSimplifiedChinese + isSnackbar && anzhiyu.snackbarShow(snackbarData.chs_to_cht) + } + saveToLocal.set(targetEncodingCookie, targetEncoding, 2) + setLang() + translateBody() + } + + function JTPYStr () { + return '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' + } + function FTPYStr () { + return '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽龍歷誌製壹臺臯準復勐鐘註範籤' + } + function Traditionalized (cc) { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let i = 0; i < cc.length; i++) { + if (cc.charCodeAt(i) > 10000 && ss.indexOf(cc.charAt(i)) !== -1) { + str += tt.charAt(ss.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) + } + return str + } + function Simplized (cc) { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let i = 0; i < cc.length; i++) { + if (cc.charCodeAt(i) > 10000 && tt.indexOf(cc.charAt(i)) !== -1) { + str += ss.charAt(tt.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) + } + return str + } + + function translateInitialization() { + translateButtonObject = document.getElementById('translateLink'); + translateRightMenuButtonObject = document.getElementById('menu-translate').querySelector('span'); + + if (translateButtonObject || translateRightMenuButtonObject) { + if (currentEncoding !== targetEncoding) { + const textContent = targetEncoding === 1 ? msgToSimplifiedChinese : msgToTraditionalChinese; + + if (translateButtonObject) { + translateButtonObject.textContent = textContent; + } + + if (translateRightMenuButtonObject) { + translateRightMenuButtonObject.textContent = textContent; + } + + setLang(); + setTimeout(translateBody, translateDelay); + } + } + } + + window.translateFn = { + translatePage, + Traditionalized, + Simplized + } + + translateInitialization() + document.addEventListener('pjax:complete', translateInitialization) +}) \ No newline at end of file diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 000000000..01e887b4b --- /dev/null +++ b/js/utils.js @@ -0,0 +1,1435 @@ +const anzhiyu = { + debounce: (func, wait = 0, immediate = false) => { + let timeout; + return (...args) => { + const later = () => { + timeout = null; + if (!immediate) func(...args); + }; + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func(...args); + }; + }, + + throttle: function (func, wait, options = {}) { + let timeout, context, args; + let previous = 0; + + const later = () => { + previous = options.leading === false ? 0 : new Date().getTime(); + timeout = null; + func.apply(context, args); + if (!timeout) context = args = null; + }; + + const throttled = (...params) => { + const now = new Date().getTime(); + if (!previous && options.leading === false) previous = now; + const remaining = wait - (now - previous); + context = this; + args = params; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + }; + + return throttled; + }, + + sidebarPaddingR: () => { + const innerWidth = window.innerWidth; + const clientWidth = document.body.clientWidth; + const paddingRight = innerWidth - clientWidth; + if (innerWidth !== clientWidth) { + document.body.style.paddingRight = paddingRight + "px"; + } + }, + + snackbarShow: (text, showActionFunction = false, duration = 2000, actionText = false) => { + const { position, bgLight, bgDark } = GLOBAL_CONFIG.Snackbar; + const bg = document.documentElement.getAttribute("data-theme") === "light" ? bgLight : bgDark; + const root = document.querySelector(":root"); + root.style.setProperty("--anzhiyu-snackbar-time", duration + "ms"); + + Snackbar.show({ + text: text, + backgroundColor: bg, + onActionClick: showActionFunction, + actionText: actionText, + showAction: actionText, + duration: duration, + pos: position, + customClass: "snackbar-css", + }); + }, + + loadComment: (dom, callback) => { + if ("IntersectionObserver" in window) { + const observerItem = new IntersectionObserver( + entries => { + if (entries[0].isIntersecting) { + callback(); + observerItem.disconnect(); + } + }, + { threshold: [0] } + ); + observerItem.observe(dom); + } else { + callback(); + } + }, + + scrollToDest: (pos, time = 500) => { + const currentPos = window.pageYOffset; + if ("scrollBehavior" in document.documentElement.style) { + window.scrollTo({ + top: pos, + behavior: "smooth", + }); + return; + } + + let start = null; + pos = +pos; + window.requestAnimationFrame(function step(currentTime) { + start = !start ? currentTime : start; + const progress = currentTime - start; + if (currentPos < pos) { + window.scrollTo(0, ((pos - currentPos) * progress) / time + currentPos); + } else { + window.scrollTo(0, currentPos - ((currentPos - pos) * progress) / time); + } + if (progress < time) { + window.requestAnimationFrame(step); + } else { + window.scrollTo(0, pos); + } + }); + }, + + initJustifiedGallery: function (selector) { + const runJustifiedGallery = i => { + if (!anzhiyu.isHidden(i)) { + fjGallery(i, { + itemSelector: ".fj-gallery-item", + rowHeight: i.getAttribute("data-rowHeight"), + gutter: 4, + onJustify: function () { + this.$container.style.opacity = "1"; + }, + }); + } + }; + + if (Array.from(selector).length === 0) runJustifiedGallery(selector); + else + selector.forEach(i => { + runJustifiedGallery(i); + }); + }, + + animateIn: (ele, text) => { + ele.style.display = "block"; + ele.style.animation = text; + }, + + animateOut: (ele, text) => { + ele.addEventListener("animationend", function f() { + ele.style.display = ""; + ele.style.animation = ""; + ele.removeEventListener("animationend", f); + }); + ele.style.animation = text; + }, + + /** + * @param {*} selector + * @param {*} eleType the type of create element + * @param {*} options object key: value + */ + wrap: (selector, eleType, options) => { + const creatEle = document.createElement(eleType); + for (const [key, value] of Object.entries(options)) { + creatEle.setAttribute(key, value); + } + selector.parentNode.insertBefore(creatEle, selector); + creatEle.appendChild(selector); + }, + + isHidden: ele => ele.offsetHeight === 0 && ele.offsetWidth === 0, + + getEleTop: ele => { + let actualTop = ele.offsetTop; + let current = ele.offsetParent; + + while (current !== null) { + actualTop += current.offsetTop; + current = current.offsetParent; + } + + return actualTop; + }, + + loadLightbox: ele => { + const service = GLOBAL_CONFIG.lightbox; + + if (service === "mediumZoom") { + const zoom = mediumZoom(ele); + zoom.on("open", e => { + const photoBg = document.documentElement.getAttribute("data-theme") === "dark" ? "#121212" : "#fff"; + zoom.update({ + background: photoBg, + }); + }); + } + + if (service === "fancybox") { + Array.from(ele).forEach(i => { + if (i.parentNode.tagName !== "A") { + const dataSrc = i.dataset.lazySrc || i.src; + const dataCaption = i.title || i.alt || ""; + anzhiyu.wrap(i, "a", { + href: dataSrc, + "data-fancybox": "gallery", + "data-caption": dataCaption, + "data-thumb": dataSrc, + }); + } + }); + + if (!window.fancyboxRun) { + Fancybox.bind("[data-fancybox]", { + Hash: false, + Thumbs: { + autoStart: false, + }, + }); + window.fancyboxRun = true; + } + } + }, + + setLoading: { + add: ele => { + const html = ` +
+
+
+
+
+ `; + ele.insertAdjacentHTML("afterend", html); + }, + remove: ele => { + ele.nextElementSibling.remove(); + }, + }, + + updateAnchor: anchor => { + if (anchor !== window.location.hash) { + if (!anchor) anchor = location.pathname; + const title = GLOBAL_CONFIG_SITE.title; + window.history.replaceState( + { + url: location.href, + title, + }, + title, + anchor + ); + } + }, + + getScrollPercent: (currentTop, ele) => { + const docHeight = ele.clientHeight; + const winHeight = document.documentElement.clientHeight; + const headerHeight = ele.offsetTop; + const contentMath = + docHeight > winHeight ? docHeight - winHeight : document.documentElement.scrollHeight - winHeight; + const scrollPercent = (currentTop - headerHeight) / contentMath; + const scrollPercentRounded = Math.round(scrollPercent * 100); + const percentage = scrollPercentRounded > 100 ? 100 : scrollPercentRounded <= 0 ? 0 : scrollPercentRounded; + return percentage; + }, + + addGlobalFn: (key, fn, name = false, parent = window) => { + const globalFn = parent.globalFn || {}; + const keyObj = globalFn[key] || {}; + + if (name && keyObj[name]) return; + + name = name || Object.keys(keyObj).length; + keyObj[name] = fn; + globalFn[key] = keyObj; + parent.globalFn = globalFn; + }, + + addEventListenerPjax: (ele, event, fn, option = false) => { + ele.addEventListener(event, fn, option); + anzhiyu.addGlobalFn("pjax", () => { + ele.removeEventListener(event, fn, option); + }); + }, + + removeGlobalFnEvent: (key, parent = window) => { + const { globalFn = {} } = parent; + const keyObj = globalFn[key] || {}; + const keyArr = Object.keys(keyObj); + if (!keyArr.length) return; + keyArr.forEach(i => { + keyObj[i](); + }); + delete parent.globalFn[key]; + }, + + //更改主题色 + changeThemeMetaColor: function (color) { + // console.info(`%c ${color}`, `font-size:36px;color:${color};`); + if (themeColorMeta !== null) { + themeColorMeta.setAttribute("content", color); + } + }, + + //顶栏自适应主题色 + initThemeColor: function () { + let themeColor = getComputedStyle(document.documentElement) + .getPropertyValue("--anzhiyu-bar-background") + .trim() + .replace('"', "") + .replace('"', ""); + const currentTop = window.scrollY || document.documentElement.scrollTop; + if (currentTop > 26) { + if (anzhiyu.is_Post()) { + themeColor = getComputedStyle(document.documentElement) + .getPropertyValue("--anzhiyu-meta-theme-post-color") + .trim() + .replace('"', "") + .replace('"', ""); + } + if (themeColorMeta.getAttribute("content") === themeColor) return; + this.changeThemeMetaColor(themeColor); + } else { + if (themeColorMeta.getAttribute("content") === themeColor) return; + this.changeThemeMetaColor(themeColor); + } + }, + //是否是文章页 + is_Post: function () { + var url = window.location.href; //获取url + if (url.indexOf("/posts/") >= 0) { + //判断url地址中是否包含code字符串 + return true; + } else { + return false; + } + }, + //监测是否在页面开头 + addNavBackgroundInit: function () { + var scrollTop = 0, + bodyScrollTop = 0, + documentScrollTop = 0; + if ($bodyWrap) { + bodyScrollTop = $bodyWrap.scrollTop; + } + if (document.documentElement) { + documentScrollTop = document.documentElement.scrollTop; + } + scrollTop = bodyScrollTop - documentScrollTop > 0 ? bodyScrollTop : documentScrollTop; + + if (scrollTop != 0) { + pageHeaderEl.classList.add("nav-fixed"); + pageHeaderEl.classList.add("nav-visible"); + } + }, + // 下载图片 + downloadImage: function (imgsrc, name) { + //下载图片地址和图片名 + rm.hideRightMenu(); + if (rm.downloadimging == false) { + rm.downloadimging = true; + anzhiyu.snackbarShow("正在下载中,请稍后", false, 10000); + setTimeout(function () { + let image = new Image(); + // 解决跨域 Canvas 污染问题 + image.setAttribute("crossOrigin", "anonymous"); + image.onload = function () { + let canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + let context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, image.width, image.height); + let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据 + let a = document.createElement("a"); // 生成一个a元素 + let event = new MouseEvent("click"); // 创建一个单击事件 + a.download = name || "photo"; // 设置图片名称 + a.href = url; // 将生成的URL设置为a.href属性 + a.dispatchEvent(event); // 触发a的单击事件 + }; + image.src = imgsrc; + anzhiyu.snackbarShow("图片已添加盲水印,请遵守版权协议"); + rm.downloadimging = false; + }, "10000"); + } else { + anzhiyu.snackbarShow("有正在进行中的下载,请稍后再试"); + } + }, + //禁止图片右键单击 + stopImgRightDrag: function () { + var img = document.getElementsByTagName("img"); + for (var i = 0; i < img.length; i++) { + img[i].addEventListener("dragstart", function () { + return false; + }); + } + }, + //滚动到指定id + scrollTo: function (id) { + var domTop = document.querySelector(id).offsetTop; + window.scrollTo(0, domTop - 80); + }, + //隐藏侧边栏 + hideAsideBtn: () => { + // Hide aside + const $htmlDom = document.documentElement.classList; + $htmlDom.contains("hide-aside") + ? saveToLocal.set("aside-status", "show", 2) + : saveToLocal.set("aside-status", "hide", 2); + $htmlDom.toggle("hide-aside"); + $htmlDom.contains("hide-aside") + ? document.querySelector("#consoleHideAside").classList.add("on") + : document.querySelector("#consoleHideAside").classList.remove("on"); + }, + // 热评切换 + switchCommentBarrage: function () { + let commentBarrage = document.querySelector(".comment-barrage"); + if (commentBarrage) { + if (window.getComputedStyle(commentBarrage).display === "flex") { + commentBarrage.style.display = "none"; + anzhiyu.snackbarShow("✨ 已关闭评论弹幕"); + document.querySelector(".menu-commentBarrage-text").textContent = "显示热评"; + document.querySelector("#consoleCommentBarrage").classList.remove("on"); + localStorage.setItem("commentBarrageSwitch", "false"); + } else { + commentBarrage.style.display = "flex"; + document.querySelector(".menu-commentBarrage-text").textContent = "关闭热评"; + document.querySelector("#consoleCommentBarrage").classList.add("on"); + anzhiyu.snackbarShow("✨ 已开启评论弹幕"); + localStorage.removeItem("commentBarrageSwitch"); + } + } + rm && rm.hideRightMenu(); + }, + initPaginationObserver: () => { + const commentElement = document.getElementById("post-comment"); + const paginationElement = document.getElementById("pagination"); + + if (commentElement && paginationElement) { + new IntersectionObserver(entries => { + const commentBarrage = document.querySelector(".comment-barrage"); + + entries.forEach(entry => { + if (entry.isIntersecting) { + paginationElement.classList.add("show-window"); + if (commentBarrage) { + commentBarrage.style.bottom = "-200px"; + } + } else { + paginationElement.classList.remove("show-window"); + if (commentBarrage) { + commentBarrage.style.bottom = "0px"; + } + } + }); + }).observe(commentElement); + } + }, + // 初始化即刻 + initIndexEssay: function () { + if (!document.getElementById("bbTimeList")) return; + setTimeout(() => { + let essay_bar_swiper = new Swiper(".essay_bar_swiper_container", { + passiveListeners: true, + direction: "vertical", + loop: true, + autoplay: { + disableOnInteraction: true, + delay: 3000, + }, + mousewheel: true, + }); + + let essay_bar_comtainer = document.getElementById("bbtalk"); + if (essay_bar_comtainer !== null) { + essay_bar_comtainer.onmouseenter = function () { + essay_bar_swiper.autoplay.stop(); + }; + essay_bar_comtainer.onmouseleave = function () { + essay_bar_swiper.autoplay.start(); + }; + } + }, 100); + }, + scrollByMouseWheel: function ($list, $target) { + const scrollHandler = function (e) { + $list.scrollLeft -= e.wheelDelta / 2; + e.preventDefault(); + }; + $list.addEventListener("mousewheel", scrollHandler, { passive: false }); + if ($target) { + $target.classList.add("selected"); + $list.scrollLeft = $target.offsetLeft - $list.offsetLeft - ($list.offsetWidth - $target.offsetWidth) / 2; + } + }, + // catalog激活 + catalogActive: function () { + const $list = document.getElementById("catalog-list"); + if ($list) { + const pathname = decodeURIComponent(window.location.pathname); + const catalogListItems = $list.querySelectorAll(".catalog-list-item"); + + let $catalog = null; + catalogListItems.forEach(item => { + if (pathname.startsWith(item.id)) { + $catalog = item; + return; + } + }); + + anzhiyu.scrollByMouseWheel($list, $catalog); + } + }, + // Page Tag 激活 + tagsPageActive: function () { + const $list = document.getElementById("tag-page-tags"); + if ($list) { + const $tagPageTags = document.getElementById(decodeURIComponent(window.location.pathname)); + anzhiyu.scrollByMouseWheel($list, $tagPageTags); + } + }, + // 修改时间显示"最近" + diffDate: function (d, more = false, simple = false) { + const dateNow = new Date(); + const datePost = new Date(d); + const dateDiff = dateNow.getTime() - datePost.getTime(); + const minute = 1000 * 60; + const hour = minute * 60; + const day = hour * 24; + const month = day * 30; + + let result; + if (more) { + const monthCount = dateDiff / month; + const dayCount = dateDiff / day; + const hourCount = dateDiff / hour; + const minuteCount = dateDiff / minute; + + if (monthCount >= 1) { + result = datePost.toLocaleDateString().replace(/\//g, "-"); + } else if (dayCount >= 1) { + result = parseInt(dayCount) + " " + GLOBAL_CONFIG.date_suffix.day; + } else if (hourCount >= 1) { + result = parseInt(hourCount) + " " + GLOBAL_CONFIG.date_suffix.hour; + } else if (minuteCount >= 1) { + result = parseInt(minuteCount) + " " + GLOBAL_CONFIG.date_suffix.min; + } else { + result = GLOBAL_CONFIG.date_suffix.just; + } + } else if (simple) { + const monthCount = dateDiff / month; + const dayCount = dateDiff / day; + const hourCount = dateDiff / hour; + const minuteCount = dateDiff / minute; + if (monthCount >= 1) { + result = datePost.toLocaleDateString().replace(/\//g, "-"); + } else if (dayCount >= 1 && dayCount <= 3) { + result = parseInt(dayCount) + " " + GLOBAL_CONFIG.date_suffix.day; + } else if (dayCount > 3) { + result = datePost.getMonth() + 1 + "/" + datePost.getDate(); + } else if (hourCount >= 1) { + result = parseInt(hourCount) + " " + GLOBAL_CONFIG.date_suffix.hour; + } else if (minuteCount >= 1) { + result = parseInt(minuteCount) + " " + GLOBAL_CONFIG.date_suffix.min; + } else { + result = GLOBAL_CONFIG.date_suffix.just; + } + } else { + result = parseInt(dateDiff / day); + } + return result; + }, + + // 修改即刻中的时间显示 + changeTimeInEssay: function () { + document.querySelector("#bber") && + document.querySelectorAll("#bber time").forEach(function (e) { + var t = e, + datetime = t.getAttribute("datetime"); + (t.innerText = anzhiyu.diffDate(datetime, true)), (t.style.display = "inline"); + }); + }, + // 修改相册集中的时间 + changeTimeInAlbumDetail: function () { + document.querySelector("#album_detail") && + document.querySelectorAll("#album_detail time").forEach(function (e) { + var t = e, + datetime = t.getAttribute("datetime"); + (t.innerText = anzhiyu.diffDate(datetime, true)), (t.style.display = "inline"); + }); + }, + // 刷新瀑布流 + reflashEssayWaterFall: function () { + const waterfallEl = document.getElementById("waterfall"); + if (waterfallEl) { + setTimeout(function () { + waterfall(waterfallEl); + waterfallEl.classList.add("show"); + }, 800); + } + }, + sayhi: function () { + const $sayhiEl = document.getElementById("author-info__sayhi"); + + const getTimeState = () => { + const hour = new Date().getHours(); + let message = ""; + + if (hour >= 0 && hour <= 5) { + message = "睡个好觉,保证精力充沛"; + } else if (hour > 5 && hour <= 10) { + message = "一日之计在于晨"; + } else if (hour > 10 && hour <= 14) { + message = "吃饱了才有力气干活"; + } else if (hour > 14 && hour <= 18) { + message = "集中精力,攻克难关"; + } else if (hour > 18 && hour <= 24) { + message = "不要太劳累了,早睡更健康"; + } + + return message; + }; + + if ($sayhiEl) { + $sayhiEl.innerHTML = getTimeState(); + } + }, + + // 友链注入预设评论 + addFriendLink() { + var input = document.getElementsByClassName("el-textarea__inner")[0]; + if (!input) return; + const evt = new Event("input", { cancelable: true, bubbles: true }); + const defaultPlaceholder = + "昵称(请勿包含博客等字样):\n网站地址(要求博客地址,请勿提交个人主页):\n头像图片url(请提供尽可能清晰的图片,我会上传到我自己的图床):\n描述:\n站点截图(可选):\n"; + input.value = this.getConfigIfPresent(GLOBAL_CONFIG.linkPageTop, "addFriendPlaceholder", defaultPlaceholder); + input.dispatchEvent(evt); + input.focus(); + input.setSelectionRange(-1, -1); + }, + // 获取配置,如果为空则返回默认值 + getConfigIfPresent: function (config, configKey, defaultValue) { + if (!config) return defaultValue; + if (!config.hasOwnProperty(configKey)) return defaultValue; + if (!config[configKey]) return defaultValue; + return config[configKey]; + }, + //切换音乐播放状态 + musicToggle: function (changePaly = true) { + if (!anzhiyu_musicFirst) { + anzhiyu.musicBindEvent(); + anzhiyu_musicFirst = true; + } + let msgPlay = '播放音乐'; + let msgPause = '暂停音乐'; + if (anzhiyu_musicPlaying) { + navMusicEl.classList.remove("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPlay; + document.getElementById("nav-music-hoverTips").innerHTML = "音乐已暂停"; + document.querySelector("#consoleMusic").classList.remove("on"); + anzhiyu_musicPlaying = false; + navMusicEl.classList.remove("stretch"); + } else { + navMusicEl.classList.add("playing"); + document.getElementById("menu-music-toggle").innerHTML = msgPause; + document.querySelector("#consoleMusic").classList.add("on"); + anzhiyu_musicPlaying = true; + navMusicEl.classList.add("stretch"); + } + if (changePaly) document.querySelector("#nav-music meting-js").aplayer.toggle(); + rm && rm.hideRightMenu(); + }, + // 音乐伸缩 + musicTelescopic: function () { + if (navMusicEl.classList.contains("stretch")) { + navMusicEl.classList.remove("stretch"); + } else { + navMusicEl.classList.add("stretch"); + } + }, + + //音乐上一曲 + musicSkipBack: function () { + navMusicEl.querySelector("meting-js").aplayer.skipBack(); + rm && rm.hideRightMenu(); + }, + + //音乐下一曲 + musicSkipForward: function () { + navMusicEl.querySelector("meting-js").aplayer.skipForward(); + rm && rm.hideRightMenu(); + }, + + //获取音乐中的名称 + musicGetName: function () { + var x = document.querySelector(".aplayer-title"); + var arr = []; + for (var i = x.length - 1; i >= 0; i--) { + arr[i] = x[i].innerText; + } + return arr[0]; + }, + + //初始化console图标 + initConsoleState: function () { + //初始化隐藏边栏 + const $htmlDomClassList = document.documentElement.classList; + $htmlDomClassList.contains("hide-aside") + ? document.querySelector("#consoleHideAside").classList.add("on") + : document.querySelector("#consoleHideAside").classList.remove("on"); + }, + + // 显示打赏中控台 + rewardShowConsole: function () { + // 判断是否为赞赏打开控制台 + consoleEl.classList.add("reward-show"); + anzhiyu.initConsoleState(); + }, + // 显示中控台 + showConsole: function () { + consoleEl.classList.add("show"); + anzhiyu.initConsoleState(); + }, + + //隐藏中控台 + hideConsole: function () { + if (consoleEl.classList.contains("show")) { + // 如果是一般控制台,就关闭一般控制台 + consoleEl.classList.remove("show"); + } else if (consoleEl.classList.contains("reward-show")) { + // 如果是打赏控制台,就关闭打赏控制台 + consoleEl.classList.remove("reward-show"); + } + // 获取center-console元素 + const centerConsole = document.getElementById("center-console"); + + // 检查center-console是否被选中 + if (centerConsole.checked) { + // 取消选中状态 + centerConsole.checked = false; + } + }, + // 取消加载动画 + hideLoading: function () { + document.getElementById("loading-box").classList.add("loaded"); + }, + // 将音乐缓存播放 + cacheAndPlayMusic() { + let data = localStorage.getItem("musicData"); + if (data) { + data = JSON.parse(data); + const currentTime = new Date().getTime(); + if (currentTime - data.timestamp < 24 * 60 * 60 * 1000) { + // 如果缓存的数据没有过期,直接使用 + anzhiyu.playMusic(data.songs); + return; + } + } + + // 否则重新从服务器获取数据 + fetch("/json/music.json") + .then(response => response.json()) + .then(songs => { + const cacheData = { + timestamp: new Date().getTime(), + songs: songs, + }; + localStorage.setItem("musicData", JSON.stringify(cacheData)); + anzhiyu.playMusic(songs); + }); + }, + // 播放音乐 + playMusic(songs) { + const anMusicPage = document.getElementById("anMusic-page"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + const randomIndex = Math.floor(Math.random() * songs.length); + const randomSong = songs[randomIndex]; + const allAudios = metingAplayer.list.audios; + if (!selectRandomSong.includes(randomSong.name)) { + // 如果随机到的歌曲已经未被随机到过,就添加进metingAplayer.list + metingAplayer.list.add([randomSong]); + // 播放最后一首(因为是添加到了最后) + metingAplayer.list.switch(allAudios.length); + // 添加到已被随机的歌曲列表 + selectRandomSong.push(randomSong.name); + } else { + // 随机到的歌曲已经在播放列表中了 + // 直接继续随机直到随机到没有随机过的歌曲,如果全部随机过了就切换到对应的歌曲播放即可 + let songFound = false; + while (!songFound) { + const newRandomIndex = Math.floor(Math.random() * songs.length); + const newRandomSong = songs[newRandomIndex]; + if (!selectRandomSong.includes(newRandomSong.name)) { + metingAplayer.list.add([newRandomSong]); + metingAplayer.list.switch(allAudios.length); + selectRandomSong.push(newRandomSong.name); + songFound = true; + } + // 如果全部歌曲都已被随机过,跳出循环 + if (selectRandomSong.length === songs.length) { + break; + } + } + if (!songFound) { + // 如果全部歌曲都已被随机过,切换到对应的歌曲播放 + const palyMusicIndex = allAudios.findIndex(song => song.name === randomSong.name); + if (palyMusicIndex != -1) metingAplayer.list.switch(palyMusicIndex); + } + } + + console.info("已随机歌曲:", selectRandomSong, "本次随机歌曲:", randomSong.name); + }, + // 音乐节目切换背景 + changeMusicBg: function (isChangeBg = true) { + const anMusicBg = document.getElementById("an_music_bg"); + + if (isChangeBg) { + // player listswitch 会进入此处 + const musiccover = document.querySelector("#anMusic-page .aplayer-pic"); + anMusicBg.style.backgroundImage = musiccover.style.backgroundImage; + } else { + // 第一次进入,绑定事件,改背景 + let timer = setInterval(() => { + const musiccover = document.querySelector("#anMusic-page .aplayer-pic"); + // 确保player加载完成 + if (musiccover) { + clearInterval(timer); + // 绑定事件 + anzhiyu.addEventListenerMusic(); + // 确保第一次能够正确替换背景 + anzhiyu.changeMusicBg(); + + // 暂停nav的音乐 + if ( + document.querySelector("#nav-music meting-js").aplayer && + !document.querySelector("#nav-music meting-js").aplayer.audio.paused + ) { + anzhiyu.musicToggle(); + } + } + }, 100); + } + }, + // 获取自定义播放列表 + getCustomPlayList: function () { + if (!window.location.pathname.startsWith("/music/")) { + return; + } + const urlParams = new URLSearchParams(window.location.search); + const userId = "8152976493"; + const userServer = "netease"; + const anMusicPageMeting = document.getElementById("anMusic-page-meting"); + if (urlParams.get("id") && urlParams.get("server")) { + const id = urlParams.get("id"); + const server = urlParams.get("server"); + anMusicPageMeting.innerHTML = ``; + } else { + anMusicPageMeting.innerHTML = ``; + } + anzhiyu.changeMusicBg(false); + }, + //隐藏今日推荐 + hideTodayCard: function () { + if (document.getElementById("todayCard")) { + document.getElementById("todayCard").classList.add("hide"); + const topGroup = document.querySelector(".topGroup"); + const recentPostItems = topGroup.querySelectorAll(".recent-post-item"); + recentPostItems.forEach(item => { + item.style.display = "flex"; + }); + } + }, + + // 监听音乐背景改变 + addEventListenerMusic: function () { + const anMusicPage = document.getElementById("anMusic-page"); + const aplayerIconMenu = anMusicPage.querySelector(".aplayer-info .aplayer-time .aplayer-icon-menu"); + const anMusicBtnGetSong = anMusicPage.querySelector("#anMusicBtnGetSong"); + const anMusicRefreshBtn = anMusicPage.querySelector("#anMusicRefreshBtn"); + const anMusicSwitchingBtn = anMusicPage.querySelector("#anMusicSwitching"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + //初始化音量 + metingAplayer.volume(0.8, true); + metingAplayer.on("loadeddata", function () { + anzhiyu.changeMusicBg(); + }); + + aplayerIconMenu.addEventListener("click", function () { + document.getElementById("menu-mask").style.display = "block"; + document.getElementById("menu-mask").style.animation = "0.5s ease 0s 1 normal none running to_show"; + anMusicPage.querySelector(".aplayer.aplayer-withlist .aplayer-list").style.opacity = "1"; + }); + + function anMusicPageMenuAask() { + if (window.location.pathname != "/music/") { + document.getElementById("menu-mask").removeEventListener("click", anMusicPageMenuAask); + return; + } + + anMusicPage.querySelector(".aplayer-list").classList.remove("aplayer-list-hide"); + } + + document.getElementById("menu-mask").addEventListener("click", anMusicPageMenuAask); + + // 监听增加单曲按钮 + anMusicBtnGetSong.addEventListener("click", () => { + if (changeMusicListFlag) { + const anMusicPage = document.getElementById("anMusic-page"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + const allAudios = metingAplayer.list.audios; + const randomIndex = Math.floor(Math.random() * allAudios.length); + // 随机播放一首 + metingAplayer.list.switch(randomIndex); + } else { + anzhiyu.cacheAndPlayMusic(); + } + }); + anMusicRefreshBtn.addEventListener("click", () => { + localStorage.removeItem("musicData"); + anzhiyu.snackbarShow("已移除相关缓存歌曲"); + }); + anMusicSwitchingBtn.addEventListener("click", () => { + anzhiyu.changeMusicList(); + }); + + // 监听键盘事件 + //空格控制音乐 + document.addEventListener("keydown", function (event) { + //暂停开启音乐 + if (event.code === "Space") { + event.preventDefault(); + metingAplayer.toggle(); + } + //切换下一曲 + if (event.keyCode === 39) { + event.preventDefault(); + metingAplayer.skipForward(); + } + //切换上一曲 + if (event.keyCode === 37) { + event.preventDefault(); + metingAplayer.skipBack(); + } + //增加音量 + if (event.keyCode === 38) { + if (musicVolume <= 1) { + musicVolume += 0.1; + metingAplayer.volume(musicVolume, true); + } + } + //减小音量 + if (event.keyCode === 40) { + if (musicVolume >= 0) { + musicVolume += -0.1; + metingAplayer.volume(musicVolume, true); + } + } + }); + }, + // 切换歌单 + changeMusicList: async function () { + const anMusicPage = document.getElementById("anMusic-page"); + const metingAplayer = anMusicPage.querySelector("meting-js").aplayer; + const currentTime = new Date().getTime(); + const cacheData = JSON.parse(localStorage.getItem("musicData")) || { timestamp: 0 }; + let songs = []; + + if (changeMusicListFlag) { + songs = defaultPlayMusicList; + } else { + // 保存当前默认播放列表,以使下次可以切换回来 + defaultPlayMusicList = metingAplayer.list.audios; + // 如果缓存的数据没有过期,直接使用 + if (currentTime - cacheData.timestamp < 24 * 60 * 60 * 1000) { + songs = cacheData.songs; + } else { + // 否则重新从服务器获取数据 + const response = await fetch("/json/music.json"); + songs = await response.json(); + cacheData.timestamp = currentTime; + cacheData.songs = songs; + localStorage.setItem("musicData", JSON.stringify(cacheData)); + } + } + + // 清除当前播放列表并添加新的歌曲 + metingAplayer.list.clear(); + metingAplayer.list.add(songs); + + // 切换标志位 + changeMusicListFlag = !changeMusicListFlag; + }, + // 控制台音乐列表监听 + addEventListenerConsoleMusicList: function () { + const navMusic = document.getElementById("nav-music"); + if (!navMusic) return; + navMusic.addEventListener("click", e => { + const aplayerList = navMusic.querySelector(".aplayer-list"); + const listBtn = navMusic.querySelector( + "div.aplayer-info > div.aplayer-controller > div.aplayer-time.aplayer-time-narrow > button.aplayer-icon.aplayer-icon-menu svg" + ); + if (e.target != listBtn && aplayerList.classList.contains("aplayer-list-hide")) { + aplayerList.classList.remove("aplayer-list-hide"); + } + }); + }, + // 监听按键 + toPage: function () { + var toPageText = document.getElementById("toPageText"), + toPageButton = document.getElementById("toPageButton"), + pageNumbers = document.querySelectorAll(".page-number"), + lastPageNumber = Number(pageNumbers[pageNumbers.length - 1].innerHTML), + pageNumber = Number(toPageText.value); + + if (!isNaN(pageNumber) && pageNumber >= 1 && Number.isInteger(pageNumber)) { + var url = "/page/" + (pageNumber > lastPageNumber ? lastPageNumber : pageNumber) + "/"; + toPageButton.href = pageNumber === 1 ? "/" : url; + } else { + toPageButton.href = "javascript:void(0);"; + } + }, + + //删除多余的class + removeBodyPaceClass: function () { + document.body.className = "pace-done"; + }, + // 修改body的type类型以适配css + setValueToBodyType: function () { + const input = document.getElementById("page-type"); // 获取input元素 + const value = input.value; // 获取input的value值 + document.body.dataset.type = value; // 将value值赋值到body的type属性上 + }, + //匿名评论 + addRandomCommentInfo: function () { + // 从形容词数组中随机取一个值 + const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)]; + + // 从蔬菜水果动物名字数组中随机取一个值 + const randomName = vegetablesAndFruits[Math.floor(Math.random() * vegetablesAndFruits.length)]; + + // 将两个值组合成一个字符串 + const name = `${randomAdjective}${randomName}`; + + function dr_js_autofill_commentinfos() { + var lauthor = [ + "#author", + "input[name='comname']", + "#inpName", + "input[name='author']", + "#ds-dialog-name", + "#name", + "input[name='nick']", + "#comment_author", + ], + lmail = [ + "#mail", + "#email", + "input[name='commail']", + "#inpEmail", + "input[name='email']", + "#ds-dialog-email", + "input[name='mail']", + "#comment_email", + ], + lurl = [ + "#url", + "input[name='comurl']", + "#inpHomePage", + "#ds-dialog-url", + "input[name='url']", + "input[name='website']", + "#website", + "input[name='link']", + "#comment_url", + ]; + for (var i = 0; i < lauthor.length; i++) { + var author = document.querySelector(lauthor[i]); + if (author != null) { + author.value = name; + author.dispatchEvent(new Event("input")); + author.dispatchEvent(new Event("change")); + break; + } + } + for (var j = 0; j < lmail.length; j++) { + var mail = document.querySelector(lmail[j]); + if (mail != null) { + mail.value = visitorMail; + mail.dispatchEvent(new Event("input")); + mail.dispatchEvent(new Event("change")); + break; + } + } + return !1; + } + + dr_js_autofill_commentinfos(); + var input = document.getElementsByClassName("el-textarea__inner")[0]; + input.focus(); + input.setSelectionRange(-1, -1); + }, + + // 跳转开往 + totraveling: function () { + anzhiyu.snackbarShow( + "即将跳转到「开往」项目的成员博客,不保证跳转网站的安全性和可用性", + element => { + element.style.opacity = 0; + travellingsTimer && clearTimeout(travellingsTimer); + }, + 5000, + "取消" + ); + travellingsTimer = setTimeout(function () { + window.open("https://www.travellings.cn/go.html", "_blank"); + }, "5000"); + }, + + // 工具函数替换字符串 + replaceAll: function (e, n, t) { + return e.split(n).join(t); + }, + + // 音乐绑定事件 + musicBindEvent: function () { + document.querySelector("#nav-music .aplayer-music").addEventListener("click", function () { + anzhiyu.musicTelescopic(); + }); + document.querySelector("#nav-music .aplayer-button").addEventListener("click", function () { + anzhiyu.musicToggle(false); + }); + }, + + // 判断是否是移动端 + hasMobile: function () { + let isMobile = false; + if ( + navigator.userAgent.match( + /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i + ) || + document.body.clientWidth < 800 + ) { + // 移动端 + isMobile = true; + } + return isMobile; + }, + + // 创建二维码 + qrcodeCreate: function () { + if (document.getElementById("qrcode")) { + document.getElementById("qrcode").innerHTML = ""; + var qrcode = new QRCode(document.getElementById("qrcode"), { + text: window.location.href, + width: 250, + height: 250, + colorDark: "#000", + colorLight: "#ffffff", + correctLevel: QRCode.CorrectLevel.H, + }); + } + }, + + // 判断是否在el内 + isInViewPortOfOne: function (el) { + if (!el) return; + const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + const offsetTop = el.offsetTop; + const scrollTop = document.documentElement.scrollTop; + const top = offsetTop - scrollTop; + return top <= viewPortHeight; + }, + //添加赞赏蒙版 + addRewardMask: function () { + if (!document.querySelector(".reward-main")) return; + document.querySelector(".reward-main").style.display = "flex"; + document.querySelector(".reward-main").style.zIndex = "102"; + document.getElementById("quit-box").style.display = "flex"; + }, + // 移除赞赏蒙版 + removeRewardMask: function () { + if (!document.querySelector(".reward-main")) return; + document.querySelector(".reward-main").style.display = "none"; + document.getElementById("quit-box").style.display = "none"; + }, + + keyboardToggle: function () { + const isKeyboardOn = anzhiyu_keyboard; + + if (isKeyboardOn) { + const consoleKeyboard = document.querySelector("#consoleKeyboard"); + consoleKeyboard.classList.remove("on"); + anzhiyu_keyboard = false; + } else { + const consoleKeyboard = document.querySelector("#consoleKeyboard"); + consoleKeyboard.classList.add("on"); + anzhiyu_keyboard = true; + } + + localStorage.setItem("keyboardToggle", isKeyboardOn ? "false" : "true"); + }, + rightMenuToggle: function () { + if (window.oncontextmenu) { + window.oncontextmenu = null; + } else if (!window.oncontextmenu && oncontextmenuFunction) { + window.oncontextmenu = oncontextmenuFunction; + } + }, + switchConsole: () => { + // switch console + const consoleEl = document.getElementById("console"); + //初始化隐藏边栏 + const $htmlDom = document.documentElement.classList; + $htmlDom.contains("hide-aside") + ? document.querySelector("#consoleHideAside").classList.add("on") + : document.querySelector("#consoleHideAside").classList.remove("on"); + if (consoleEl.classList.contains("show")) { + consoleEl.classList.remove("show"); + } else { + consoleEl.classList.add("show"); + } + const consoleKeyboard = document.querySelector("#consoleKeyboard"); + + if (consoleKeyboard) { + if (localStorage.getItem("keyboardToggle") === "true") { + consoleKeyboard.classList.add("on"); + anzhiyu_keyboard = true; + } else { + consoleKeyboard.classList.remove("on"); + anzhiyu_keyboard = false; + } + } + }, + // 定义 intersectionObserver 函数,并接收两个可选参数 + intersectionObserver: function (enterCallback, leaveCallback) { + let observer; + return () => { + if (!observer) { + observer = new IntersectionObserver(entries => { + entries.forEach(entry => { + if (entry.intersectionRatio > 0) { + enterCallback?.(); + } else { + leaveCallback?.(); + } + }); + }); + } else { + // 如果 observer 对象已经存在,则先取消对之前元素的观察 + observer.disconnect(); + } + return observer; + }; + }, + // CategoryBar滚动 + scrollCategoryBarToRight: function () { + // 获取需要操作的元素 + const items = document.getElementById("catalog-list"); + const nextButton = document.getElementById("category-bar-next"); + + // 检查元素是否存在 + if (items && nextButton) { + const itemsWidth = items.clientWidth; + + // 判断是否已经滚动到最右侧 + if (items.scrollLeft + items.clientWidth + 1 >= items.scrollWidth) { + // 滚动到初始位置并更新按钮内容 + items.scroll({ + left: 0, + behavior: "smooth", + }); + nextButton.innerHTML = ''; + } else { + // 滚动到下一个视图 + items.scrollBy({ + left: itemsWidth, + behavior: "smooth", + }); + } + } else { + console.error("Element(s) not found: 'catalog-list' and/or 'category-bar-next'."); + } + }, + // 分类条 + categoriesBarActive: function () { + const urlinfo = decodeURIComponent(window.location.pathname); + const $categoryBar = document.getElementById("category-bar"); + if (!$categoryBar) return; + + if (urlinfo === "/") { + $categoryBar.querySelector("#首页").classList.add("select"); + } else { + const pattern = /\/categories\/.*?\//; + const patbool = pattern.test(urlinfo); + if (!patbool) return; + + const nowCategorie = urlinfo.split("/")[2]; + $categoryBar.querySelector(`#${nowCategorie}`).classList.add("select"); + } + }, + topCategoriesBarScroll: function () { + const $categoryBarItems = document.getElementById("category-bar-items"); + if (!$categoryBarItems) return; + + $categoryBarItems.addEventListener("mousewheel", function (e) { + const v = -e.wheelDelta / 2; + this.scrollLeft += v; + e.preventDefault(); + }); + }, + // 切换菜单显示热评 + switchRightClickMenuHotReview: function () { + const postComment = document.getElementById("post-comment"); + const menuCommentBarrageDom = document.getElementById("menu-commentBarrage"); + if (postComment) { + menuCommentBarrageDom.style.display = "flex"; + } else { + menuCommentBarrageDom.style.display = "none"; + } + }, + // 切换作者卡片状态文字 + changeSayHelloText: function () { + const greetings = GLOBAL_CONFIG.authorStatus.skills; + + const authorInfoSayHiElement = document.getElementById("author-info__sayhi"); + + // 如果只有一个问候语,设置为默认值 + if (greetings.length === 1) { + authorInfoSayHiElement.textContent = greetings[0]; + return; + } + + let lastSayHello = authorInfoSayHiElement.textContent; + + let randomGreeting = lastSayHello; + while (randomGreeting === lastSayHello) { + randomGreeting = greetings[Math.floor(Math.random() * greetings.length)]; + } + authorInfoSayHiElement.textContent = randomGreeting; + }, +}; + +const anzhiyuPopupManager = { + queue: [], + processing: false, + Jump: false, + + enqueuePopup(title, tip, url, duration = 3000) { + this.queue.push({ title, tip, url, duration }); + if (!this.processing) { + this.processQueue(); + } + }, + + processQueue() { + if (this.queue.length > 0 && !this.processing) { + this.processing = true; + const { title, tip, url, duration } = this.queue.shift(); + this.popupShow(title, tip, url, duration); + } + }, + + popupShow(title, tip, url, duration) { + const popupWindow = document.getElementById("popup-window"); + if (!popupWindow) return; + const windowTitle = popupWindow.querySelector(".popup-window-title"); + const windowContent = popupWindow.querySelector(".popup-window-content"); + const cookiesTip = windowContent.querySelector(".popup-tip"); + if (popupWindow.classList.contains("show-popup-window")) { + popupWindow.classList.add("popup-hide"); + } + + // 等待上一个弹窗完全消失 + setTimeout(() => { + // 移除之前的点击事件处理程序 + popupWindow.removeEventListener("click", this.clickEventHandler); + if (url) { + if (window.pjax) { + this.clickEventHandler = event => { + event.preventDefault(); + pjax.loadUrl(url); + popupWindow.classList.remove("show-popup-window"); + popupWindow.classList.remove("popup-hide"); + this.Jump = true; + + // 处理队列中的下一个弹出窗口 + this.processing = false; + this.processQueue(); + }; + + popupWindow.addEventListener("click", this.clickEventHandler); + } else { + this.clickEventHandler = () => { + window.location.href = url; + }; + popupWindow.addEventListener("click", this.clickEventHandler); + } + if (popupWindow.classList.contains("no-url")) { + popupWindow.classList.remove("no-url"); + } + } else { + if (!popupWindow.classList.contains("no-url")) { + popupWindow.classList.add("no-url"); + } + + this.clickEventHandler = () => { + popupWindow.classList.add("popup-hide"); + setTimeout(() => { + popupWindow.classList.remove("popup-hide"); + popupWindow.classList.remove("show-popup-window"); + }, 1000); + }; + popupWindow.addEventListener("click", this.clickEventHandler); + } + + if (popupWindow.classList.contains("popup-hide")) { + popupWindow.classList.remove("popup-hide"); + } + popupWindow.classList.add("show-popup-window"); + windowTitle.textContent = title; + cookiesTip.textContent = tip; + }, 800); + + setTimeout(() => { + if (url && !this.Jump) { + this.Jump = false; + } + if (!popupWindow.classList.contains("popup-hide") && popupWindow.className != "") { + popupWindow.classList.add("popup-hide"); + } + + // 处理队列中的下一个弹出窗口 + this.processing = false; + this.processQueue(); + }, duration); + }, +}; diff --git a/link/index.html b/link/index.html new file mode 100644 index 000000000..d28048e3f --- /dev/null +++ b/link/index.html @@ -0,0 +1,517 @@ +光速大佬的小站 | 光速大佬的小站 +
加载头像

🎣 钓鱼


引用到评论
\ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 000000000..681ecbbbb --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,620 @@ +光速大佬的小站 - 独步天下,吾心自洁,无欲无求,如林中之象。 +
加载头像
打包的(再见极域+多桌面工具)
Github+Vercel免费反代理域名
Hexo持续部署
免费网站托管
引用到评论
\ No newline at end of file diff --git a/posts/2022.11.12/index.html b/posts/2022.11.12/index.html new file mode 100644 index 000000000..1a0e59718 --- /dev/null +++ b/posts/2022.11.12/index.html @@ -0,0 +1,517 @@ +月度总结 | 光速大佬的小站 +
加载头像

月度总结

月度总结

咕咕了这么久

+

终于有时间回来更新了()

+

距离上一次更新是将近2个月前的事情了

+

首先呢,原神抽到了纳西妲和专武

+

纳西妲(自己的忘了截图,盗的)

+

至于为什么抽到专武,是因为原本想抽宵宫专武飞雷的

+

结果就中了纳西妲专武

+

武器池

+

专武

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

avatar
独步天下,吾心自洁,无欲无求,如林中之象。
公告
欢迎来看我的博客鸭~
引用到评论
\ No newline at end of file diff --git a/posts/3coutryfun/index.html b/posts/3coutryfun/index.html new file mode 100644 index 000000000..3dfc7e432 --- /dev/null +++ b/posts/3coutryfun/index.html @@ -0,0 +1,514 @@ +整活 | 光速大佬的小站 +
加载头像

整活

头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

avatar
独步天下,吾心自洁,无欲无求,如林中之象。
公告
欢迎来看我的博客鸭~
引用到评论
\ No newline at end of file diff --git a/posts/cloudreve-render/index.html b/posts/cloudreve-render/index.html new file mode 100644 index 000000000..355e2aa43 --- /dev/null +++ b/posts/cloudreve-render/index.html @@ -0,0 +1,519 @@ +记一次在Render上部署Cloudreve | 光速大佬的小站 +
加载头像

记一次在Render上部署Cloudreve

记一次在Render上部署Cloudreve

前几天在Github上看到了一个项目

+

https://github.com/Sakura1943/cloudreve-render

+

然后突然想起来自己的CloudReve不是1天就要掉线一次,而且还要手动重启,所以就有了以下的内容。

+

根据仓库的Readme.md可以知道作者大大给的部署教程,这里就不多说了,有需要的见链接。https://blog.sakunia.tk/2022/03/30/render_cloudreve

+

然鹅。

+

在第一次部署的时候,发现日志内输出CloudReve版本是3.4.2。跟本文撰写时的最新版本(3.5.3)对不上。

+

于是乎。

+

我Fork了这个仓库,并更新了DockerFile内的Cloudreve版本。

+

支持原作者,但你也可以使用我Fork修改的版本。

+

https://github.com/Guangsudalao/cloudreve-render
https://github.com/Guangsudalao-Studio/cloudreve-render

+

上述两个仓库将持续维护,更新cloudreve为最新版本!

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

avatar
独步天下,吾心自洁,无欲无求,如林中之象。
公告
欢迎来看我的博客鸭~
引用到评论
\ No newline at end of file diff --git a/posts/free-hosting/index.html b/posts/free-hosting/index.html new file mode 100644 index 000000000..3d75b9114 --- /dev/null +++ b/posts/free-hosting/index.html @@ -0,0 +1,516 @@ +免费网站托管 | 光速大佬的小站 +
加载头像

免费网站托管

头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

avatar
独步天下,吾心自洁,无欲无求,如林中之象。
公告
欢迎来看我的博客鸭~
引用到评论
\ No newline at end of file diff --git a/posts/freenom_with_cloudflare/index.html b/posts/freenom_with_cloudflare/index.html new file mode 100644 index 000000000..5ab1d551b --- /dev/null +++ b/posts/freenom_with_cloudflare/index.html @@ -0,0 +1,556 @@ +用Cloudflare workers为freenom域名续期 | 光速大佬的小站 +
加载头像

用Cloudflare workers为freenom域名续期

用Cloudflare workers为freenom域名续期

Github仓库地址
通过Cloudflare Workers自动续期Freenom域名
PencilNavigator制作

+

首先进入workers.cloudflare.com新建一个workers

在快速编辑里面复制这里的代码

+

然后进入到变量页面填写信息

变量
填写完成后就如这样
也可以勾选右侧的变量加密按钮,可以降低信息泄露的危险
变量

+

触发器

进入触发器页面,在“添加Cron触发器”界面,设置触发器并且保存。推荐执行时间为一天一次。

+

一些Cron的例子


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
时间代码
每分钟* * * * *
每30分钟*/30 * * * *
每个小时的第45分钟45 * * * *
在星期天的17:000 17 * * sun or 0 17 * * 1
工作日早上7:1010 7 * * mon-fri or 10 7 * * 2-6
每月的第一天下午3点0 15 1 * *
每月的最后一个星期五的18:000 18 * * 6L or 0 18 * * friL
每月最后一个工作日的23:5923 59 LW * *
+
+

其他的一些要点

由于*.workers.dev在国内污染严重,建议在触发器页面内绑定自己域名使用。
尽量禁用默认的*.workers.dev域名。

+

参考资料

https://developers.cloudflare.com/workers/platform/triggers/cron-triggers/

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/github_2fa/index.html b/posts/github_2fa/index.html new file mode 100644 index 000000000..a27030d5a --- /dev/null +++ b/posts/github_2fa/index.html @@ -0,0 +1,529 @@ +Github 2FA详解使用过程 | 光速大佬的小站 +
加载头像

Github 2FA详解使用过程

Github 2FA详解使用过程

开篇

+ +

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。

+

而最近的一段时间里,Github宣布要求对有一定数量贡献的开发者强制启用2fa(即两步验证)。相当于给账号多加了一层锁。
github_contributions

+

首先

来到Account security (github.com)这个页面
settings_pages

+

具体是登录GitHub账号,选择右上方头像当中的”settings“,再选择 “Password and authentication” ,然后选择Enable two-factor authentication

+

TOTP验证器

使用Microsoft Authenticator

通过这条中国公有云中-android-的-authenticator链接可得知,在咕鸽商店无法访问的情况下,Microsoft Authenticator仍可下载。
点击这里前往下载

+

使用Protecc

例如微软商店里的Protecc,是一个在 Windows 上的开源两步验证器。支持几乎所有使用 TOTP 算法的账号,还有一些内置的隐私保护措施,例如隐私屏障和代码模糊。还有,Protecc 还支持用 Windows Hello 来登录,以及二维码导入(需要相机权限)。还可以导出验证密钥来备份。

+

Protecc - 两步 TOTP 验证器

+

商店页面

+

安装完成之后打开软件
按钮

+

选择上方的 “Enter Key”

+

打开添加页面

+

在Name中填入你注册Github时使用的邮箱,Key中填入在GitHub上获取到的密钥(如下图中所示)

+

App secret

+

填写完成后点击下方的Next就可以使用了。

+

参考

+ +

FireCubeStudios/Protecc: It protecc (github.com)

+

Github_百度百科 (baidu.com)

+

中国公有云中-android-的-authenticator

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/hexo-auto-deploy-2/index.html b/posts/hexo-auto-deploy-2/index.html new file mode 100644 index 000000000..17148ff09 --- /dev/null +++ b/posts/hexo-auto-deploy-2/index.html @@ -0,0 +1,519 @@ +构建自己的云上工作流-Hexo自动部署 | 光速大佬的小站 +
加载头像

构建自己的云上工作流-Hexo自动部署

构建自己的云上工作流-Hexo自动部署

前言

Hexo,一个快速、简洁且高效的博客框架。在各种的插件与主题之下,结合管理面板使用,可以与其获得与WordPress和typecho相媲美的优势所在。

+

通过示例Github仓库构建

内部版本:

+

主程序:
Hexo:6.3.0

+

主题:
Hexo-theme-butterfly:4.8.5
Yun主题已经分支,有需要可前往Yun分支下查看,主分支已经更新为Butterfly主题!
Hexo-theme-yun:1.10.9

+

部署到Vercel

Deploy with Vercel

+

+

部署到Netlify

+ +

部署到Cloudflare Pages

建议通过以上两种方式构建仓库之后,再用git方式添加到pages部署

+

用Github Action部署

私有方式部署(指部署仓库私有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
name: Deploy By GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 - name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 16.x

- name: Install Dependencies
run: npm i
- run: npm run build

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: 你的Github用户名/你的Github仓库名
publish_dir: ./public
publish_branch: gh-pages
force_orphan: true
+

公有方式部署(指部署仓库公有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  name: Deploy By GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 16.x

- name: Install Dependencies
run: npm i
- run: npm run build

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: gh-pages
force_orphan: true
+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/hexo-auto-deploy/index.html b/posts/hexo-auto-deploy/index.html new file mode 100644 index 000000000..f36c77094 --- /dev/null +++ b/posts/hexo-auto-deploy/index.html @@ -0,0 +1,526 @@ +Hexo持续部署 | 光速大佬的小站 +
加载头像

Hexo持续部署

Hexo持续部署

部署方法:Vercel,Netlify,Cloudflare

+

1.Vercel:

Deploy with Vercel

+

+

部署设置选择hexo。

+

不需要特殊设置,直接部署即可。

+

Vercel的通用dns:

指向 Vercel 的 A 记录值: 76.76.21.21

+

指向 Vercel 的 cname记录值为:cname.vercel-dns.com

+

Vercel的中国dns:

指向 Vercel 的 A 记录值: 76.223.126.88

+

指向 Vercel 的 cname记录值为:cname-china.vercel-dns.com

+

2.Netlify:

+ +

如果已经部署完成,可以在Netlify项目中的Site setting修改域名前缀。

+

3.Cloudflare:

部署代码如下

+

npm install hexo-cli -g&&hexo clean&&hexo g

+

或者是

+

npm run build

+

输出目录:/public

+

https://static.dlya.top/img/Hexo/2022/8/b51afd44504caae6fa36a19e7b54c4e2.webp

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/planetscale_ban/index.html b/posts/planetscale_ban/index.html new file mode 100644 index 000000000..fa5b17cbe --- /dev/null +++ b/posts/planetscale_ban/index.html @@ -0,0 +1,530 @@ +Planetscale已将中国的访问屏蔽 | 光速大佬的小站 +
加载头像

Planetscale已将中国的访问屏蔽

Planetscale已将中国的访问屏蔽

在本文发表的早些时候,app.planetscale.com屏蔽了所有来自中国的连接请求,并且返回了404和500错误,现有的任何储存库不会造成任何影响。但是无法登陆控制面板。

+

客服回复如下

+
+

Hello,

+

My name is John Yerhot and I am responsible for the PlanetScale Support team.

+

Earlier today we removed access to PlanetScale for all users connecting from China. Anyone from within China attempting to access the PlanetScale web console or perform actions like logging in will receive an error. Any existing database should continue to be directly accessible, however.

+

We do not anticipate this will change in the foreseeable future.

+

We understand that this is not an ideal situation and we appreciate your understanding. If you need any help getting your data off the database with a tool like mysqldump or would like your account deleted, just let us know.

+

Thank you,

+

John Yerhot, Head of Support

+
+

翻译过来就是

+
+

您好,

+

我的名字是 John Yerhot,我负责 PlanetScale 支持团队。

+

今天早些时候,我们取消了所有从中国连接的用户对 PlanetScale 的访问权限。中国境内任何人尝试访问 PlanetScale Web 控制台或执行登录等操作都会收到错误消息。但是,任何现有的数据库都应该可以继续直接访问。

+

我们预计在可预见的未来这种情况不会改变。

+

我们知道这不是一个理想的情况,我们感谢您的理解。如果您需要任何帮助,使用类似工具将您的数据从数据库中mysqldump删除,或者希望您的帐户被删除,请告诉我们。

+

谢谢

+

支持主管 John Yerhot

+
+

planetscale_ban.jpg

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

avatar
独步天下,吾心自洁,无欲无求,如林中之象。
公告
欢迎来看我的博客鸭~
引用到评论
\ No newline at end of file diff --git a/posts/runexe/index.html b/posts/runexe/index.html new file mode 100644 index 000000000..4689c32c7 --- /dev/null +++ b/posts/runexe/index.html @@ -0,0 +1,515 @@ +打包的(再见极域+多桌面工具) | 光速大佬的小站 +
加载头像

打包的(再见极域+多桌面工具)

打包的(再见极域+多桌面工具)

打包的(再见极域+多桌面工具)

+

使用前请阅读!!
软件均为互联网上收集而来,这里仅作为收集整合!!
多桌面工具不能在Windows10上运行,不然会导致系统异常!!

+
+

https://static.dlya.top/img/Hexo/2022/8/0894e153225b87ce2d17c201d96d9273.webp

+

下载地址:

+

这里是1号链接
这里是备用链接

+
+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/vercel_better_ip/index.html b/posts/vercel_better_ip/index.html new file mode 100644 index 000000000..01d18dfef --- /dev/null +++ b/posts/vercel_better_ip/index.html @@ -0,0 +1,524 @@ +vercel优选IP食用方法 | 光速大佬的小站 +
加载头像

vercel优选IP食用方法

vercel优选IP食用方法

随便说说

vercel总归是逃不过被滥用的结局,随着越来越多的站长将网站部署到vercel上,带宽对于大陆总归有限,在网络高峰期时vercel的延迟就有些不怎么理想了。

+

但是也有人说怎么不部署在cloudflare上呢?

+

https://static.dlya.top/img/Hexo/24/2/226efcdac9ffd5865a913341828871c8.jpg

+

那当我掏出这张图的时候,阁下又该如何应对呢(手动狗头)

+

在高峰期的vercel与大陆的连接少至1s左右,多至10s以上,那又该如何解决这个问题呢。

+

正文

要知道cdn的加速原理就是在用户靠近的地方的服务器上加载内容与分发的。而可以参考ChenYFan的Vercel All ip
这里列出IP地址,以供打不开github的站长参考

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
34.95.57.145 [加拿大 魁北克省蒙特利尔 Google 云计算数据中心]
13.49.54.242 [瑞典 斯德哥尔摩 Amazon 数据中心]
18.178.194.147 [日本 东京都东京 Amazon 数据中心]
52.79.72.148 [韩国 首尔 Amazon 数据中心]
35.180.16.12 [法国 巴黎 Amazon 数据中心]
18.206.69.11 [美国 弗吉尼亚州阿什本 Amazon 数据中心]
52.76.85.65 [新加坡 Amazon 数据中心]
18.130.52.74 [英国 伦敦 Amazon 数据中心]
35.202.100.12 [美国 Merit 网络公司]
35.195.188.93 [比利时 瓦隆大区圣吉斯兰 Google 云计算数据中心]
3.22.103.24 [美国 Amazon EC2 服务器]
34.253.160.225 [爱尔兰 都柏林 Amazon 数据中心]
18.229.231.184 [巴西]
15.206.54.182 [美国 惠普 HP]
35.235.101.253 [美国 加利福尼亚州洛杉矶 Google 云计算数据中心]
35.196.196.42 [美国 Merit 网络公司]
35.228.53.122 [美国 俄勒冈州达尔斯 Google 云计算数据中心]
34.65.228.161 [美国 得克萨斯州]
52.38.79.87 [美国 俄勒冈州波特兰 Amazon 数据中心]
13.238.105.1 [澳大利亚 新南威尔士州悉尼 Amazon 数据中心]
104.199.217.228 [台湾省彰化县 Google 云计算数据中心]
52.9.164.177 [美国 加利福尼亚州旧金山 Amazon 数据中心]
18.162.37.140 [香港 Amazon 数据中心]
+ +

在vercel默认将大陆ip anycast到香港节点时,而香港节点的带宽又不足以提供需求,可以将dns手动解析到vercel上面的节点当中。通常来说解析到新加坡、台湾的节点会获得更佳的访问速度。

+

但是对于移动而言这样的加速效果不大,对于电信与联通线路有一定的提升。而104.199.217.228只有电信相对较快,18.162.37.140电信方面加速不明显,突出的是移动与联通方面,但是不太稳定。

+

可以结合dnspod进行手动解析食用
提醒

+

测速工具截图

测速工具推荐
炸了么
ITdog

+

https://static.dlya.top/img/Hexo/24/2/d46a84159ac171bef50277da15441ed7.jpeg

+

写在后面

任何的优选IP的玩法都有可能随时失效,不仅限于访问超时、IP被阻断、偶发高延迟等等,请谨慎考虑后食用。

+

灵感来源与参考

推一下 Vercel 加速节点 - Fgaoxing_Fgaoxing的个人博客 (yt-blog.top)

+

Vercel All IP - ChenYFan (gist.github.com)

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
灵感来源与参考  [推一下 Vercel 加速节点 - Fgaoxing\_Fgaoxing的个人博客 (www.yt-blog.top/9952/)[Vercel All IP - ChenYFan (https://gist.github.com/ChenYFan/fc2bd4ec1795766f2613b52ba123c0f8)

引用到评论
\ No newline at end of file diff --git a/posts/vercel_github/index.html b/posts/vercel_github/index.html new file mode 100644 index 000000000..08054dd2e --- /dev/null +++ b/posts/vercel_github/index.html @@ -0,0 +1,518 @@ +Github+Vercel免费反代理域名 | 光速大佬的小站 +
加载头像

Github+Vercel免费反代理域名

Github+Vercel免费反代理域名

需要的材料

一个可以上Github的设备以及Github账号、Vercel账号

+

本文接下来讲的方法是不需要Nodejs环境中安装Vercel-CLI的!

如果需要使用Vercel-CLI的方法可以查看!参考资料:https://blog.ltya.top/tutorial/206.html

+

开始

新建一个Github储存库,仓库名自取,点击这里直接创建

+

在储存库中新建vercel.json

+

其中内容如下

+
1
2
3
4
5
6
{
"version": 2,
"routes": [
{"src": "/(.*)","dest": "https://你的域名(带协议头)/$1"}
]
}
+ +

新建完之后比如这样

+

注意替换这段文本’你的域名(带协议头)’

+

最后在Vercel上部署即可。

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/vercel_short_link/index.html b/posts/vercel_short_link/index.html new file mode 100644 index 000000000..1e86f5994 --- /dev/null +++ b/posts/vercel_short_link/index.html @@ -0,0 +1,519 @@ +折腾日记:部署在vercel上的短链接 | 光速大佬的小站 +
加载头像

折腾日记:部署在vercel上的短链接

折腾日记:部署在vercel上的短链接

这段时间在折腾短链接,顺手就整理了一下

+

来自Thewbear的短链接

+

需要的材料

一个vercel和GitHub账号这不是废话吗

+
+

这边直接上仓库链接
Github仓库

+

点击下面的按钮就可以部署啦
Deploy with Vercel

+

这边贴上redirects.yml的语法

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- from: /baidu
to: https://baidu.com
status: 308 #更改状态码,例如301、302、307(默认)、308
- from: /google/:q #精确匹配一个比如说 /google/:q
to: https://google.com/search?q=:q
- from: /vercel/:slug* #匹配零个或多个比如说 /vercel/ vercel/docs
to: https://vercel.com/:slug
- from: /github/:slug+ #一个或多个执行/github/ThewApp github/ThewApp/vercel-shorturl
to: https://github.com/:slug
- from: /dev/:slug1/:slug2 #多个匹配例子 /dev/p/information
to: https://dev.to/:slug1/:slug2
- from: /google
to: https://google.com/search?q=:q
query:
action: search #必须有这个精确的查询
q: :q #这个匹配再查询比如说 /google?action = search&q =recursion
- from: /dev
to: https://dev.to/:user
query:
u: :user? #可选匹配ex. /dev /dev?u = thewbear
+ +

来自Steven-teyDub

这个项目暂时还不是特别好用,感觉自托管在部署上比较繁琐,有兴趣的可以试试。

+

也可以在Dub.sh托管自己的域名,但是需要一个咕鸽账号或者一个邮箱。域名绑定之后,直接cname解析到cname.vercel-dns.com,以及添加给出的txt记录验证就行了。

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

引用到评论
\ No newline at end of file diff --git a/posts/warn-domain/index.html b/posts/warn-domain/index.html new file mode 100644 index 000000000..def1224e0 --- /dev/null +++ b/posts/warn-domain/index.html @@ -0,0 +1,517 @@ +注意 | 光速大佬的小站 +
加载头像

注意

注意

注意

+

本站的旧域名guangsudalao.top即将在2022.08.19时过期弃用,请有友链的博主尽快更换链接

+

博客名称:光速大佬的小站

+

博客介绍:独步天下,吾心自洁,无欲无求,如林中之象。

+

博客链接:https://blog.dlya.top

+

博客图片:https://cravatar.cn/avatar/7819c71a6100c1d8d7fa6b5b7bf961be?s=500&d=mm&r=g

+
+

2024.3.17 更新

+

旧域名已被注册,跳转至恶意网站。不要被骗了~

+
头像头像
Guangsudalao
独步天下,吾心自洁,无欲无求,如林中之象。
打赏作者
感谢你赐予我前进的力量
  • 爱发电
    爱发电
  • 爱发电
    爱发电
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 光速大佬的小站

avatar
独步天下,吾心自洁,无欲无求,如林中之象。
公告
欢迎来看我的博客鸭~
引用到评论
\ No newline at end of file diff --git a/privacy/index.html b/privacy/index.html new file mode 100644 index 000000000..21fcd9cf6 --- /dev/null +++ b/privacy/index.html @@ -0,0 +1,523 @@ +隐私政策 | 光速大佬的小站 +
加载头像

隐私政策

我们是谁
我们的站点地址是:https://blog.dlya.top。

+

评论
当访客留下评论时,我们会收集评论表单所显示的数据,和访客的IP地址及浏览器的user agent字符串来帮助检查垃圾评论。

+

由您的电子邮箱地址所生成的匿名化字符串(又称为哈希)可能会被提供给Gravatar服务确认您是否有使用该服务。Gravatar服务的隐私政策在此:https://automattic.com/privacy/。在您的评论获批准后,您的资料图片将在您的评论旁公开展示。

+

媒体
如果您向此网站上传图片,您应当避免上传那些有嵌入地理位置信息(EXIF GPS)的图片。此网站的访客将可以下载并提取此网站的图片中的位置信息。

+

Cookies
如果您在我们的站点上留下评论,您可以选择用cookies保存您的名字、电子邮箱地址和网站地址。这是通过让您可以不用在评论时再次填写相关内容而向您提供方便。这些cookies会保留一年。

+

如果您访问我们的登录页,我们会设置一个临时的cookie来确认您的浏览器是否接受cookies。此cookie不包含个人数据,且会在您关闭浏览器时被丢弃。

+

当您登录时,我们也会设置多个cookies来保存您的登录信息及屏幕显示选项。登录cookies会保留两天,而屏幕显示选项cookies会保留一年。如果您选择了“记住我”,您的登录状态则会保留两周。如果您注销登陆了您的账户,用于登录的cookies将会被移除。

+

如果您编辑或发布文章,我们会在您的浏览器中保存一个额外的cookie。这个cookie不包含个人数据而只记录了您刚才编辑的文章的ID。这个cookie会保留一天。

+

来自其他网站的嵌入内容
此站点上的文章可能会包含嵌入的内容(如视频、图片、文章等)。来自其他站点的嵌入内容的行为和您直接访问这些其他站点没有区别。

+

这些站点可能会收集关于您的数据、使用cookies、嵌入额外的第三方跟踪程序及监视您与这些嵌入内容的交互,包括在您有这些站点的账户并登录了这些站点时,跟踪您与嵌入内容的交互。

+

我们与谁共享您的信息
若您请求重置密码,您的IP地址将包含于密码重置邮件中。

+

我们保留多久您的信息
如果您留下评论,评论和其元数据将被无限期保存。我们这样做以便能识别并自动批准任何后续评论,而不用将这些后续评论加入待审队列。

+

对于本网站的注册用户,我们也会保存用户在个人资料中提供的个人信息。所有用户可以在任何时候查看、编辑或删除他们的个人信息(除了不能变更用户名外)、站点管理员也可以查看及编辑那些信息。

+

您对您的信息有什么权利
如果您有此站点的账户,或曾经留下评论,您可以请求我们提供我们所拥有的您的个人数据的导出文件,这也包括了所有您提供给我们的数据。您也可以要求我们抹除所有关于您的个人数据。这不包括我们因管理、法规或安全需要而必须保留的数据。

+

我们将您的信息发送到哪
访客评论可能会被自动垃圾评论监测服务检查。

+

引用到评论
\ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 000000000..fc4569670 --- /dev/null +++ b/robots.txt @@ -0,0 +1,5 @@ +# robots.txt +User-agent: * +Sitemap: https://blog.dlya.top/atom.xml +Sitemap: https://blog.dlya.top/sitemap.xml +Sitemap: https://blog.dlya.top/baidusitemap.xml diff --git a/search.xml b/search.xml new file mode 100644 index 000000000..e19be7c28 --- /dev/null +++ b/search.xml @@ -0,0 +1,663 @@ + + + + + + + vercel优选IP食用方法 + + /posts/vercel_better_ip/ + + 随便说说

vercel总归是逃不过被滥用的结局,随着越来越多的站长将网站部署到vercel上,带宽对于大陆总归有限,在网络高峰期时vercel的延迟就有些不怎么理想了。

但是也有人说怎么不部署在cloudflare上呢?

https://static.dlya.top/img/Hexo/24/2/226efcdac9ffd5865a913341828871c8.jpg

那当我掏出这张图的时候,阁下又该如何应对呢(手动狗头)

在高峰期的vercel与大陆的连接少至1s左右,多至10s以上,那又该如何解决这个问题呢。

正文

要知道cdn的加速原理就是在用户靠近的地方的服务器上加载内容与分发的。而可以参考ChenYFan的Vercel All ip
这里列出IP地址,以供打不开github的站长参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
34.95.57.145 [加拿大 魁北克省蒙特利尔 Google 云计算数据中心]
13.49.54.242 [瑞典 斯德哥尔摩 Amazon 数据中心]
18.178.194.147 [日本 东京都东京 Amazon 数据中心]
52.79.72.148 [韩国 首尔 Amazon 数据中心]
35.180.16.12 [法国 巴黎 Amazon 数据中心]
18.206.69.11 [美国 弗吉尼亚州阿什本 Amazon 数据中心]
52.76.85.65 [新加坡 Amazon 数据中心]
18.130.52.74 [英国 伦敦 Amazon 数据中心]
35.202.100.12 [美国 Merit 网络公司]
35.195.188.93 [比利时 瓦隆大区圣吉斯兰 Google 云计算数据中心]
3.22.103.24 [美国 Amazon EC2 服务器]
34.253.160.225 [爱尔兰 都柏林 Amazon 数据中心]
18.229.231.184 [巴西]
15.206.54.182 [美国 惠普 HP]
35.235.101.253 [美国 加利福尼亚州洛杉矶 Google 云计算数据中心]
35.196.196.42 [美国 Merit 网络公司]
35.228.53.122 [美国 俄勒冈州达尔斯 Google 云计算数据中心]
34.65.228.161 [美国 得克萨斯州]
52.38.79.87 [美国 俄勒冈州波特兰 Amazon 数据中心]
13.238.105.1 [澳大利亚 新南威尔士州悉尼 Amazon 数据中心]
104.199.217.228 [台湾省彰化县 Google 云计算数据中心]
52.9.164.177 [美国 加利福尼亚州旧金山 Amazon 数据中心]
18.162.37.140 [香港 Amazon 数据中心]

在vercel默认将大陆ip anycast到香港节点时,而香港节点的带宽又不足以提供需求,可以将dns手动解析到vercel上面的节点当中。通常来说解析到新加坡、台湾的节点会获得更佳的访问速度。

但是对于移动而言这样的加速效果不大,对于电信与联通线路有一定的提升。而104.199.217.228只有电信相对较快,18.162.37.140电信方面加速不明显,突出的是移动与联通方面,但是不太稳定。

可以结合dnspod进行手动解析食用
提醒

测速工具截图

测速工具推荐
炸了么
ITdog

https://static.dlya.top/img/Hexo/24/2/d46a84159ac171bef50277da15441ed7.jpeg

写在后面

任何的优选IP的玩法都有可能随时失效,不仅限于访问超时、IP被阻断、偶发高延迟等等,请谨慎考虑后食用。

灵感来源与参考

推一下 Vercel 加速节点 - Fgaoxing_Fgaoxing的个人博客 (yt-blog.top)

Vercel All IP - ChenYFan (gist.github.com)

]]>
+ + + + + IT + + + + + + + vercel + + IP + + + +
+ + + + + 整活 + + /posts/3coutryfun/ + + 好久没更新了,来整点活~

https://www.bilibili.com/video/BV1UB421k7gQ/

]]>
+ + + + + 鬼畜 + + + + + + + 鬼畜 + + + +
+ + + + + 折腾日记:部署在vercel上的短链接 + + /posts/vercel_short_link/ + + 这段时间在折腾短链接,顺手就整理了一下

来自Thewbear的短链接

需要的材料

一个vercel和GitHub账号这不是废话吗

这边直接上仓库链接
Github仓库

点击下面的按钮就可以部署啦
Deploy with Vercel

这边贴上redirects.yml的语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- from: /baidu
to: https://baidu.com
status: 308 #更改状态码,例如301、302、307(默认)、308
- from: /google/:q #精确匹配一个比如说 /google/:q
to: https://google.com/search?q=:q
- from: /vercel/:slug* #匹配零个或多个比如说 /vercel/ vercel/docs
to: https://vercel.com/:slug
- from: /github/:slug+ #一个或多个执行/github/ThewApp github/ThewApp/vercel-shorturl
to: https://github.com/:slug
- from: /dev/:slug1/:slug2 #多个匹配例子 /dev/p/information
to: https://dev.to/:slug1/:slug2
- from: /google
to: https://google.com/search?q=:q
query:
action: search #必须有这个精确的查询
q: :q #这个匹配再查询比如说 /google?action = search&q =recursion
- from: /dev
to: https://dev.to/:user
query:
u: :user? #可选匹配ex. /dev /dev?u = thewbear

来自Steven-teyDub

这个项目暂时还不是特别好用,感觉自托管在部署上比较繁琐,有兴趣的可以试试。

也可以在Dub.sh托管自己的域名,但是需要一个咕鸽账号或者一个邮箱。域名绑定之后,直接cname解析到cname.vercel-dns.com,以及添加给出的txt记录验证就行了。

]]>
+ + + + + IT + + Vercel + + GitHub + + 短链接 + + + + + + + IT + + Vercel + + GitHub + + 短链接 + + Shorturl + + + +
+ + + + + Github 2FA详解使用过程 + + /posts/github_2fa/ + + 开篇

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。

而最近的一段时间里,Github宣布要求对有一定数量贡献的开发者强制启用2fa(即两步验证)。相当于给账号多加了一层锁。
github_contributions

首先

来到Account security (github.com)这个页面
settings_pages

具体是登录GitHub账号,选择右上方头像当中的”settings“,再选择 “Password and authentication” ,然后选择Enable two-factor authentication

TOTP验证器

使用Microsoft Authenticator

通过这条中国公有云中-android-的-authenticator链接可得知,在咕鸽商店无法访问的情况下,Microsoft Authenticator仍可下载。
点击这里前往下载

使用Protecc

例如微软商店里的Protecc,是一个在 Windows 上的开源两步验证器。支持几乎所有使用 TOTP 算法的账号,还有一些内置的隐私保护措施,例如隐私屏障和代码模糊。还有,Protecc 还支持用 Windows Hello 来登录,以及二维码导入(需要相机权限)。还可以导出验证密钥来备份。

Protecc - 两步 TOTP 验证器

商店页面

安装完成之后打开软件
按钮

选择上方的 “Enter Key”

打开添加页面

在Name中填入你注册Github时使用的邮箱,Key中填入在GitHub上获取到的密钥(如下图中所示)

App secret

填写完成后点击下方的Next就可以使用了。

参考

FireCubeStudios/Protecc: It protecc (github.com)

Github_百度百科 (baidu.com)

中国公有云中-android-的-authenticator

]]>
+ + + + + 2fa + + Github + + + + + + + Github + + Protectcc + + TOTP + + 2fa + + + +
+ + + + + 用Cloudflare workers为freenom域名续期 + + /posts/freenom_with_cloudflare/ + + Github仓库地址
通过Cloudflare Workers自动续期Freenom域名
PencilNavigator制作

首先进入workers.cloudflare.com新建一个workers

在快速编辑里面复制这里的代码

然后进入到变量页面填写信息

变量
填写完成后就如这样
也可以勾选右侧的变量加密按钮,可以降低信息泄露的危险
变量

触发器

进入触发器页面,在“添加Cron触发器”界面,设置触发器并且保存。推荐执行时间为一天一次。

一些Cron的例子


时间代码
每分钟* * * * *
每30分钟*/30 * * * *
每个小时的第45分钟45 * * * *
在星期天的17:000 17 * * sun or 0 17 * * 1
工作日早上7:1010 7 * * mon-fri or 10 7 * * 2-6
每月的第一天下午3点0 15 1 * *
每月的最后一个星期五的18:000 18 * * 6L or 0 18 * * friL
每月最后一个工作日的23:5923 59 LW * *

其他的一些要点

由于*.workers.dev在国内污染严重,建议在触发器页面内绑定自己域名使用。
尽量禁用默认的*.workers.dev域名。

参考资料

https://developers.cloudflare.com/workers/platform/triggers/cron-triggers/

]]>
+ + + + + freenom + + + + + + + freenom + + cloudflare + + cloudflare workers + + + +
+ + + + + 月度总结 + + /posts/2022.11.12/ + + 咕咕了这么久

终于有时间回来更新了()

距离上一次更新是将近2个月前的事情了

首先呢,原神抽到了纳西妲和专武

纳西妲(自己的忘了截图,盗的)

至于为什么抽到专武,是因为原本想抽宵宫专武飞雷的

结果就中了纳西妲专武

武器池

专武

]]>
+ + + + + + 总结 + + + +
+ + + + + 构建自己的云上工作流-Hexo自动部署 + + /posts/hexo-auto-deploy-2/ + + 前言

Hexo,一个快速、简洁且高效的博客框架。在各种的插件与主题之下,结合管理面板使用,可以与其获得与WordPress和typecho相媲美的优势所在。

通过示例Github仓库构建

内部版本:

主程序:
Hexo:6.3.0

主题:
Hexo-theme-butterfly:4.8.5
Yun主题已经分支,有需要可前往Yun分支下查看,主分支已经更新为Butterfly主题!
Hexo-theme-yun:1.10.9

部署到Vercel

Deploy with Vercel

部署到Netlify

部署到Cloudflare Pages

建议通过以上两种方式构建仓库之后,再用git方式添加到pages部署

用Github Action部署

私有方式部署(指部署仓库私有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
name: Deploy By GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 - name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 16.x

- name: Install Dependencies
run: npm i
- run: npm run build

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: 你的Github用户名/你的Github仓库名
publish_dir: ./public
publish_branch: gh-pages
force_orphan: true

公有方式部署(指部署仓库公有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  name: Deploy By GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 16.x

- name: Install Dependencies
run: npm i
- run: npm run build

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: gh-pages
force_orphan: true
]]>
+ + + + + IT + + Hexo + + + + + + + Github + + Hexo + + Vercel + + Netlify + + + +
+ + + + + Planetscale已将中国的访问屏蔽 + + /posts/planetscale_ban/ + + 在本文发表的早些时候,app.planetscale.com屏蔽了所有来自中国的连接请求,并且返回了404和500错误,现有的任何储存库不会造成任何影响。但是无法登陆控制面板。

客服回复如下

Hello,

My name is John Yerhot and I am responsible for the PlanetScale Support team.

Earlier today we removed access to PlanetScale for all users connecting from China. Anyone from within China attempting to access the PlanetScale web console or perform actions like logging in will receive an error. Any existing database should continue to be directly accessible, however.

We do not anticipate this will change in the foreseeable future.

We understand that this is not an ideal situation and we appreciate your understanding. If you need any help getting your data off the database with a tool like mysqldump or would like your account deleted, just let us know.

Thank you,

John Yerhot, Head of Support

翻译过来就是

您好,

我的名字是 John Yerhot,我负责 PlanetScale 支持团队。

今天早些时候,我们取消了所有从中国连接的用户对 PlanetScale 的访问权限。中国境内任何人尝试访问 PlanetScale Web 控制台或执行登录等操作都会收到错误消息。但是,任何现有的数据库都应该可以继续直接访问。

我们预计在可预见的未来这种情况不会改变。

我们知道这不是一个理想的情况,我们感谢您的理解。如果您需要任何帮助,使用类似工具将您的数据从数据库中mysqldump删除,或者希望您的帐户被删除,请告诉我们。

谢谢

支持主管 John Yerhot

planetscale_ban.jpg

]]>
+ + + + + IT + + + + + + + IT + + planetscale + + 屏蔽 + + + +
+ + + + + 记一次在Render上部署Cloudreve + + /posts/cloudreve-render/ + + 前几天在Github上看到了一个项目

https://github.com/Sakura1943/cloudreve-render

然后突然想起来自己的CloudReve不是1天就要掉线一次,而且还要手动重启,所以就有了以下的内容。

根据仓库的Readme.md可以知道作者大大给的部署教程,这里就不多说了,有需要的见链接。https://blog.sakunia.tk/2022/03/30/render_cloudreve

然鹅。

在第一次部署的时候,发现日志内输出CloudReve版本是3.4.2。跟本文撰写时的最新版本(3.5.3)对不上。

于是乎。

我Fork了这个仓库,并更新了DockerFile内的Cloudreve版本。

支持原作者,但你也可以使用我Fork修改的版本。

https://github.com/Guangsudalao/cloudreve-render
https://github.com/Guangsudalao-Studio/cloudreve-render

上述两个仓库将持续维护,更新cloudreve为最新版本!

]]>
+ + + + + IT + + Cloudreve + + + + + + + IT + + Cloudreve + + Render + + + +
+ + + + + 注意 + + /posts/warn-domain/ + + 注意

本站的旧域名guangsudalao.top即将在2022.08.19时过期弃用,请有友链的博主尽快更换链接

博客名称:光速大佬的小站

博客介绍:独步天下,吾心自洁,无欲无求,如林中之象。

博客链接:https://blog.dlya.top

博客图片:https://cravatar.cn/avatar/7819c71a6100c1d8d7fa6b5b7bf961be?s=500&d=mm&r=g

2024.3.17 更新

旧域名已被注册,跳转至恶意网站。不要被骗了~

]]>
+ + + + + 警告 + + + + + + + 警告 + + + +
+ + + + + 打包的(再见极域+多桌面工具) + + /posts/runexe/ + + 打包的(再见极域+多桌面工具)

使用前请阅读!!
软件均为互联网上收集而来,这里仅作为收集整合!!
多桌面工具不能在Windows10上运行,不然会导致系统异常!!

https://static.dlya.top/img/Hexo/2022/8/0894e153225b87ce2d17c201d96d9273.webp

下载地址:

这里是1号链接
这里是备用链接

]]>
+ + + + + IT + + + + + + + IT + + 极域 + + + +
+ + + + + Github+Vercel免费反代理域名 + + /posts/vercel_github/ + + 需要的材料

一个可以上Github的设备以及Github账号、Vercel账号

本文接下来讲的方法是不需要Nodejs环境中安装Vercel-CLI的!

如果需要使用Vercel-CLI的方法可以查看!参考资料:https://blog.ltya.top/tutorial/206.html

开始

新建一个Github储存库,仓库名自取,点击这里直接创建

在储存库中新建vercel.json

其中内容如下

1
2
3
4
5
6
{
"version": 2,
"routes": [
{"src": "/(.*)","dest": "https://你的域名(带协议头)/$1"}
]
}

新建完之后比如这样

注意替换这段文本’你的域名(带协议头)’

最后在Vercel上部署即可。

]]>
+ + + + + IT + + Vercel + + GitHub + + + + + + + IT + + Vercel + + GitHub + + + +
+ + + + + Hexo持续部署 + + /posts/hexo-auto-deploy/ + + 部署方法:Vercel,Netlify,Cloudflare

1.Vercel:

Deploy with Vercel

部署设置选择hexo。

不需要特殊设置,直接部署即可。

Vercel的通用dns:

指向 Vercel 的 A 记录值: 76.76.21.21

指向 Vercel 的 cname记录值为:cname.vercel-dns.com

Vercel的中国dns:

指向 Vercel 的 A 记录值: 76.223.126.88

指向 Vercel 的 cname记录值为:cname-china.vercel-dns.com

2.Netlify:

如果已经部署完成,可以在Netlify项目中的Site setting修改域名前缀。

3.Cloudflare:

部署代码如下

npm install hexo-cli -g&&hexo clean&&hexo g

或者是

npm run build

输出目录:/public

https://static.dlya.top/img/Hexo/2022/8/b51afd44504caae6fa36a19e7b54c4e2.webp

]]>
+ + + + + IT + + Hexo + + + + + + + Hexo + + Vercel + + Netlify + + GitHub + + + +
+ + + + + 免费网站托管 + + /posts/free-hosting/ + + 点击这里进入首页
点击这里进入注册页面
点击这里进入控制面板

PS:网站自带cloudflare加速

内置5个域名:

fownhost.ml

fownhost.ga

fownhost.gq

fownhost.cf

fownhost.tk

]]>
+ + + + + IT + + 免费 + + + + + + + IT + + 免费网站托管 + + + +
+ + + + + + + + 关于我 + + /about/index.html + + 访问统计
流量统计支持:51la

状态

• 不定时coding。
• 游戏:Minecraft、原神、Terraria

©版权

本博客所有文章除特别声明外,均采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。如果你要转载文章,请询问作者,并以相同方式进行非商业性搬运,且转载请注明出处!

联系我

]]>
+ +
+ + + + + 页面走丢了 + + //404.html + + + + + + + + + 振奋人心的励志歌《Higher》:我在飞翔,追逐天际 + + /archives/higher_song.html + + 歌曲:Higher

歌手:Erik Grönwall

【振奋人心的励志歌《Higher》:我在飞翔,追逐天际-哔哩哔哩】https://b23.tv/T7vW21

歌曲歌词:

Hey, I’m a believer

And gravity’s letting go of me tonight

You, came out of nowhere

When everything was passing by at the speed of light

嘿,我是一个有信仰的人

今晚,我会挣脱重力的束缚

你,突然从不知何处出现

当一切如光速般闪过

So hold my hand and never let me go

Take a leap of fate into the unknown

紧握我的手,别让我离开

信心百倍的面对未知世界

I am flying

My heart is taking over

The world is flashing by

Higher higher higher

I will follow wherever it might take us

Chasing through the sky

Higher higher higher

我在飞翔

我的内心激动不已

世界一闪而过

更高!更高!更高!

我愿追随它闯荡四方

追逐天际

更高!更高!更高!

Oh I know

It can be scary

You bet it all when your heart is on the line

But oh, baby don’t worry

Just hold my hand and never let me go

噢,我知道

这令人惧怕

当你决心已下,就要放手一搏

但是,宝贝,别担心

只管抓紧我的手,别让我离开

I am flying

My heart is taking over

The world is flashing by

Higher higher higher

I will follow wherever it might take us

Chasing through the sky

Higher higher higher

我在飞翔

我的内心激动不已

世界一闪而过

更高!更高!更高!

我愿追随它闯荡四方

追逐天际

更高!更高!更高!

Take me higher

I hold you as we’re shooting through the atmosphere

Around us everything disappears

带我高飞

我抱着你,我们直冲云霄

身边的一切都烟消云散

Woah oa oa

I am flying

My heart is taking over

The world is flashing by

噢…

我在飞翔

我的内心激动不已

世界一闪而过

I am flying

My heart is taking over

The world is flashing by

Higher higher higher

I will follow wherever it might take us

Chasing through the sky

Higher higher higher

我在飞翔

我的内心激动不已

世界一闪而过

更高!更高!更高!

我愿追随它闯荡四方

追逐天际

更高!更高!更高!

I am flying

My heart is taking over

The world is flashing by

Higher higher higher

I will follow wherever it might take us

Chasing through the sky

Higher higher higher

我在飞翔

我的内心激动不已

世界一闪而过

更高!更高!更高!

我愿追随它闯荡四方

追逐天际

更高!更高!更高!

]]>
+ +
+ + + + + 这才是玄学与爆肝的力量! + + /archives/yuanshen_ganyu.html + + 先是把班尼特在月海亭摔死,在落地的一瞬间打开祈愿,一发入魂,中甘雨!

https://static.dlya.top/img/Hexo/2022/8/6487753c4f0f6e4b0e4437ab1ce71bc8.webp

]]>
+ +
+ + + + + 钟离到手 + + /archives/yuanshen_zhongli.html + + 大保底 70+12发出的

https://static.dlya.top/img/Hexo/2022/8/2275f7cebd49a7e5f30da6eebb9952a2.webp

]]>
+ +
+ + + + + + + /categories/index.html + + + + + + + + + Copyright + + /copyright/index.html + + 本站使用知识共享许可协议(CC) 4.0协议

知识共享 (Creative Commons) 署名—相同方式共享 4.0公共许可协议国际版
通过行使本协议所授予的权利(定义如下),您接受并同意受到知识共享(Creative Commons)署名—相同方式共享4.0国际公共许可协议(以下简称“本公共许可协议”)的约束。从合同解释的角度来看,您获得授权的对价是接受本协议的条款,许可人授予您这些权利的对价是可以通过采用本协议条款发布授权作品(material)而获得利益。

第一条 定义

演绎作品(Adapted Material): 指受到著作权与类似权利保护的,基于授权作品(Licensed Material)而创作的作品(material),例如对授权作品(Licensed Material)的翻译、改编、编排、改写或其他依据著作权与类似权利需要获得所有人许可的修改。为本公共许可协议之目的,当授权作品(Licensed Material)为音乐作品、表演或录音时,将其依时间序列关系与动态影像配合一致而形成的作品,视为演绎作品(Adapted Material)。
演绎作者的许可: 指您依据本公共许可协议对在演绎作品(Adapted Material)中自己所贡献的部分所享有的著作权与类似权利进行授权的协议。
署名—相同方式共享兼容协议: 指在 creativecommons.org/compatiblelicenses 上列出且经知识共享组织(Creative Commons)认可、实质上与本公共许可协议相当的协议。
著作权与类似权利: 指著作权和/或与著作权紧密联系的类似权利。类似权利包括但不限于:表演者权、广播组织权、录音录像制作者权、以及数据库特别权利,而不论上述权利的定义和归类如何。为本公共许可协议之目的, 第二条b款第(1)项与第(2)项 所列权利不属于著作权与类似权利。
有效的技术措施: 指根据各司法管辖区遵循《世界知识产权组织版权条约》(1996年12月20日通过)第十一条或类似国际协定项下的义务所制定的法律,在没有适当的授权的情况下,禁止使用者规避的技术措施。
例外与限制: 指合理使用(Fair Dealing and Fair Use)和/或其他适用于您对授权作品(Licensed Material)的使用的著作权与类似权利的例外或限制。
授权要素: 指知识共享公共许可协议(CCPL)名称中所包含的协议特征。本公共许可协议的授权要素包括:署名和相同方式共享。
授权作品(Licensed Material): 指许可人通过本公共许可协议授权的文学、艺术作品(artistic or literary work),数据库或其他作品(material)。
协议所授予的权利: 指依据本公共许可协议的条款和条件所授予您的各项权利,限于适用于您对授权作品(Licensed Material)的使用且许可人有权许可的著作权与类似权利。
许可人: 指通过本公共许可协议进行授权的个人或组织。
分享: 指以需要“协议所授予的权利”许可的任何方法或程序向公众提供作品(material),包括复制、公共展示、公开表演、发行、散布、传播、进口或提供作品(material)给公众以便其能在其选定的时间和地点接收作品(material)。
数据库特别权利: 指除了著作权之外,衍生于1996年3月11日通过的《欧洲议会与欧盟理事会关于数据库法律保护的指令》(Directive 96/9/EC)及其修改或后续版本的权利,或其他国家或地区本质上与之等同的权利。
您: 指依据本公共许可协议行使其所获得授予之权利的个人或机构。 “您的” 有相应的含义。
第二条 授权范围

授权
根据本公共许可协议的条款,许可人授予您在全球范围内,免费的、不可再许可、非独占、不可撤销的许可,以对授权作品(Licensed Material)行使以下“协议所授予的权利”:
复制和分享授权作品(Licensed Material)的全部或部分;以及
创作、复制和分享演绎作品(Adapted Material)。
例外和限制 为避免疑义,若著作权的例外和限制适用于您对授权作品(Licensed Material)的使用,本公共许可协议将不适用,您也无须遵守本公共许可协议之条款。
期限 本公共许可协议的期限规定于第六条 a 款。
媒介和形式;允许的技术修改 许可人授权您在任何媒介以任何形式(不论目前已知的或未来出现的)行使本协议授予的权利,并为之进行必要的技术修改。许可人放弃和/或同意不主张任何权利以阻止您为了行使协议项下权利进行必要的技术修改,包括为规避有效技术措施所必须的技术修改。为了本公共许可协议之目的, 基于第二条a款第(4)项 进行的技术修改不构成演绎作品(Adapted Material)。
后续接受者
来自许可人的要约——授权作品(Licensed Material) 本授权作品(Licensed Material)的每一个后续接受者都自动取得许可人的要约,以按照本公共许可协议的条款行使协议授予的权利。
来自许可人的额外要约——演绎作品(Adapted Material) 您基于授权作品(Licensed Material)创作的演绎作品(Adapted Material)的每一个后续接受者都自动取得许可人的要约,以按照您所适用的“演绎作者的许可”协议的条款行使协议所授予的权利。
禁止下游限制 若会限制授权作品(Licensed Material)后续接受者行使本协议所授予的权利,则您不得对授权作品(Licensed Material)提出或增加任何额外的或不同的条款,或使用任何有效技术措施。
并非背书 本公共许可协议不构成、或不得被解释为允许您声明或主张:您或您对授权作品(Licensed Material)的使用与许可人或 第三条a款第(1)项(A)目(i)所规定要求提供署名的权利人相关联,或得到其赞助、同意或被授予正式地位。
其他权利

依据本公共许可协议,著作人身权,例如保护作品完整权、形象权、隐私权或其他类似的人格权利,不在许可范围内。但是,在条件允许的情况下,许可人可以在必要范围内放弃和/或同意不主张其权利,以便您行使本协议所授予的权利。
本公共许可协议不适用于任何专利权或商标权许可。
在自愿的或可放弃的法定或强制许可机制下,许可人在最大可能范围内放弃对您因行使本协议所授予的权利而产生的使用费的权利,不论是直接收取或通过集体管理组织收取。在其他任何情况下,许可人明确保留收取使用费的任何权利。
第三条 授权条件

您行使被许可的权利明确受以下条件限制:

署名

若您分享本授权作品(Licensed Material)(包含修改格式),您必须:

保留如下标识(如果许可人提供授权作品(Licensed Material)的同时提供如下标识):
以许可人要求的任何合理方式,标识本授权作品(Licensed Material)创作者和其他被指定署名的人的身份(包括指定的笔名);
著作权声明;
有关本公共许可协议的声明;
有关免责的声明;
在合理可行情况下,本授权作品(Licensed Material)的网址(URI)或超链接;
表明您是否修改本授权作品(Licensed Material)及保留任何先前修改的标记;及
表明授权作品(Licensed Material)依据本公共许可协议授权,并提供本公共许可协议全文,或者本公共许可协议的网址(URI)或超链接。
依据您分享本授权作品(Licensed Material)的媒介、方法及情況,您可以采用任何合理方式满足第三条a款第(1)项的条件 。 例如,提供包含所要求信息来源的网址(URI)或超链接可算是合理地满足此处的条件。
如果许可人要求,您必须在合理可行的范围内移除第三条a款第(1)项(A)目 所要求的任何信息。
相同方式共享
除第三条a款的条件外,如果您分享您创作的演绎作品(Adapted Material),则下列条件也适用:

您适用的“演绎作者的许可”协议必须是与本许可协议具有相同授权要素的知识共享(Creative Commons)许可协议(可以是本版本或后续版本),或者其他与“署名-相同方式共享”协议兼容的许可协议。
您必须提供您适用的“演绎作者的许可”协议全文或者该许可协议的网址(URI)或超链接。依据您分享您的演绎作品(Adapted Material)所使用的媒介、方法及情況,您可以采用任何合理方式满足此条件。
您不得提出或施加任何附加或不同的条款或条件、或在演绎作品(Adapted Material)上应用任何有效的技术措施,以限制使用者行使依您所适用的“演绎作者的许可”协议所授予的权利。
第四条 数据库特别权利

当协议所授予的权利包含数据库特别权利,而该数据库特别权利适用于您对授权作品(Licensed Material)的使用时:

为避免疑义, 第二条a款第(1) 项授权您,摘录、再利用、复制和分享全部或绝大部分数据库资料;
如果您将数据库资料的全部或绝大部分纳入您享有数据库特别权利的另一数据库,则您享有数据库特别权利的该数据库(而非其中的单个内容)视为演绎作品(Adapted Material),适用第三条b款的要求;
如果您分享全部或大部分该数据库的资料,您必须遵守 第三条a款 规定的条件。
为避免疑义,当协议所授予的权利包含其他著作权与类似权利时,第四条补充且不取代本公共许可协议所规定的您的义务。
第五条 免责声明及责任限制条款

除非许可人另有保证,否则在最大可能范围内,许可人按其现状和现有之基础提供授权作品(Licensed Material),且没有就授权作品(Licensed Material)做出任何形式的陈述或保证:无论明示、默示、法定或其他形式,包括但不限于任何有关本授权作品(Licensed Material)的权属保证、可交易性、适于特定目的、未侵害他人权利、没有潜在或其他瑕疵、精确性或是否有错误,不管是否已知或可发现。当免责声明全部或部分不被允许时,此免责声明可能不适用于您。
在最大可能范围内, 对于任何因本公共许可协议或使用授权作品(Licensed Material)引起的直接的、特殊的、间接的、附随的、连带的、惩罚性的、警告性的,或其他的损失、成本、费用或损害,许可人不对您负任何法律上或其他的责任(包括但不限于过失责任)。当责任限制部分或全部不被允许时,该限制不适用于您。
前述免责及责任限制声明,应尽可能以最接近于完全排除全部责任的方式解释。
第六条 期限与终止

本公共许可协议在著作权与类似权利存续期间内有效。然而,如果您没有遵守此公共许可协议,则您依据此公共许可协议享有的权利自动终止。
当您使用本授权作品(Licensed Material)的权利根据第六条a款终止时,您的权利在下述情况下恢复:

自违反协议的行为纠正之日起自动恢复,但须在您发现违反情形后30日内纠正;或
根据许可人明示恢复权利的意思表达。
为避免疑义,本公共许可协议第六条b款 不影响许可人就您违反本公共许可协议的行为寻求法律救济。
为避免疑义,许可人也可在任何时间,以另外的条款或条件提供本授权作品(Licensed Material),或者停止传播本授权作品(Licensed Material);然而,许可人此种行为不会终止本公共许可协议。
本协议第一、五、六、七及第八条,不因本公共许可协议终止而失效。
第七条 其他条款和条件

除非明示同意,否则许可人不受您表达的任何附加或不同条款或条件约束。
本公共许可协议未提及的关于授权作品(Licensed Material)之任何安排、共识或协议,不属于且独立于本公共许可协议的条款及条件。
第八条 解释

为避免疑义,本许可协议不会也不应被解释为减少、限制、约束或施加条件于无需本公共许可协议授权即可依法行使的对授权作品(Licensed Material)的任何使用。
在最大可能范围内,如果本公共许可协议的任何条款被视为无法执行,该条款在必要的最小限度内,自动调整至可以执行。如果该条款不能被调整,其应自本公共许可协议中排除适用,不影响其余条款的效力。
除非许可人明示同意,本公共许可协议的任何条款或条件均不得放弃。
本公共许可协议条款不构成、也不得被解释为限制或者放弃适用于许可人或您的特权或豁免,包括豁免于任何司法管辖区或行政机构的法律程序。
知识共享组织(Creative Commons)不是其公共许可协议的一方 。尽管如此,知识共享组织(Creative Commons)可以选择其中一种公共许可协议适用于其发表的作品(material),在此种情况下被视为许可人。知识共享公共许可协议 (CCPL)的文本属于公共领域,适用CC0公共许可协议。 除用于向公众表明本作品(material)是依照知识共享(Creative Commons)公共许可协议授权,或发布于creativecommons.org/policies的知识共享组织(Creative Commons)政策另有规定允许以外,如未经知识共享组织(Creative Commons)事先书面同意,任何一方均不得使用“知识共享”(Creative Commons)商标和其他相关商标及标识。包括但不限于,将该商标或标识用于对知识共享公共许可协议(CCPL)做出的未经同意的修改,或与授权作品(Licensed Material)使用有关的其他安排、共识或协议。为避免疑义,本段关于商标的限制性规定不构成公共许可协议之一部分。

]]>
+ +
+ + + + + + + /css/loading.css + + + + + + + + + + + /css/statistics.css + + + + + + + + + 即刻短文 + + /essay/index.html + + + + + + + + + 朋友圈 + + /fcircle/index.html + + + + + + + + + + + /js/baidu-pusher.js + + (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s);})();]]> + + + + + + + + + /js/gg-ad-ms.js + + ]]> + + + + + + + + + /js/load-time.js + + + + + + + + + + + /js/redirects-obs.js + + + + + + + + + + + /js/redirects.js + + + + + + + + + + + /link/index.html + + 以上排名不分先后顺序。

要求:

1.博客运行时间:≥14days

2.不含有色情、暴力、敏感的内容(尤其是政治敏感)

3.不未经授权搬运他人文章

4.要求优质文章≥3篇

加入友链时需要先添加本站友链,并且按照以下格式要求评论,审核结果将在评论区留言:

博客图片建议使用gravatar镜像

1
2
3
4
5
6
7
博客名称:光速大佬的小站

博客介绍:独步天下,吾心自洁,无欲无求,如林中之象。

博客链接:https://blog.dlya.top

博客图片:https://cravatar.cn/avatar/7819c71a6100c1d8d7fa6b5b7bf961be?s=500&d=mm&r=g
]]>
+ +
+ + + + + 隐私政策 + + /privacy/index.html + + 我们是谁
我们的站点地址是:https://blog.dlya.top。

评论
当访客留下评论时,我们会收集评论表单所显示的数据,和访客的IP地址及浏览器的user agent字符串来帮助检查垃圾评论。

由您的电子邮箱地址所生成的匿名化字符串(又称为哈希)可能会被提供给Gravatar服务确认您是否有使用该服务。Gravatar服务的隐私政策在此:https://automattic.com/privacy/。在您的评论获批准后,您的资料图片将在您的评论旁公开展示。

媒体
如果您向此网站上传图片,您应当避免上传那些有嵌入地理位置信息(EXIF GPS)的图片。此网站的访客将可以下载并提取此网站的图片中的位置信息。

Cookies
如果您在我们的站点上留下评论,您可以选择用cookies保存您的名字、电子邮箱地址和网站地址。这是通过让您可以不用在评论时再次填写相关内容而向您提供方便。这些cookies会保留一年。

如果您访问我们的登录页,我们会设置一个临时的cookie来确认您的浏览器是否接受cookies。此cookie不包含个人数据,且会在您关闭浏览器时被丢弃。

当您登录时,我们也会设置多个cookies来保存您的登录信息及屏幕显示选项。登录cookies会保留两天,而屏幕显示选项cookies会保留一年。如果您选择了“记住我”,您的登录状态则会保留两周。如果您注销登陆了您的账户,用于登录的cookies将会被移除。

如果您编辑或发布文章,我们会在您的浏览器中保存一个额外的cookie。这个cookie不包含个人数据而只记录了您刚才编辑的文章的ID。这个cookie会保留一天。

来自其他网站的嵌入内容
此站点上的文章可能会包含嵌入的内容(如视频、图片、文章等)。来自其他站点的嵌入内容的行为和您直接访问这些其他站点没有区别。

这些站点可能会收集关于您的数据、使用cookies、嵌入额外的第三方跟踪程序及监视您与这些嵌入内容的交互,包括在您有这些站点的账户并登录了这些站点时,跟踪您与嵌入内容的交互。

我们与谁共享您的信息
若您请求重置密码,您的IP地址将包含于密码重置邮件中。

我们保留多久您的信息
如果您留下评论,评论和其元数据将被无限期保存。我们这样做以便能识别并自动批准任何后续评论,而不用将这些后续评论加入待审队列。

对于本网站的注册用户,我们也会保存用户在个人资料中提供的个人信息。所有用户可以在任何时候查看、编辑或删除他们的个人信息(除了不能变更用户名外)、站点管理员也可以查看及编辑那些信息。

您对您的信息有什么权利
如果您有此站点的账户,或曾经留下评论,您可以请求我们提供我们所拥有的您的个人数据的导出文件,这也包括了所有您提供给我们的数据。您也可以要求我们抹除所有关于您的个人数据。这不包括我们因管理、法规或安全需要而必须保留的数据。

我们将您的信息发送到哪
访客评论可能会被自动垃圾评论监测服务检查。

]]>
+ +
+ + + + + + + /tags/index.html + + + + + + + + + 说说 + + /talk/index.html + +
]]>
+ +
+ + + + + 404 + + /archives/404/index.html + + 内容未找到

请尝试站内搜索~

]]>
+ +
+ + + + + 外链跳转收集 + + /archives/go_link/index.html + + 必应

云原神

哔哩哔哩

微博

网易云音乐

QQ音乐

]]>
+ +
+ + + +
diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..3d97352de --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,517 @@ + + + + + https://blog.dlya.top/posts/warn-domain/ + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/404.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/archives/higher_song.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/archives/yuanshen_ganyu.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/archives/yuanshen_zhongli.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/categories/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/copyright/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/essay/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/fcircle/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/link/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/privacy/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/tags/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/talk/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/archives/404/index.html + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/cloudreve-render/ + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/free-hosting/ + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/hexo-auto-deploy/ + + 2024-03-23 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/vercel_better_ip/ + + 2024-02-24 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/3coutryfun/ + + 2024-02-01 + + monthly + 0.6 + + + + https://blog.dlya.top/about/index.html + + 2024-01-30 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/vercel_short_link/ + + 2023-07-31 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/github_2fa/ + + 2023-06-26 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/hexo-auto-deploy-2/ + + 2023-06-03 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/vercel_github/ + + 2023-03-03 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/freenom_with_cloudflare/ + + 2023-01-19 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/2022.11.12/ + + 2022-11-13 + + monthly + 0.6 + + + + https://blog.dlya.top/posts/planetscale_ban/ + + 2022-08-12 + + monthly + 0.6 + + + + + https://blog.dlya.top/ + 2024-03-23 + daily + 1.0 + + + + + https://blog.dlya.top/tags/%E6%80%BB%E7%BB%93/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/%E9%AC%BC%E7%95%9C/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/IT/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Cloudreve/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Render/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/%E5%85%8D%E8%B4%B9%E7%BD%91%E7%AB%99%E6%89%98%E7%AE%A1/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/freenom/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/cloudflare/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/cloudflare-workers/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Github/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Protectcc/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/TOTP/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/2fa/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Hexo/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Vercel/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Netlify/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/GitHub/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/planetscale/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/%E5%B1%8F%E8%94%BD/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/%E6%9E%81%E5%9F%9F/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/vercel/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/IP/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/%E7%9F%AD%E9%93%BE%E6%8E%A5/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/Shorturl/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/tags/%E8%AD%A6%E5%91%8A/ + 2024-03-23 + weekly + 0.2 + + + + + + https://blog.dlya.top/categories/%E9%AC%BC%E7%95%9C/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/freenom/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/2fa/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/Hexo/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/Cloudreve/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/%E5%85%8D%E8%B4%B9/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/Vercel/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/%E8%AD%A6%E5%91%8A/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/2fa/Github/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/GitHub/ + 2024-03-23 + weekly + 0.2 + + + + https://blog.dlya.top/categories/IT/%E7%9F%AD%E9%93%BE%E6%8E%A5/ + 2024-03-23 + weekly + 0.2 + + + diff --git a/tags/2fa/index.html b/tags/2fa/index.html new file mode 100644 index 000000000..a5793aaaa --- /dev/null +++ b/tags/2fa/index.html @@ -0,0 +1,606 @@ +标签: 2fa | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Cloudreve/index.html b/tags/Cloudreve/index.html new file mode 100644 index 000000000..351211c48 --- /dev/null +++ b/tags/Cloudreve/index.html @@ -0,0 +1,606 @@ +标签: Cloudreve | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/GitHub/index.html b/tags/GitHub/index.html new file mode 100644 index 000000000..4a4d8d64a --- /dev/null +++ b/tags/GitHub/index.html @@ -0,0 +1,606 @@ +标签: GitHub | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Github/index.html b/tags/Github/index.html new file mode 100644 index 000000000..bb2b5e814 --- /dev/null +++ b/tags/Github/index.html @@ -0,0 +1,606 @@ +标签: Github | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Hexo/index.html b/tags/Hexo/index.html new file mode 100644 index 000000000..0013bd6ea --- /dev/null +++ b/tags/Hexo/index.html @@ -0,0 +1,606 @@ +标签: Hexo | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/IP/index.html b/tags/IP/index.html new file mode 100644 index 000000000..70a1ef25f --- /dev/null +++ b/tags/IP/index.html @@ -0,0 +1,606 @@ +标签: IP | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/IT/index.html b/tags/IT/index.html new file mode 100644 index 000000000..13fe19ba6 --- /dev/null +++ b/tags/IT/index.html @@ -0,0 +1,606 @@ +标签: IT | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Netlify/index.html b/tags/Netlify/index.html new file mode 100644 index 000000000..455e86057 --- /dev/null +++ b/tags/Netlify/index.html @@ -0,0 +1,606 @@ +标签: Netlify | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Protectcc/index.html b/tags/Protectcc/index.html new file mode 100644 index 000000000..e4da6a7cc --- /dev/null +++ b/tags/Protectcc/index.html @@ -0,0 +1,606 @@ +标签: Protectcc | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Render/index.html b/tags/Render/index.html new file mode 100644 index 000000000..82a5375af --- /dev/null +++ b/tags/Render/index.html @@ -0,0 +1,606 @@ +标签: Render | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Shorturl/index.html b/tags/Shorturl/index.html new file mode 100644 index 000000000..7530aae3c --- /dev/null +++ b/tags/Shorturl/index.html @@ -0,0 +1,606 @@ +标签: Shorturl | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/TOTP/index.html b/tags/TOTP/index.html new file mode 100644 index 000000000..e78be2508 --- /dev/null +++ b/tags/TOTP/index.html @@ -0,0 +1,606 @@ +标签: TOTP | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/Vercel/index.html b/tags/Vercel/index.html new file mode 100644 index 000000000..3eaaf281a --- /dev/null +++ b/tags/Vercel/index.html @@ -0,0 +1,606 @@ +标签: Vercel | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/cloudflare-workers/index.html b/tags/cloudflare-workers/index.html new file mode 100644 index 000000000..a1280c5ef --- /dev/null +++ b/tags/cloudflare-workers/index.html @@ -0,0 +1,606 @@ +标签: cloudflare workers | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/cloudflare/index.html b/tags/cloudflare/index.html new file mode 100644 index 000000000..913101c44 --- /dev/null +++ b/tags/cloudflare/index.html @@ -0,0 +1,606 @@ +标签: cloudflare | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/freenom/index.html b/tags/freenom/index.html new file mode 100644 index 000000000..d29cfd3b3 --- /dev/null +++ b/tags/freenom/index.html @@ -0,0 +1,606 @@ +标签: freenom | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 000000000..69ae4285e --- /dev/null +++ b/tags/index.html @@ -0,0 +1,606 @@ +光速大佬的小站 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/planetscale/index.html b/tags/planetscale/index.html new file mode 100644 index 000000000..b1edbadfb --- /dev/null +++ b/tags/planetscale/index.html @@ -0,0 +1,606 @@ +标签: planetscale | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tags/vercel/index.html b/tags/vercel/index.html new file mode 100644 index 000000000..cdd7f42cf --- /dev/null +++ b/tags/vercel/index.html @@ -0,0 +1,606 @@ +标签: vercel | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\345\205\215\350\264\271\347\275\221\347\253\231\346\211\230\347\256\241/index.html" "b/tags/\345\205\215\350\264\271\347\275\221\347\253\231\346\211\230\347\256\241/index.html" new file mode 100644 index 000000000..e32dc23a4 --- /dev/null +++ "b/tags/\345\205\215\350\264\271\347\275\221\347\253\231\346\211\230\347\256\241/index.html" @@ -0,0 +1,606 @@ +标签: 免费网站托管 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\345\261\217\350\224\275/index.html" "b/tags/\345\261\217\350\224\275/index.html" new file mode 100644 index 000000000..4ab29c91e --- /dev/null +++ "b/tags/\345\261\217\350\224\275/index.html" @@ -0,0 +1,606 @@ +标签: 屏蔽 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\346\200\273\347\273\223/index.html" "b/tags/\346\200\273\347\273\223/index.html" new file mode 100644 index 000000000..05595b301 --- /dev/null +++ "b/tags/\346\200\273\347\273\223/index.html" @@ -0,0 +1,606 @@ +标签: 总结 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\346\236\201\345\237\237/index.html" "b/tags/\346\236\201\345\237\237/index.html" new file mode 100644 index 000000000..cef8d5106 --- /dev/null +++ "b/tags/\346\236\201\345\237\237/index.html" @@ -0,0 +1,606 @@ +标签: 极域 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\347\237\255\351\223\276\346\216\245/index.html" "b/tags/\347\237\255\351\223\276\346\216\245/index.html" new file mode 100644 index 000000000..415bf57c7 --- /dev/null +++ "b/tags/\347\237\255\351\223\276\346\216\245/index.html" @@ -0,0 +1,606 @@ +标签: 短链接 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\350\255\246\345\221\212/index.html" "b/tags/\350\255\246\345\221\212/index.html" new file mode 100644 index 000000000..edd143507 --- /dev/null +++ "b/tags/\350\255\246\345\221\212/index.html" @@ -0,0 +1,606 @@ +标签: 警告 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git "a/tags/\351\254\274\347\225\234/index.html" "b/tags/\351\254\274\347\225\234/index.html" new file mode 100644 index 000000000..4cfbd17d0 --- /dev/null +++ "b/tags/\351\254\274\347\225\234/index.html" @@ -0,0 +1,606 @@ +标签: 鬼畜 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/talk/index.html b/talk/index.html new file mode 100644 index 000000000..493b045e9 --- /dev/null +++ b/talk/index.html @@ -0,0 +1,512 @@ +说说 | 光速大佬的小站 +
加载头像
引用到评论
\ No newline at end of file diff --git a/tencent4333377927167859929.txt b/tencent4333377927167859929.txt new file mode 100644 index 000000000..d75e7dd74 --- /dev/null +++ b/tencent4333377927167859929.txt @@ -0,0 +1 @@ +15454403188981923557