diff --git a/2023/07/24/php-unserialize/index.html b/2023/07/24/php-unserialize/index.html new file mode 100644 index 0000000..1d05b9b --- /dev/null +++ b/2023/07/24/php-unserialize/index.html @@ -0,0 +1,3404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PHP反序列化漏洞 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:p5ych

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/07/24/shell/index.html b/2023/07/24/shell/index.html new file mode 100644 index 0000000..2ce40ab --- /dev/null +++ b/2023/07/24/shell/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 服务器反弹shell - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:邓祺

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/07/26/tools/index.html b/2023/07/26/tools/index.html new file mode 100644 index 0000000..65baf99 --- /dev/null +++ b/2023/07/26/tools/index.html @@ -0,0 +1,3410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 二进制分析工具 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:antel0p3

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/07/27/bad-usb/index.html b/2023/07/27/bad-usb/index.html new file mode 100644 index 0000000..c365cd1 --- /dev/null +++ b/2023/07/27/bad-usb/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BadUSB制作教程 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:root

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/07/27/elf-file-format/index.html b/2023/07/27/elf-file-format/index.html new file mode 100644 index 0000000..2116603 --- /dev/null +++ b/2023/07/27/elf-file-format/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + elf文件格式解析 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:antel0p3

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/03/windows-pe/index.html b/2023/08/03/windows-pe/index.html new file mode 100644 index 0000000..6b8f2f6 --- /dev/null +++ b/2023/08/03/windows-pe/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + windows权限提升 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:D4wn

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/04/crypt-introduction/index.html b/2023/08/04/crypt-introduction/index.html new file mode 100644 index 0000000..9e70b3f --- /dev/null +++ b/2023/08/04/crypt-introduction/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Crypto入门 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:Keyboard

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/04/csrf/index.html b/2023/08/04/csrf/index.html new file mode 100644 index 0000000..7be4048 --- /dev/null +++ b/2023/08/04/csrf/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + csrf漏洞讲解与实战 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:Enc3l

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/04/fuzz-introduction/index.html b/2023/08/04/fuzz-introduction/index.html new file mode 100644 index 0000000..c845d41 --- /dev/null +++ b/2023/08/04/fuzz-introduction/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fuzz模糊测试系列分享(一)模糊测试简介 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:TBK

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/04/stack-overflow/index.html b/2023/08/04/stack-overflow/index.html new file mode 100644 index 0000000..a80ced5 --- /dev/null +++ b/2023/08/04/stack-overflow/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 安全机制与栈溢出基础 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:antel0p3

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/04/steganography/index.html b/2023/08/04/steganography/index.html new file mode 100644 index 0000000..2224cc0 --- /dev/null +++ b/2023/08/04/steganography/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 文件隐写 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:F0rga1n

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/04/xss-introduction/index.html b/2023/08/04/xss-introduction/index.html new file mode 100644 index 0000000..3b725e2 --- /dev/null +++ b/2023/08/04/xss-introduction/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xss漏洞原理基础与实战 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:cheng_xing

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/08/08/upload-file-introduvtion/index.html b/2023/08/08/upload-file-introduvtion/index.html new file mode 100644 index 0000000..e50dadb --- /dev/null +++ b/2023/08/08/upload-file-introduvtion/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 文件上传漏洞基础 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:mjc

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/10/14/fuzz-tester/index.html b/2023/10/14/fuzz-tester/index.html new file mode 100644 index 0000000..7755e52 --- /dev/null +++ b/2023/10/14/fuzz-tester/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fuzz模糊测试系列分享(二)手写一个模糊测试器 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:TBK

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/10/26/sql-bypass/index.html b/2023/10/26/sql-bypass/index.html new file mode 100644 index 0000000..572aa4f --- /dev/null +++ b/2023/10/26/sql-bypass/index.html @@ -0,0 +1,3410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL注入防御绕过方法(SQL bypass) - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:白玉京

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/10/27/logical-flaw/index.html b/2023/10/27/logical-flaw/index.html new file mode 100644 index 0000000..2904a21 --- /dev/null +++ b/2023/10/27/logical-flaw/index.html @@ -0,0 +1,3410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 逻辑漏洞和src小技巧 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:彦语

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/10/30/fuzz-libfuzz-introduction/index.html b/2023/10/30/fuzz-libfuzz-introduction/index.html new file mode 100644 index 0000000..71647e6 --- /dev/null +++ b/2023/10/30/fuzz-libfuzz-introduction/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fuzz模糊测试系列分享(三)libfuzz简介 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:TBK

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/02/fuzz-libfuzz-sourcecode/index.html b/2023/11/02/fuzz-libfuzz-sourcecode/index.html new file mode 100644 index 0000000..2378fbf --- /dev/null +++ b/2023/11/02/fuzz-libfuzz-sourcecode/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fuzz模糊测试系列分享(四)libfuzz源码解读 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:TBK

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/05/broken-access-control/index.html b/2023/11/05/broken-access-control/index.html new file mode 100644 index 0000000..7a5028c --- /dev/null +++ b/2023/11/05/broken-access-control/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 越权漏洞知识 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:白色键盘

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/14/ssti/index.html b/2023/11/14/ssti/index.html new file mode 100644 index 0000000..212fbda --- /dev/null +++ b/2023/11/14/ssti/index.html @@ -0,0 +1,3410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SSTI服务端模板注入 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:i3eg1nner

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/15/datacon/index.html b/2023/11/15/datacon/index.html new file mode 100644 index 0000000..4ca2816 --- /dev/null +++ b/2023/11/15/datacon/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataCon经验分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:MOUCHEN

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/20/iot-re/index.html b/2023/11/20/iot-re/index.html new file mode 100644 index 0000000..5fa898c --- /dev/null +++ b/2023/11/20/iot-re/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IoT:手把手带你复现两个漏洞 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:zer0_1s

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/21/robot-study/index.html b/2023/11/21/robot-study/index.html new file mode 100644 index 0000000..62aba59 --- /dev/null +++ b/2023/11/21/robot-study/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Robot学习经历分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:阳仔

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/11/23/iot-firmware/index.html b/2023/11/23/iot-firmware/index.html new file mode 100644 index 0000000..849a8c3 --- /dev/null +++ b/2023/11/23/iot-firmware/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 物联网固件仿真与漏洞挖掘基础思路 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:re1wn

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/12/01/hardswap-uniswap/index.html b/2023/12/01/hardswap-uniswap/index.html new file mode 100644 index 0000000..289e475 --- /dev/null +++ b/2023/12/01/hardswap-uniswap/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hardhat框架与Uniswap交易代码 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:流竹君雅

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/12/05/mevbot/index.html b/2023/12/05/mevbot/index.html new file mode 100644 index 0000000..fd9e4b7 --- /dev/null +++ b/2023/12/05/mevbot/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MEVBot Exploit - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:LCatro

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/12/11/iot-firmware-guide/index.html b/2023/12/11/iot-firmware-guide/index.html new file mode 100644 index 0000000..70df9e6 --- /dev/null +++ b/2023/12/11/iot-firmware-guide/index.html @@ -0,0 +1,3410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 物联网固件分析指南 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:gxh191

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/12/20/symbolic-execution/index.html b/2023/12/20/symbolic-execution/index.html new file mode 100644 index 0000000..61e4280 --- /dev/null +++ b/2023/12/20/symbolic-execution/index.html @@ -0,0 +1,3411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 简单了解符号执行 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:Celeste_GXB

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/12/20/upload-file-sp/index.html b/2023/12/20/upload-file-sp/index.html new file mode 100644 index 0000000..e776beb --- /dev/null +++ b/2023/12/20/upload-file-sp/index.html @@ -0,0 +1,3411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 文件上传另类应用 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:老梁

+ + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2023/12/27/v2x-introduction/index.html b/2023/12/27/v2x-introduction/index.html new file mode 100644 index 0000000..4bf024c --- /dev/null +++ b/2023/12/27/v2x-introduction/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 车联网安全入门分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:风间映川

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2024/01/07/postgraduate-job/index.html b/2024/01/07/postgraduate-job/index.html new file mode 100644 index 0000000..684ce7f --- /dev/null +++ b/2024/01/07/postgraduate-job/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 科普篇——关于考研、保研和找工作 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:rainki

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2024/01/18/nodejs/index.html b/2024/01/18/nodejs/index.html new file mode 100644 index 0000000..efe3cd0 --- /dev/null +++ b/2024/01/18/nodejs/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Node.js原型链污染 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:蒙面阿强

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2024/01/31/ssrf/index.html b/2024/01/31/ssrf/index.html new file mode 100644 index 0000000..feb02f6 --- /dev/null +++ b/2024/01/31/ssrf/index.html @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 从零开始的SSRF - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

分享人:i3g1nner

+ +
+ + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/2024/02/21/hello-world/index.html b/2024/02/21/hello-world/index.html new file mode 100644 index 0000000..a2bb199 --- /dev/null +++ b/2024/02/21/hello-world/index.html @@ -0,0 +1,3441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello World - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

+

Quick Start

Create a new post

1
$ hexo new "My New Post"
+ +

More info: Writing

+

Run server

1
$ hexo server
+ +

More info: Server

+

Generate static files

1
$ hexo generate
+ +

More info: Generating

+

Deploy to remote sites

1
$ hexo deploy
+ +

More info: Deployment

+

image-20240206015250320

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..cf38edb --- /dev/null +++ b/about/index.html @@ -0,0 +1,3270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 关于 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ +
+
+ + + + + + + + + + + + +
+
+

欢迎加入我们:343380539(QQ群),一起建立一个知识分享社群~

+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +

评论

+ + +
+ +
+ + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/07/index.html b/archives/2023/07/index.html new file mode 100644 index 0000000..8657077 --- /dev/null +++ b/archives/2023/07/index.html @@ -0,0 +1,3640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023/7 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:root + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:邓祺 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:p5ych + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/08/index.html b/archives/2023/08/index.html new file mode 100644 index 0000000..2e58bd2 --- /dev/null +++ b/archives/2023/08/index.html @@ -0,0 +1,3838 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023/8 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:mjc + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Keyboard + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Enc3l + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:F0rga1n + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:cheng_xing + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:D4wn + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/10/index.html b/archives/2023/10/index.html new file mode 100644 index 0000000..dc5ae26 --- /dev/null +++ b/archives/2023/10/index.html @@ -0,0 +1,3574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023/10 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:彦语 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:白玉京 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/11/index.html b/archives/2023/11/index.html new file mode 100644 index 0000000..c6e0138 --- /dev/null +++ b/archives/2023/11/index.html @@ -0,0 +1,3772 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023/11 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:re1wn + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:阳仔 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:zer0_1s + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:MOUCHEN + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3eg1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:白色键盘 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/12/index.html b/archives/2023/12/index.html new file mode 100644 index 0000000..a3b0746 --- /dev/null +++ b/archives/2023/12/index.html @@ -0,0 +1,3707 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023/12 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:风间映川 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Celeste_GXB + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:老梁 + + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:gxh191 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:LCatro + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:流竹君雅 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 0000000..fa8bc20 --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,3986 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:风间映川 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Celeste_GXB + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:老梁 + + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:gxh191 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:LCatro + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:流竹君雅 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:re1wn + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:阳仔 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:zer0_1s + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:MOUCHEN + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+
+ +

+ 1 / 3 +

+ + + +
+ + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/page/2/index.html b/archives/2023/page/2/index.html new file mode 100644 index 0000000..f91e774 --- /dev/null +++ b/archives/2023/page/2/index.html @@ -0,0 +1,3967 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3eg1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:白色键盘 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:彦语 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:白玉京 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:mjc + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Keyboard + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Enc3l + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2023/page/3/index.html b/archives/2023/page/3/index.html new file mode 100644 index 0000000..9acce3b --- /dev/null +++ b/archives/2023/page/3/index.html @@ -0,0 +1,3961 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2023 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:F0rga1n + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:cheng_xing + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:D4wn + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:root + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:邓祺 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:p5ych + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+
+ + + +

+ 3 / 3 +

+ +
+ + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html new file mode 100644 index 0000000..8314061 --- /dev/null +++ b/archives/2024/01/index.html @@ -0,0 +1,3508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2024/1 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3g1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:蒙面阿强 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:rainki + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2024/02/index.html b/archives/2024/02/index.html new file mode 100644 index 0000000..c5f4eec --- /dev/null +++ b/archives/2024/02/index.html @@ -0,0 +1,3368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2024/2 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. +Qu... + + +
+ +
+
+ + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/2024/index.html b/archives/2024/index.html new file mode 100644 index 0000000..f958803 --- /dev/null +++ b/archives/2024/index.html @@ -0,0 +1,3566 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive: 2024 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. +Qu... + + +
+ +
+
+ + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3g1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:蒙面阿强 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:rainki + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..ade286c --- /dev/null +++ b/archives/index.html @@ -0,0 +1,3848 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ +
+ + + + + + +

2024

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

2023

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 0000000..2cb2ec3 --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,3848 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ +
+ + + + + + +

2024

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

2023

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/page/3/index.html b/archives/page/3/index.html new file mode 100644 index 0000000..b2e0cd2 --- /dev/null +++ b/archives/page/3/index.html @@ -0,0 +1,3848 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ +
+ + + + + + +

2024

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

2023

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/archives/page/4/index.html b/archives/page/4/index.html new file mode 100644 index 0000000..ef57595 --- /dev/null +++ b/archives/page/4/index.html @@ -0,0 +1,3848 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archive - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ +
+ + + + + + +

2024

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

2023

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000..b4d729a --- /dev/null +++ b/categories/index.html @@ -0,0 +1,3222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 所有分类 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+ + +
+ +
+ + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git "a/categories/\347\244\276\345\214\272\345\210\206\344\272\253/index.html" "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/index.html" new file mode 100644 index 0000000..9f36f7b --- /dev/null +++ "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/index.html" @@ -0,0 +1,3989 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Category: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3g1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:蒙面阿强 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:rainki + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:风间映川 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Celeste_GXB + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:老梁 + + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:gxh191 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:LCatro + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:流竹君雅 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:re1wn + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+
+ +

+ 1 / 4 +

+ + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git "a/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/2/index.html" "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/2/index.html" new file mode 100644 index 0000000..1e9a106 --- /dev/null +++ "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/2/index.html" @@ -0,0 +1,3970 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Category: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+ + + +
+ + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:阳仔 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:zer0_1s + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:MOUCHEN + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3eg1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:白色键盘 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:彦语 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:白玉京 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+ + + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git "a/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/3/index.html" "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/3/index.html" new file mode 100644 index 0000000..bc7efd3 --- /dev/null +++ "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/3/index.html" @@ -0,0 +1,3970 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Category: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+ + + +
+ + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:mjc + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Keyboard + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Enc3l + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:TBK + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:F0rga1n + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:cheng_xing + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:D4wn + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:root + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+ + + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git "a/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/4/index.html" "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/4/index.html" new file mode 100644 index 0000000..9f15146 --- /dev/null +++ "b/categories/\347\244\276\345\214\272\345\210\206\344\272\253/page/4/index.html" @@ -0,0 +1,3516 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Category: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+ + + +
+ + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:antel0p3 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:邓祺 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:p5ych + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+
+ + + +

+ 4 / 4 +

+ +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/content.json b/content.json new file mode 100644 index 0000000..f3c1cec --- /dev/null +++ b/content.json @@ -0,0 +1 @@ +{"meta":{"title":"SecureNexusLab","subtitle":"","description":"专注于网络安全与知识分享","author":"SecureNexusLab","url":"http://example.com","root":"/"},"pages":[{"title":"","date":"2024-03-12T14:46:51.558Z","updated":"2024-02-09T02:32:39.673Z","comments":true,"path":"about/index.html","permalink":"http://example.com/about/index.html","excerpt":"","text":"欢迎加入我们:343380539(QQ群),一起建立一个知识分享社群~"},{"title":"所有分类","date":"2024-03-12T14:46:51.558Z","updated":"2024-02-13T02:49:29.393Z","comments":true,"path":"categories/index.html","permalink":"http://example.com/categories/index.html","excerpt":"","text":""},{"title":"SecureNexusLab团队","date":"2024-03-12T14:46:51.559Z","updated":"2024-02-09T04:49:22.225Z","comments":true,"path":"contributors/index.html","permalink":"http://example.com/contributors/index.html","excerpt":"近期成绩:edusrc 总提交漏洞数量: 97 | 江西财经大学、同济大学、辽宁交通学院等漏洞报送证书 | cnvd漏洞若干 | 漏洞盒子公益src月榜前15 | 百度src月榜23 | 在腾讯src、新氧src等企业安全应急响应中心提交过漏洞,目前主要精力在挖掘企业src | datacon 漏洞挖掘赛道第四名 | 多个物联网固件0day漏洞","text":"近期成绩:edusrc 总提交漏洞数量: 97 | 江西财经大学、同济大学、辽宁交通学院等漏洞报送证书 | cnvd漏洞若干 | 漏洞盒子公益src月榜前15 | 百度src月榜23 | 在腾讯src、新氧src等企业安全应急响应中心提交过漏洞,目前主要精力在挖掘企业src | datacon 漏洞挖掘赛道第四名 | 多个物联网固件0day漏洞","author":"SecureNexusLab"},{"title":"所有标签","date":"2024-03-12T14:46:51.559Z","updated":"2024-02-09T02:31:20.640Z","comments":true,"path":"tags/index.html","permalink":"http://example.com/tags/index.html","excerpt":"","text":""}],"posts":[{"title":"Hello World","slug":"hello-world","date":"2024-02-21T07:32:20.372Z","updated":"2024-02-09T02:16:18.393Z","comments":true,"path":"2024/02/21/hello-world/","permalink":"http://example.com/2024/02/21/hello-world/","excerpt":"","text":"Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment","categories":[],"tags":[],"author":"SecureNexusLab"},{"title":"从零开始的SSRF","slug":"ssrf","date":"2024-01-31T09:10:20.000Z","updated":"2024-02-09T11:03:11.079Z","comments":true,"path":"2024/01/31/ssrf/","permalink":"http://example.com/2024/01/31/ssrf/","excerpt":"","text":"分享人:i3g1nner","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"SSRF","slug":"SSRF","permalink":"http://example.com/tags/SSRF/"}],"author":"i3g1nner"},{"title":"Node.js原型链污染","slug":"nodejs","date":"2024-01-18T10:08:34.000Z","updated":"2024-02-09T11:02:32.248Z","comments":true,"path":"2024/01/18/nodejs/","permalink":"http://example.com/2024/01/18/nodejs/","excerpt":"","text":"分享人:蒙面阿强","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Node.js","slug":"Node-js","permalink":"http://example.com/tags/Node-js/"}],"author":"SecureNexusLab"},{"title":"科普篇——关于考研、保研和找工作","slug":"postgraduate-job","date":"2024-01-07T13:01:47.000Z","updated":"2024-02-09T11:01:09.566Z","comments":true,"path":"2024/01/07/postgraduate-job/","permalink":"http://example.com/2024/01/07/postgraduate-job/","excerpt":"","text":"分享人:rainki","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"科普","slug":"科普","permalink":"http://example.com/tags/%E7%A7%91%E6%99%AE/"}],"author":"SecureNexusLab"},{"title":"车联网安全入门分享","slug":"v2x-introduction","date":"2023-12-27T07:54:23.000Z","updated":"2024-02-09T10:51:59.832Z","comments":true,"path":"2023/12/27/v2x-introduction/","permalink":"http://example.com/2023/12/27/v2x-introduction/","excerpt":"","text":"分享人:风间映川","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"车联网安全","slug":"车联网安全","permalink":"http://example.com/tags/%E8%BD%A6%E8%81%94%E7%BD%91%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"简单了解符号执行","slug":"symbolic-execution","date":"2023-12-20T08:41:46.000Z","updated":"2024-02-09T10:34:15.530Z","comments":true,"path":"2023/12/20/symbolic-execution/","permalink":"http://example.com/2023/12/20/symbolic-execution/","excerpt":"","text":"分享人:Celeste_GXB","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"},{"name":"符号执行","slug":"符号执行","permalink":"http://example.com/tags/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C/"}],"author":"SecureNexusLab"},{"title":"文件上传另类应用","slug":"upload-file-sp","date":"2023-12-20T08:27:54.000Z","updated":"2024-02-09T10:32:11.308Z","comments":true,"path":"2023/12/20/upload-file-sp/","permalink":"http://example.com/2023/12/20/upload-file-sp/","excerpt":"","text":"分享人:老梁","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"文件上传","slug":"文件上传","permalink":"http://example.com/tags/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/"}],"author":"SecureNexusLab"},{"title":"物联网固件分析指南","slug":"iot-firmware-guide","date":"2023-12-11T03:04:19.000Z","updated":"2024-02-09T10:29:25.666Z","comments":true,"path":"2023/12/11/iot-firmware-guide/","permalink":"http://example.com/2023/12/11/iot-firmware-guide/","excerpt":"","text":"分享人:gxh191","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"MEVBot Exploit","slug":"mevbot","date":"2023-12-05T12:50:00.000Z","updated":"2024-02-09T10:06:21.014Z","comments":true,"path":"2023/12/05/mevbot/","permalink":"http://example.com/2023/12/05/mevbot/","excerpt":"","text":"分享人:LCatro","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"智能合约","slug":"智能合约","permalink":"http://example.com/tags/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/"}],"author":"SecureNexusLab"},{"title":"Hardhat框架与Uniswap交易代码","slug":"hardswap-uniswap","date":"2023-12-01T12:50:00.000Z","updated":"2024-02-09T10:04:19.716Z","comments":true,"path":"2023/12/01/hardswap-uniswap/","permalink":"http://example.com/2023/12/01/hardswap-uniswap/","excerpt":"","text":"分享人:流竹君雅","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"智能合约","slug":"智能合约","permalink":"http://example.com/tags/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/"}],"author":"SecureNexusLab"},{"title":"物联网固件仿真与漏洞挖掘基础思路","slug":"iot-firmware","date":"2023-11-23T13:00:00.000Z","updated":"2024-02-09T10:00:47.927Z","comments":true,"path":"2023/11/23/iot-firmware/","permalink":"http://example.com/2023/11/23/iot-firmware/","excerpt":"","text":"分享人:re1wn","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"Robot学习经历分享","slug":"robot-study","date":"2023-11-21T02:00:00.000Z","updated":"2024-02-09T09:32:48.608Z","comments":true,"path":"2023/11/21/robot-study/","permalink":"http://example.com/2023/11/21/robot-study/","excerpt":"","text":"分享人:阳仔","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"IoT:手把手带你复现两个漏洞","slug":"iot-re","date":"2023-11-20T02:30:00.000Z","updated":"2024-02-09T09:31:24.176Z","comments":true,"path":"2023/11/20/iot-re/","permalink":"http://example.com/2023/11/20/iot-re/","excerpt":"","text":"分享人:zer0_1s","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"DataCon经验分享","slug":"datacon","date":"2023-11-14T16:36:28.000Z","updated":"2024-02-09T09:28:19.901Z","comments":true,"path":"2023/11/15/datacon/","permalink":"http://example.com/2023/11/15/datacon/","excerpt":"","text":"分享人:MOUCHEN","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"DataCon","slug":"DataCon","permalink":"http://example.com/tags/DataCon/"}],"author":"SecureNexusLab"},{"title":"SSTI服务端模板注入","slug":"ssti","date":"2023-11-14T09:17:02.000Z","updated":"2024-02-09T09:27:05.664Z","comments":true,"path":"2023/11/14/ssti/","permalink":"http://example.com/2023/11/14/ssti/","excerpt":"","text":"分享人:i3eg1nner","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"SSTI","slug":"SSTI","permalink":"http://example.com/tags/SSTI/"}],"author":"SecureNexusLab"},{"title":"越权漏洞知识","slug":"broken-access-control","date":"2023-11-05T02:00:00.000Z","updated":"2024-02-09T09:24:51.122Z","comments":true,"path":"2023/11/05/broken-access-control/","permalink":"http://example.com/2023/11/05/broken-access-control/","excerpt":"","text":"分享人:白色键盘","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"Fuzz模糊测试系列分享(四)libfuzz源码解读","slug":"fuzz-libfuzz-sourcecode","date":"2023-11-02T02:00:00.000Z","updated":"2024-02-09T09:22:14.637Z","comments":true,"path":"2023/11/02/fuzz-libfuzz-sourcecode/","permalink":"http://example.com/2023/11/02/fuzz-libfuzz-sourcecode/","excerpt":"","text":"分享人:TBK","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"FUZZ","slug":"FUZZ","permalink":"http://example.com/tags/FUZZ/"}],"author":"SecureNexusLab"},{"title":"Fuzz模糊测试系列分享(三)libfuzz简介","slug":"fuzz-libfuzz-introduction","date":"2023-10-30T13:56:32.000Z","updated":"2024-02-09T09:17:50.062Z","comments":true,"path":"2023/10/30/fuzz-libfuzz-introduction/","permalink":"http://example.com/2023/10/30/fuzz-libfuzz-introduction/","excerpt":"","text":"分享人:TBK","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"FUZZ","slug":"FUZZ","permalink":"http://example.com/tags/FUZZ/"}],"author":"SecureNexusLab"},{"title":"逻辑漏洞和src小技巧","slug":"logical-flaw","date":"2023-10-27T15:12:10.000Z","updated":"2024-02-09T09:12:44.266Z","comments":true,"path":"2023/10/27/logical-flaw/","permalink":"http://example.com/2023/10/27/logical-flaw/","excerpt":"","text":"分享人:彦语","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"SRC","slug":"SRC","permalink":"http://example.com/tags/SRC/"}],"author":"SecureNexusLab"},{"title":"SQL注入防御绕过方法(SQL bypass)","slug":"sql-bypass","date":"2023-10-26T04:10:00.000Z","updated":"2024-02-09T09:10:05.401Z","comments":true,"path":"2023/10/26/sql-bypass/","permalink":"http://example.com/2023/10/26/sql-bypass/","excerpt":"","text":"分享人:白玉京","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"Bypass","slug":"Bypass","permalink":"http://example.com/tags/Bypass/"}],"author":"SecureNexusLab"},{"title":"Fuzz模糊测试系列分享(二)手写一个模糊测试器","slug":"fuzz-tester","date":"2023-10-14T08:22:32.000Z","updated":"2024-02-09T09:08:10.895Z","comments":true,"path":"2023/10/14/fuzz-tester/","permalink":"http://example.com/2023/10/14/fuzz-tester/","excerpt":"","text":"分享人:TBK","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"FUZZ","slug":"FUZZ","permalink":"http://example.com/tags/FUZZ/"}],"author":"SecureNexusLab"},{"title":"文件上传漏洞基础","slug":"upload-file-introduvtion","date":"2023-08-07T16:28:51.000Z","updated":"2024-02-09T05:27:18.474Z","comments":true,"path":"2023/08/08/upload-file-introduvtion/","permalink":"http://example.com/2023/08/08/upload-file-introduvtion/","excerpt":"","text":"分享人:mjc","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"Crypto入门","slug":"crypt-introduction","date":"2023-08-04T04:00:00.000Z","updated":"2024-02-09T05:19:19.707Z","comments":true,"path":"2023/08/04/crypt-introduction/","permalink":"http://example.com/2023/08/04/crypt-introduction/","excerpt":"","text":"分享人:Keyboard","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"密码学","slug":"密码学","permalink":"http://example.com/tags/%E5%AF%86%E7%A0%81%E5%AD%A6/"}],"author":"SecureNexusLab"},{"title":"csrf漏洞讲解与实战","slug":"csrf","date":"2023-08-04T04:00:00.000Z","updated":"2024-02-09T05:37:09.630Z","comments":true,"path":"2023/08/04/csrf/","permalink":"http://example.com/2023/08/04/csrf/","excerpt":"","text":"分享人:Enc3l","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"Fuzz模糊测试系列分享(一)模糊测试简介","slug":"fuzz-introduction","date":"2023-08-04T04:00:00.000Z","updated":"2024-02-09T09:06:05.250Z","comments":true,"path":"2023/08/04/fuzz-introduction/","permalink":"http://example.com/2023/08/04/fuzz-introduction/","excerpt":"","text":"分享人:TBK","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"FUZZ","slug":"FUZZ","permalink":"http://example.com/tags/FUZZ/"}],"author":"SecureNexusLab"},{"title":"安全机制与栈溢出基础","slug":"stack-overflow","date":"2023-08-04T04:00:00.000Z","updated":"2024-02-09T05:35:42.204Z","comments":true,"path":"2023/08/04/stack-overflow/","permalink":"http://example.com/2023/08/04/stack-overflow/","excerpt":"","text":"分享人:antel0p3","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"文件隐写","slug":"steganography","date":"2023-08-04T04:00:00.000Z","updated":"2024-02-09T05:29:45.748Z","comments":true,"path":"2023/08/04/steganography/","permalink":"http://example.com/2023/08/04/steganography/","excerpt":"","text":"分享人:F0rga1n","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"MISC","slug":"MISC","permalink":"http://example.com/tags/MISC/"}],"author":"SecureNexusLab"},{"title":"xss漏洞原理基础与实战","slug":"xss-introduction","date":"2023-08-04T04:00:00.000Z","updated":"2024-02-09T05:33:14.986Z","comments":true,"path":"2023/08/04/xss-introduction/","permalink":"http://example.com/2023/08/04/xss-introduction/","excerpt":"","text":"分享人:cheng_xing","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"windows权限提升","slug":"windows-pe","date":"2023-08-03T15:18:32.000Z","updated":"2024-02-09T05:16:10.731Z","comments":true,"path":"2023/08/03/windows-pe/","permalink":"http://example.com/2023/08/03/windows-pe/","excerpt":"","text":"分享人:D4wn","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Windows提权","slug":"Windows提权","permalink":"http://example.com/tags/Windows%E6%8F%90%E6%9D%83/"}],"author":"SecureNexusLab"},{"title":"BadUSB制作教程","slug":"bad-usb","date":"2023-07-26T16:10:52.000Z","updated":"2024-02-09T10:56:59.427Z","comments":true,"path":"2023/07/27/bad-usb/","permalink":"http://example.com/2023/07/27/bad-usb/","excerpt":"","text":"分享人:root","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"BadUSB","slug":"BadUSB","permalink":"http://example.com/tags/BadUSB/"}],"author":"SecureNexusLab"},{"title":"elf文件格式解析","slug":"elf-file-format","date":"2023-07-26T16:10:52.000Z","updated":"2024-02-09T05:12:43.955Z","comments":true,"path":"2023/07/27/elf-file-format/","permalink":"http://example.com/2023/07/27/elf-file-format/","excerpt":"","text":"分享人:antel0p3","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"二进制分析工具","slug":"tools","date":"2023-07-26T15:17:59.000Z","updated":"2024-02-09T05:13:29.589Z","comments":true,"path":"2023/07/26/tools/","permalink":"http://example.com/2023/07/26/tools/","excerpt":"","text":"分享人:antel0p3","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"},{"name":"工具","slug":"工具","permalink":"http://example.com/tags/%E5%B7%A5%E5%85%B7/"}],"author":"SecureNexusLab"},{"title":"服务器反弹shell","slug":"shell","date":"2023-07-24T02:18:47.000Z","updated":"2024-02-09T05:03:41.692Z","comments":true,"path":"2023/07/24/shell/","permalink":"http://example.com/2023/07/24/shell/","excerpt":"","text":"分享人:邓祺","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"}],"author":"SecureNexusLab"},{"title":"PHP反序列化漏洞","slug":"php-unserialize","date":"2023-07-23T17:04:04.000Z","updated":"2024-02-09T05:02:39.867Z","comments":true,"path":"2023/07/24/php-unserialize/","permalink":"http://example.com/2023/07/24/php-unserialize/","excerpt":"","text":"分享人:p5ych","categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"PHP","slug":"PHP","permalink":"http://example.com/tags/PHP/"}],"author":"SecureNexusLab"}],"categories":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/categories/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"}],"tags":[{"name":"社区分享","slug":"社区分享","permalink":"http://example.com/tags/%E7%A4%BE%E5%8C%BA%E5%88%86%E4%BA%AB/"},{"name":"Web安全","slug":"Web安全","permalink":"http://example.com/tags/Web%E5%AE%89%E5%85%A8/"},{"name":"SSRF","slug":"SSRF","permalink":"http://example.com/tags/SSRF/"},{"name":"Node.js","slug":"Node-js","permalink":"http://example.com/tags/Node-js/"},{"name":"科普","slug":"科普","permalink":"http://example.com/tags/%E7%A7%91%E6%99%AE/"},{"name":"车联网安全","slug":"车联网安全","permalink":"http://example.com/tags/%E8%BD%A6%E8%81%94%E7%BD%91%E5%AE%89%E5%85%A8/"},{"name":"二进制安全","slug":"二进制安全","permalink":"http://example.com/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8/"},{"name":"符号执行","slug":"符号执行","permalink":"http://example.com/tags/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C/"},{"name":"文件上传","slug":"文件上传","permalink":"http://example.com/tags/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/"},{"name":"智能合约","slug":"智能合约","permalink":"http://example.com/tags/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/"},{"name":"DataCon","slug":"DataCon","permalink":"http://example.com/tags/DataCon/"},{"name":"SSTI","slug":"SSTI","permalink":"http://example.com/tags/SSTI/"},{"name":"FUZZ","slug":"FUZZ","permalink":"http://example.com/tags/FUZZ/"},{"name":"SRC","slug":"SRC","permalink":"http://example.com/tags/SRC/"},{"name":"Bypass","slug":"Bypass","permalink":"http://example.com/tags/Bypass/"},{"name":"密码学","slug":"密码学","permalink":"http://example.com/tags/%E5%AF%86%E7%A0%81%E5%AD%A6/"},{"name":"MISC","slug":"MISC","permalink":"http://example.com/tags/MISC/"},{"name":"Windows提权","slug":"Windows提权","permalink":"http://example.com/tags/Windows%E6%8F%90%E6%9D%83/"},{"name":"BadUSB","slug":"BadUSB","permalink":"http://example.com/tags/BadUSB/"},{"name":"工具","slug":"工具","permalink":"http://example.com/tags/%E5%B7%A5%E5%85%B7/"},{"name":"PHP","slug":"PHP","permalink":"http://example.com/tags/PHP/"}]} \ No newline at end of file diff --git a/contributors/index.html b/contributors/index.html new file mode 100644 index 0000000..fb027b0 --- /dev/null +++ b/contributors/index.html @@ -0,0 +1,3913 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SecureNexusLab团队 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ +
+
+ + + + + + + + + +

近期成绩:
edusrc 总提交漏洞数量: 97 | 江西财经大学、同济大学、辽宁交通学院等漏洞报送证书 | cnvd漏洞若干 | 漏洞盒子公益src月榜前15 | 百度src月榜23 | 在腾讯src、新氧src等企业安全应急响应中心提交过漏洞,目前主要精力在挖掘企业src | datacon 漏洞挖掘赛道第四名 | 多个物联网固件0day漏洞

+ + + + + + + + + +

+ + + + + + + +
+ + + + +
+ +

评论

+ + +
+ +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/css/Readme.html b/css/Readme.html new file mode 100644 index 0000000..77d5e16 --- /dev/null +++ b/css/Readme.html @@ -0,0 +1,9 @@ +

样式文件说明

样式拆分说明

方案是对 https://blog.skk.moe/post/improve-fcp-for-my-blog/ 的开源实现

+

first.styl

首屏样式, 内含 首屏基础样式、 cover、 navbar、 首屏search、首屏暗黑模式、首屏字体 等样式, 首屏样式采用硬编码的方式写在HTML中.

+

内联硬编码自动化方案 see:scripts/helpers/first-style/index.js

+

style.styl

异步加载样式, 除首屏样式外的其他样式, 最终生成 /css/style.css 异步加载.

+

暗黑模式样式说明

暗黑模式样式被拆分为首屏暗黑模式样式和异步暗黑模式样式,其中在 source/css/ 文件夹下:

+

_first/dark_first.styl : 包含 首屏暗黑模式样式 的 暗黑模式 CSS 变量 和 强制覆盖样式

+

_style/_plugins/_dark : 异步暗黑模式样式文件夹

+

_style/_plugins/_dark/dark_async.styl : 包含 异步暗黑模式样式 的 暗黑模式 CSS 变量

+

_style/_plugins/_dark/dark_plugins.styl : 包含 异步暗黑模式样式 的 强制覆盖样式

diff --git a/css/first.css b/css/first.css new file mode 100644 index 0000000..5dd0fb3 --- /dev/null +++ b/css/first.css @@ -0,0 +1,1616 @@ +#safearea { + display: none; +} +:root { + --color-site-body: #f4f4f4; + --color-site-bg: #f4f4f4; + --color-site-inner: #fff; + --color-site-footer: #666; + --color-card: #fff; + --color-text: #444; + --color-block: #f6f6f6; + --color-inlinecode: #c74f00; + --color-codeblock: #fff7ea; + --color-h1: #3a3a3a; + --color-h2: #3a3a3a; + --color-h3: #333; + --color-h4: #444; + --color-h5: #555; + --color-h6: #666; + --color-p: #444; + --color-list: #666; + --color-list-hl: #30ad91; + --color-meta: #888; + --color-read-bkg: #e0d8c8; + --color-read-post: #f8f1e2; + --color-copyright-bkg: #f5f5f5; +} +* { + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + outline: none; + margin: 0; + padding: 0; +} +*::-webkit-scrollbar { + height: 4px; + width: 4px; +} +*::-webkit-scrollbar-track-piece { + background: transparent; +} +*::-webkit-scrollbar-thumb { + background: #3dd9b6; + cursor: pointer; + border-radius: 2px; + -webkit-border-radius: 2px; +} +*::-webkit-scrollbar-thumb:hover { + background: #ff5722; +} +html { + color: var(--color-text); + width: 100%; + height: 100%; + font-family: UbuntuMono, "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif; + font-size: 16px; +} +html >::-webkit-scrollbar { + height: 4px; + width: 4px; +} +html >::-webkit-scrollbar-track-piece { + background: transparent; +} +html >::-webkit-scrollbar-thumb { + background: #54b5a0 linear-gradient(45deg, rgba(255,255,255,0.4) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0.4) 75%, transparent 75%, transparent); + cursor: pointer; + border-radius: 2px; + -webkit-border-radius: 2px; +} +html >::-webkit-scrollbar-thumb:hover { + background: #54b5a0 linear-gradient(45deg, rgba(255,255,255,0.4) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0.4) 75%, transparent 75%, transparent); +} +body { + background-color: var(--color-site-body); + text-rendering: optimizelegibility; + -webkit-tap-highlight-color: rgba(0,0,0,0); + line-height: 1.6; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body.modal-active { + overflow: hidden; +} +@media screen and (max-width: 680px) { + body.modal-active { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + } +} +a { + color: #2092ec; + cursor: pointer; + text-decoration: none; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +a:hover { + color: #ff5722; +} +a:active, +a:hover { + outline: 0; +} +ul, +ol { + padding-left: 0; +} +ul li, +ol li { + list-style: none; +} +header { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +img { + border: 0; + background: none; + max-width: 100%; +} +svg:not(:root) { + overflow: hidden; +} +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + height: 0; + border: 0; + border-radius: 1px; + -webkit-border-radius: 1px; + border-bottom: 1px solid rgba(68,68,68,0.1); +} +button, +input { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; + text-transform: none; + -webkit-appearance: button; + cursor: pointer; +} +@supports (backdrop-filter: blur(20px)) { + .blur { + background: rgba(255,255,255,0.9) !important; + backdrop-filter: saturate(200%) blur(20px); + } +} +.shadow { + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); +} +.shadow.floatable { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.shadow.floatable:hover { + box-shadow: 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); + -webkit-box-shadow: 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); +} +#l_cover { + min-height: 64px; +} +.cover-wrapper { + top: 0; + left: 0; + max-width: 100%; + height: 100vh; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: nowrap; + -webkit-flex-wrap: nowrap; + -khtml-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: center; + align-self: center; + align-content: center; + color: var(--color-site-inner); + padding: 0 16px; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + position: relative; + overflow: hidden; + margin-bottom: -100px; +} +.cover-wrapper .cover-bg { + position: absolute; + width: 100%; + height: 100%; + background-position: center; + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; +} +.cover-wrapper .cover-bg.lazyload:not(.loaded) { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; +} +.cover-wrapper .cover-bg.lazyload.loaded { + animation-delay: 0s; + animation-duration: 0.5s; + animation-fill-mode: forwards; + animation-timing-function: ease-out; + animation-name: fadeIn; +} +@-moz-keyframes fadeIn { + 0% { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + filter: blur(12px); + transform: scale(1.02); + -webkit-transform: scale(1.02); + -khtml-transform: scale(1.02); + -moz-transform: scale(1.02); + -o-transform: scale(1.02); + -ms-transform: scale(1.02); + } + 100% { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + filter: blur(12px); + transform: scale(1.02); + -webkit-transform: scale(1.02); + -khtml-transform: scale(1.02); + -moz-transform: scale(1.02); + -o-transform: scale(1.02); + -ms-transform: scale(1.02); + } + 100% { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@-o-keyframes fadeIn { + 0% { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + filter: blur(12px); + transform: scale(1.02); + -webkit-transform: scale(1.02); + -khtml-transform: scale(1.02); + -moz-transform: scale(1.02); + -o-transform: scale(1.02); + -ms-transform: scale(1.02); + } + 100% { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@keyframes fadeIn { + 0% { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + filter: blur(12px); + transform: scale(1.02); + -webkit-transform: scale(1.02); + -khtml-transform: scale(1.02); + -moz-transform: scale(1.02); + -o-transform: scale(1.02); + -ms-transform: scale(1.02); + } + 100% { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +.cover-wrapper .cover-body { + z-index: 1; + position: relative; + width: 100%; + height: 100%; +} +.cover-wrapper#full { + height: calc(100vh + 100px); + padding-bottom: 100px; +} +.cover-wrapper#half { + max-height: 640px; + min-height: 400px; + height: calc(36vh - 64px + 200px); +} +.cover-wrapper #scroll-down { + width: 100%; + height: 64px; + position: absolute; + bottom: 100px; + text-align: center; + cursor: pointer; +} +.cover-wrapper #scroll-down .scroll-down-effects { + color: #fff; + font-size: 24px; + line-height: 64px; + position: absolute; + width: 24px; + left: calc(50% - 12px); + text-shadow: 0 1px 2px rgba(0,0,0,0.1); + animation: scroll-down-effect 1.5s infinite; + -webkit-animation: scroll-down-effect 1.5s infinite; + -khtml-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; +} +@-moz-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } + 50% { + top: -16px; + opacity: 0.4; + -webkit-opacity: 0.4; + -moz-opacity: 0.4; + } + 100% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@-webkit-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } + 50% { + top: -16px; + opacity: 0.4; + -webkit-opacity: 0.4; + -moz-opacity: 0.4; + } + 100% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@-o-keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } + 50% { + top: -16px; + opacity: 0.4; + -webkit-opacity: 0.4; + -moz-opacity: 0.4; + } + 100% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@keyframes scroll-down-effect { + 0% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } + 50% { + top: -16px; + opacity: 0.4; + -webkit-opacity: 0.4; + -moz-opacity: 0.4; + } + 100% { + top: 0; + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +.cover-wrapper .cover-body { + margin-top: 64px; + margin-bottom: 100px; +} +.cover-wrapper .cover-body, +.cover-wrapper .cover-body .top, +.cover-wrapper .cover-body .bottom { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: center; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + max-width: 100%; +} +.cover-wrapper .cover-body .bottom { + margin-top: 32px; +} +.cover-wrapper .cover-body .title { + font-family: "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Helvetica, monospace; + font-size: 3.125rem; + line-height: 1.2; + text-shadow: 0 1px 2px rgba(0,0,0,0.1); +} +.cover-wrapper .cover-body .subtitle { + font-size: 20px; +} +.cover-wrapper .cover-body .logo { + max-height: 120px; + max-width: calc(100% - 4 * 16px); +} +@media screen and (min-height: 1024px) { + .cover-wrapper .cover-body .title { + font-size: 3rem; + } + .cover-wrapper .cover-body .subtitle { + font-size: 1.05rem; + } + .cover-wrapper .cover-body .logo { + max-height: 150px; + } +} +.cover-wrapper .cover-body .m_search { + position: relative; + max-width: calc(100% - 16px); + width: 320px; + vertical-align: middle; +} +.cover-wrapper .cover-body .m_search .form { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + width: 100%; +} +.cover-wrapper .cover-body .m_search .icon, +.cover-wrapper .cover-body .m_search .input { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.cover-wrapper .cover-body .m_search .icon { + position: absolute; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + line-height: 2.5rem; + width: 32px; + top: 0; + left: 5px; + color: rgba(68,68,68,0.75); +} +.cover-wrapper .cover-body .m_search .input { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + height: 2.5rem; + width: 100%; + box-shadow: none; + -webkit-box-shadow: none; + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + font-size: 0.875rem; + -webkit-appearance: none; + padding-left: 36px; + border-radius: 1.4rem; + -webkit-border-radius: 1.4rem; + background: rgba(255,255,255,0.6); + backdrop-filter: blur(10px); + border: none; + color: var(--color-text); +} +@media screen and (max-width: 500px) { + .cover-wrapper .cover-body .m_search .input { + padding-left: 36px; + } +} +.cover-wrapper .cover-body .m_search .input:hover { + background: rgba(255,255,255,0.8); +} +.cover-wrapper .cover-body .m_search .input:focus { + background: #fff; +} +.cover-wrapper .list-h { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + align-items: stretch; + border-radius: 4px; + -webkit-border-radius: 4px; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +.cover-wrapper .list-h a { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -webkit-flex: 1 0; + -ms-flex: 1 0; + flex: 1 0; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + font-weight: 600; +} +.cover-wrapper .list-h a img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + border-radius: 2px; + -webkit-border-radius: 2px; + margin: 4px; + min-width: 40px; + max-width: 44px; +} +@media screen and (max-width: 768px) { + .cover-wrapper .list-h a img { + min-width: 36px; + max-width: 40px; + } +} +@media screen and (max-width: 500px) { + .cover-wrapper .list-h a img { + margin: 2px 4px; + min-width: 32px; + max-width: 36px; + } +} +@media screen and (max-width: 375px) { + .cover-wrapper .list-h a img { + min-width: 28px; + max-width: 32px; + } +} +.cover-wrapper { + max-width: 100%; +} +.cover-wrapper.search .bottom .menu { + margin-top: 16px; +} +.cover-wrapper.search .bottom .menu .list-h a { + white-space: nowrap; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + align-items: baseline; + padding: 2px; + margin: 4px; + color: var(--color-site-inner); + opacity: 0.75; + -webkit-opacity: 0.75; + -moz-opacity: 0.75; + text-shadow: 0 1px 2px rgba(0,0,0,0.05); + border-bottom: 2px solid transparent; +} +.cover-wrapper.search .bottom .menu .list-h a i { + margin-right: 4px; +} +.cover-wrapper.search .bottom .menu .list-h a p { + font-size: 0.9375rem; +} +.cover-wrapper.search .bottom .menu .list-h a:hover, +.cover-wrapper.search .bottom .menu .list-h a.active, +.cover-wrapper.search .bottom .menu .list-h a:active { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + border-bottom: 2px solid var(--color-site-inner); +} +.cover-wrapper.dock .menu, +.cover-wrapper.featured .menu, +.cover-wrapper.focus .menu { + border-radius: 6px; + -webkit-border-radius: 6px; +} +.cover-wrapper.dock .menu .list-h a, +.cover-wrapper.featured .menu .list-h a, +.cover-wrapper.focus .menu .list-h a { + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: center; + padding: 12px; + line-height: 24px; + border-radius: 4px; + -webkit-border-radius: 4px; + border-bottom: none; + text-align: center; + align-content: flex-end; + color: rgba(68,68,68,0.7); + font-size: 1.5rem; +} +@media screen and (max-width: 500px) { + .cover-wrapper.dock .menu .list-h a, + .cover-wrapper.featured .menu .list-h a, + .cover-wrapper.focus .menu .list-h a { + padding: 12px 8px; + } +} +.cover-wrapper.dock .menu .list-h a i, +.cover-wrapper.featured .menu .list-h a i, +.cover-wrapper.focus .menu .list-h a i { + margin: 8px; +} +.cover-wrapper.dock .menu .list-h a p, +.cover-wrapper.featured .menu .list-h a p, +.cover-wrapper.focus .menu .list-h a p { + font-size: 0.875rem; +} +.cover-wrapper.dock .menu .list-h a.active, +.cover-wrapper.featured .menu .list-h a.active, +.cover-wrapper.focus .menu .list-h a.active { + background: var(--color-card); + backdrop-filter: none; +} +.cover-wrapper.dock .menu .list-h a.active i, +.cover-wrapper.featured .menu .list-h a.active i, +.cover-wrapper.focus .menu .list-h a.active i, +.cover-wrapper.dock .menu .list-h a.active i+p, +.cover-wrapper.featured .menu .list-h a.active i+p, +.cover-wrapper.focus .menu .list-h a.active i+p { + color: #3dd9b6; +} +.cover-wrapper.dock .menu .list-h a.active img+p, +.cover-wrapper.featured .menu .list-h a.active img+p, +.cover-wrapper.focus .menu .list-h a.active img+p { + color: var(--color-text); +} +.cover-wrapper.dock .menu .list-h a:hover, +.cover-wrapper.featured .menu .list-h a:hover, +.cover-wrapper.focus .menu .list-h a:hover { + background: var(--color-card); +} +.cover-wrapper.dock .top { + margin-bottom: 48px; +} +.cover-wrapper.dock .menu { + background: rgba(255,255,255,0.5); + position: absolute; + bottom: 0; + max-width: 100%; +} +.cover-wrapper.dock .menu .list-h { + flex-wrap: nowrap; + -webkit-flex-wrap: nowrap; + -khtml-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + margin: 4px; +} +.cover-wrapper.dock .menu .list-h a+a { + margin-left: 4px; +} +@media screen and (max-width: 500px) { + .cover-wrapper.dock .menu .list-h { + overflow-x: scroll; + } + .cover-wrapper.dock .menu .list-h::-webkit-scrollbar { + height: 0; + width: 0; + } + .cover-wrapper.dock .menu .list-h::-webkit-scrollbar-track-piece { + background: transparent; + } + .cover-wrapper.dock .menu .list-h::-webkit-scrollbar-thumb { + background: #3dd9b6; + cursor: pointer; + border-radius: 0; + -webkit-border-radius: 0; + } + .cover-wrapper.dock .menu .list-h::-webkit-scrollbar-thumb:hover { + background: #ff5722; + } +} +@supports (backdrop-filter: blur(20px)) { + .cover-wrapper.dock .menu { + background: rgba(255,255,255,0.5); + backdrop-filter: saturate(200%) blur(20px); + } +} +@font-face { + font-family: 'UbuntuMono'; + src: url("https://unpkg.com/volantis-static@0.0.1654736714924/media/fonts/UbuntuMono/UbuntuMono-Regular.ttf"); + font-weight: 'normal'; + font-style: 'normal'; + font-display: swap; +} +@font-face { + font-family: 'Varela Round'; + src: url("https://unpkg.com/volantis-static@0.0.1654736714924/media/fonts/VarelaRound/VarelaRound-Regular.ttf"); + font-weight: 'normal'; + font-style: 'normal'; + font-display: swap; +} +.l_header { + position: fixed; + z-index: 1000; + top: 0; + width: 100%; + height: 64px; + background: var(--color-card); + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); +} +.l_header.auto { + transition: opacity 0.4s ease; + -webkit-transition: opacity 0.4s ease; + -khtml-transition: opacity 0.4s ease; + -moz-transition: opacity 0.4s ease; + -o-transition: opacity 0.4s ease; + -ms-transition: opacity 0.4s ease; + visibility: hidden; +} +.l_header.auto.show { + opacity: 1 !important; + -webkit-opacity: 1 !important; + -moz-opacity: 1 !important; + visibility: visible; +} +.l_header .container { + margin-left: 16px; + margin-right: 16px; +} +.l_header #wrapper { + height: 100%; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +.l_header #wrapper .nav-main, +.l_header #wrapper .nav-sub { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: nowrap; + -webkit-flex-wrap: nowrap; + -khtml-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + align-items: center; +} +.l_header #wrapper .nav-main { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.l_header #wrapper.sub .nav-main { + transform: translateY(-64px); + -webkit-transform: translateY(-64px); + -khtml-transform: translateY(-64px); + -moz-transform: translateY(-64px); + -o-transform: translateY(-64px); + -ms-transform: translateY(-64px); +} +.l_header #wrapper .nav-sub { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + height: 64px; + width: calc(100% - 2 * 16px); + position: absolute; +} +.l_header #wrapper .nav-sub ::-webkit-scrollbar { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +@media screen and (min-width: 2048px) { + .l_header #wrapper .nav-sub { + max-width: 55vw; + margin: auto; + } +} +.l_header #wrapper.sub .nav-sub { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; +} +.l_header #wrapper .title { + position: relative; + color: var(--color-text); + padding-left: 24px; + max-height: 64px; +} +.l_header #wrapper .nav-main .title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 0; + line-height: 64px; + padding: 0 24px; + font-size: 1.25rem; + font-family: "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Helvetica, monospace; +} +.l_header #wrapper .nav-main .title img { + height: 64px; +} +.l_header .nav-sub { + max-width: 1080px; + margin: auto; +} +.l_header .nav-sub .title { + font-weight: bold; + font-family: UbuntuMono, "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif; + line-height: 1.2; + max-height: 64px; + white-space: normal; + flex-shrink: 1; +} +.l_header .switcher { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + line-height: 64px; + align-items: center; +} +.l_header .switcher .s-toc { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +@media screen and (max-width: 768px) { + .l_header .switcher .s-toc { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + } +} +.l_header .switcher >li { + height: 48px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + margin: 2px; +} +@media screen and (max-width: 500px) { + .l_header .switcher >li { + margin: 0 1px; + height: 48px; + } +} +.l_header .switcher >li >a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + align-items: center; + width: 48px; + height: 48px; + padding: 0.85em 1.1em; + border-radius: 100px; + -webkit-border-radius: 100px; + border: none; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + color: #3dd9b6; +} +.l_header .switcher >li >a:hover { + border: none; +} +.l_header .switcher >li >a.active, +.l_header .switcher >li >a:active { + border: none; + background: var(--color-site-bg); +} +@media screen and (max-width: 500px) { + .l_header .switcher >li >a { + width: 36px; + height: 48px; + } +} +.l_header .nav-sub .switcher { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; +} +.l_header .m_search { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + height: 64px; + width: 240px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +@media screen and (max-width: 1024px) { + .l_header .m_search { + width: 44px; + min-width: 44px; + } + .l_header .m_search input::placeholder { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + } + .l_header .m_search:hover { + width: 240px; + } + .l_header .m_search:hover input::placeholder { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@media screen and (min-width: 500px) { + .l_header .m_search:hover .input { + width: 100%; + } + .l_header .m_search:hover .input::placeholder { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +@media screen and (max-width: 500px) { + .l_header .m_search { + min-width: 0; + } + .l_header .m_search input::placeholder { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + } +} +.l_header .m_search .form { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + width: 100%; + align-items: center; +} +.l_header .m_search .icon { + position: absolute; + width: 36px; + left: 5px; + color: var(--color-meta); +} +@media screen and (max-width: 500px) { + .l_header .m_search .icon { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + } +} +.l_header .m_search .input { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + padding-top: 8px; + padding-bottom: 8px; + line-height: 1.3; + width: 100%; + color: var(--color-text); + background: #fafafa; + box-shadow: none; + -webkit-box-shadow: none; + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + padding-left: 40px; + font-size: 0.875rem; + border-radius: 8px; + -webkit-border-radius: 8px; + border: none; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +@media screen and (min-width: 500px) { + .l_header .m_search .input:focus { + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1); + } +} +@media screen and (max-width: 500px) { + .l_header .m_search .input { + background: var(--color-block); + padding-left: 8px; + border: none; + } + .l_header .m_search .input:hover, + .l_header .m_search .input:focus { + border: none; + } +} +@media (max-width: 500px) { + .l_header .m_search { + left: 0; + width: 0; + overflow: hidden; + position: absolute; + background: #fff; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + } + .l_header .m_search .input { + border-radius: 32px; + -webkit-border-radius: 32px; + margin-left: 16px; + padding-left: 16px; + } + .l_header.z_search-open .m_search { + width: 100%; + } + .l_header.z_search-open .m_search .input { + width: calc(100% - 120px); + } +} +ul.m-pc >li>a { + color: inherit; + border-bottom: 2px solid transparent; +} +ul.m-pc >li>a:active, +ul.m-pc >li>a.active { + border-bottom: 2px solid #3dd9b6; +} +ul.m-pc li:hover >ul.list-v, +ul.list-v li:hover >ul.list-v { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +ul.nav-list-h { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-items: stretch; +} +ul.nav-list-h>li { + position: relative; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + height: 100%; + line-height: 2.4; + border-radius: 4px; + -webkit-border-radius: 4px; +} +ul.nav-list-h>li >a { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-weight: 600; +} +ul.list-v { + z-index: 1; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + position: absolute; + background: var(--color-card); + box-shadow: 0 2px 4px 0px rgba(0,0,0,0.08), 0 4px 8px 0px rgba(0,0,0,0.08), 0 8px 16px 0px rgba(0,0,0,0.08); + -webkit-box-shadow: 0 2px 4px 0px rgba(0,0,0,0.08), 0 4px 8px 0px rgba(0,0,0,0.08), 0 8px 16px 0px rgba(0,0,0,0.08); + margin-top: -6px; + border-radius: 4px; + -webkit-border-radius: 4px; + padding: 8px 0; +} +ul.list-v.show { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +ul.list-v hr { + margin-top: 8px; + margin-bottom: 8px; +} +ul.list-v >li { + white-space: nowrap; + word-break: keep-all; +} +ul.list-v >li.header { + font-size: 0.78125rem; + font-weight: bold; + line-height: 2em; + color: var(--color-meta); + margin: 8px 16px 4px; +} +ul.list-v >li.header i { + margin-right: 8px; +} +ul.list-v >li ul { + margin-left: 0; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + margin-top: -40px; +} +ul.list-v .aplayer-container { + min-height: 64px; + padding: 6px 16px; +} +ul.list-v >li>a { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + color: var(--color-list); + font-size: 0.875rem; + font-weight: bold; + line-height: 36px; + padding: 0 20px 0 16px; + text-overflow: ellipsis; + margin: 0 4px; + border-radius: 4px; + -webkit-border-radius: 4px; +} +@media screen and (max-width: 1024px) { + ul.list-v >li>a { + line-height: 40px; + } +} +ul.list-v >li>a >i { + margin-right: 8px; +} +ul.list-v >li>a:active, +ul.list-v >li>a.active { + color: var(--color-list-hl); +} +ul.list-v >li>a:hover { + color: var(--color-list-hl); + background: var(--color-site-bg); +} +.l_header .menu >ul>li>a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + padding: 0 8px; +} +.l_header .menu >ul>li>a >i { + margin-right: 4px; +} +.l_header ul.nav-list-h>li { + color: var(--color-list); + line-height: 64px; +} +.l_header ul.nav-list-h>li >a { + max-height: 64px; + overflow: hidden; + color: inherit; +} +.l_header ul.nav-list-h>li >a:active, +.l_header ul.nav-list-h>li >a.active { + color: #3dd9b6; +} +.l_header ul.nav-list-h>li:hover>a { + color: var(--color-list-hl); +} +.l_header ul.nav-list-h>li i.music { + animation: rotate-effect 1.5s linear infinite; + -webkit-animation: rotate-effect 1.5s linear infinite; + -khtml-animation: rotate-effect 1.5s linear infinite; + -moz-animation: rotate-effect 1.5s linear infinite; + -o-animation: rotate-effect 1.5s linear infinite; + -ms-animation: rotate-effect 1.5s linear infinite; +} +@-moz-keyframes rotate-effect { + 0% { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + } + 25% { + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -khtml-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + } + 50% { + transform: rotate(180deg); + -webkit-transform: rotate(180deg); + -khtml-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + } + 75% { + transform: rotate(270deg); + -webkit-transform: rotate(270deg); + -khtml-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + } + 100% { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +@-webkit-keyframes rotate-effect { + 0% { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + } + 25% { + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -khtml-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + } + 50% { + transform: rotate(180deg); + -webkit-transform: rotate(180deg); + -khtml-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + } + 75% { + transform: rotate(270deg); + -webkit-transform: rotate(270deg); + -khtml-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + } + 100% { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +@-o-keyframes rotate-effect { + 0% { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + } + 25% { + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -khtml-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + } + 50% { + transform: rotate(180deg); + -webkit-transform: rotate(180deg); + -khtml-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + } + 75% { + transform: rotate(270deg); + -webkit-transform: rotate(270deg); + -khtml-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + } + 100% { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +@keyframes rotate-effect { + 0% { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + } + 25% { + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -khtml-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + } + 50% { + transform: rotate(180deg); + -webkit-transform: rotate(180deg); + -khtml-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + } + 75% { + transform: rotate(270deg); + -webkit-transform: rotate(270deg); + -khtml-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + } + 100% { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +.menu-phone li ul.list-v { + right: calc(100% - 0.5 * 16px); +} +.menu-phone li ul.list-v ul { + right: calc(100% - 0.5 * 16px); +} +#wrapper { + max-width: 1080px; + margin: auto; +} +@media screen and (min-width: 2048px) { + #wrapper { + max-width: 55vw; + } +} +#wrapper .menu { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -webkit-flex: 1 1; + -ms-flex: 1 1; + flex: 1 1; + margin: 0 16px 0 0; +} +#wrapper .menu .list-v ul { + left: calc(100% - 0.5 * 16px); +} +.menu-phone { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + margin-top: 16px; + right: 8px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.menu-phone ul { + right: calc(100% - 0.5 * 16px); +} +@media screen and (max-width: 500px) { + .menu-phone { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + } +} +.l_header { + max-width: 65vw; + left: calc((100% - 65vw) * 0.5); + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; +} +@media screen and (max-width: 2048px) { + .l_header { + max-width: 1112px; + left: calc((100% - 1112px) * 0.5); + } +} +@media screen and (max-width: 1112px) { + .l_header { + left: 0; + border-radius: 0; + -webkit-border-radius: 0; + max-width: 100%; + } +} +@media screen and (max-width: 500px) { + .l_header .container { + margin-left: 0; + margin-right: 0; + } + .l_header #wrapper .nav-main .title { + padding-left: 16px; + padding-right: 16px; + } + .l_header #wrapper .nav-sub { + width: 100%; + } + .l_header #wrapper .nav-sub .title { + overflow-y: scroll; + margin-top: 2px; + padding: 8px 16px; + } + .l_header #wrapper .switcher { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + margin-right: 8px; + } + .l_header .menu { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + } +} +@media screen and (max-width: 500px) { + .list-v li { + max-width: 270px; + } +} +#u-search { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 60px 20px; + z-index: 1001; +} +@media screen and (max-width: 680px) { + #u-search { + padding: 0px; + } +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..9d0cf1d --- /dev/null +++ b/css/style.css @@ -0,0 +1,6868 @@ +#safearea { + display: block; +} +:root { + --block-hover: #ededed; + --text-p1: #222; + --text-p3: #777; + --card: #fff; +} +::-moz-selection { + background: rgba(33,150,243,0.2); +} +::selection { + background: rgba(33,150,243,0.2); +} +h1 { + font-size: 1.5rem; +} +h2 { + font-size: 1.5rem; +} +h3 { + font-size: 1.25rem; +} +h4 { + font-size: 1.125rem; +} +h5 { + font-size: 1rem; +} +h6 { + font-size: 1rem; +} +h1, +h2, +h3, +h4, +h6 { + font-weight: normal; +} +a:not([href]) { + cursor: default; +} +pre { + tab-size: 4; + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; +} +.clearfix { + zoom: 1; +} +.clearfix:before, +.clearfix:after { + content: " "; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: table; +} +.clearfix:after { + clear: both; +} +.hidden { + text-indent: -9999px; + visibility: hidden; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +.inner { + position: relative; + width: 80%; + max-width: 710px; + margin: 0 auto; +} +.vertical { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: table-cell; + vertical-align: middle; +} +article, +aside, +details, +figcaption, +figure, +footer, +hgroup, +main, +menu, +nav, +section, +summary { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +article { + overflow: hidden; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 50%; + line-height: 1em; +} +sup { + vertical-align: text-top; +} +sub { + vertical-align: text-bottom; +} +figure { + margin: 1em 40px; +} +pre { + overflow: auto; +} +span.dot, +span.sep { + font-size: 0.9em; + margin: 0 0.2rem; +} +span.dot:before { + content: '·'; +} +span.sep:before { + content: '/'; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +optgroup, +select, +textarea { + color: inherit /* 1 */; + font: inherit /* 2 */; + margin: 0 /* 3 */; +} +select { + text-transform: none; +} +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button /* 2 */; + cursor: pointer /* 3 */; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box /* 1 */; + -webkit-box-sizing: border-box /* 1 */; + -moz-box-sizing: border-box /* 1 */; + padding: 0 /* 2 */; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield /* 1 */; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box /* 2 */; + box-sizing: content-box; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0 /* 1 */; + padding: 0 /* 2 */; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table:not([class]) { + border-collapse: collapse; + overflow: auto; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + max-width: 100%; + vertical-align: text-top; +} +table:not([class]) th { + background-color: #f1f1f1; +} +table:not([class]) td, +table:not([class]) th { + padding: 8px 16px; + border: 2px solid #f1f1f1; + line-height: 1.5; + font-size: 90%; +} +table:not([class]) tr { + word-break: keep-all; + background-color: #fefefe; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +table:not([class]) tr:hover { + background-color: #f1f1f1; +} +td, +th { + padding: 0; +} +article#arc, +article#cat, +article#tag { + padding-top: 48px; + padding-bottom: 48px; +} +article#arc h2, +article#cat h2, +article#tag h2 { + font-weight: 600; +} +article#arc h2:first-child, +article#cat h2:first-child, +article#tag h2:first-child { + margin-top: 0; +} +article#arc { + margin-bottom: 32px; + padding-bottom: 64px; +} +article#arc .timenode:before, +article#arc .timenode:after { + margin-left: 12px; +} +article#arc .timenode .meta { + padding: 6px 0; + line-height: 1.5; + height: auto; + max-width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + font-size: 0.9375rem; + font-weight: 500; + border-radius: 2px; + -webkit-border-radius: 2px; + color: var(--color-list); +} +article#arc .timenode .meta:before { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +article#arc .timenode .meta:after { + margin-left: 14px; +} +article#arc .timenode .meta:hover { + color: var(--color-p); + background: var(--color-site-bg); +} +article#arc .timenode .meta time { + color: var(--color-meta); + margin-left: 34px; + margin-right: 4px; + flex-shrink: 0; + width: 60px; +} +article#arc .timenode .meta i { + line-height: 1.5; + color: #ff5722; +} +article#arc .timenode .meta i.red { + color: #fe5f58; +} +article#arc .timenode .meta i.green { + color: #3dc550; +} +article#arc .timenode .meta i.yellow { + color: #ffbd2b; +} +article#arc .timenode .meta i.blue { + color: #1bcdfc; +} +article#arc .timenode .meta i.theme { + color: #3dd9b6; +} +article#arc .timenode .meta i.accent { + color: #ff5722; +} +article#arc .timenode .meta i.orange { + color: #ff5722; +} +article#cat .all-cats a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + padding: 8px 16px; + border-radius: 4px; + -webkit-border-radius: 4px; + color: var(--color-list); + font-size: 0.9375rem; + font-weight: 500; +} +article#cat .all-cats a:hover { + color: var(--color-list-hl); + background: var(--color-site-bg); +} +article#cat .all-cats a.child { + padding-left: 48px; +} +article#tag .all-tags { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + align-items: flex-start; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; + align-items: baseline; + text-align: center; +} +article#tag .all-tags ul { + margin: 0 -8px; + padding: 0; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; +} +article#tag .all-tags ul li { + list-style: none; + margin: 8px; + border-radius: 4px; + -webkit-border-radius: 4px; + overflow: hidden; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + position: relative; + font-size: 0.9375rem; +} +article#tag .all-tags ul li a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + color: var(--color-list); + padding: 4px 52px 4px 16px; + background: var(--color-block); + font-weight: 500; +} +article#tag .all-tags ul li a:hover { + background: #ff5722; + color: #fff; +} +article#tag .all-tags ul li span { + color: var(--color-meta); + background: var(--color-card); + padding: 2px 8px; + border-radius: 2px; + -webkit-border-radius: 2px; + pointer-events: none; + position: absolute; + right: 2px; + top: 2px; + height: calc(100% - 4px); +} +article#tag .all-tags ul li span:before { + content: 'x'; +} +.article { + color: var(--color-p); + word-wrap: break-word; +} +.article a { + word-break: break-word; +} +.article h1.title, +.article h2.title { + left: 0; +} +.article h1.title:before, +.article h2.title:before { + content: none; +} +.article h1, +.article h2 { + padding-bottom: 0.2rem; + margin-bottom: 1rem; + border-bottom: 1px solid rgba(68,68,68,0.1); +} +.article h1 { + text-align: left; + color: var(--color-h1); + margin-top: 48px; +} +.article h2 { + text-align: left; + color: var(--color-h2); + margin-top: 48px; +} +.article h3 { + text-align: left; + color: var(--color-h3); + margin-top: 24px; +} +.article h4 { + text-align: left; + color: var(--color-h4); + margin-top: 16px; +} +.article h5 { + font-weight: bold; + color: var(--color-h5); + margin-top: 1em; +} +.article h6 { + color: var(--color-h6); + margin-top: 1em; +} +.article center, +.article center p { + text-align: center; +} +.article .aplayer { + margin: 1em 0; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + width: 400px; + max-width: 100%; + border-radius: 4px; + -webkit-border-radius: 4px; + color: #666; +} +.article p.small-img img, +.article div.small-img img { + width: auto; + max-width: 100%; + margin: 0; + box-shadow: none; + -webkit-box-shadow: none; +} +.article s { + color: #8e8e8e; + text-decoration-color: #8e8e8e; +} +.article p { + margin-top: 1em; + margin-bottom: 1em; + text-align: justify; + max-width: 100%; + line-height: inherit; +} +.article .subtitle h6 { + color: rgba(68,68,68,0.9); +} +.article figure figcaption span { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + margin-right: 5px; +} +.article blockquote { + background: var(--color-block); + border-left: 4px solid #3dd9b6; + border-radius: 4px; + -webkit-border-radius: 4px; +} +.article blockquote { + position: relative; + width: 100%; + padding: 16px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.article blockquote, +.article blockquote p, +.article blockquote ul, +.article blockquote ol { + text-align: left; + word-wrap: normal; + font-size: 0.9375rem; + margin-top: 0.5em; + margin-bottom: 0.5em; +} +.article blockquote footer { + padding: 0; + text-align: justify; + color: inherit; + font-style: italic; + margin: 1em 0; +} +.article blockquote footer cite { + color: var(--color-meta); + margin-left: 1em; +} +.article blockquote footer cite::before { + content: '----'; + padding: 0 0.3em; +} +.article blockquote.pullquote.right { + border-left: none; + border-right: 4px solid #3dd9b6; +} +.article blockquote.pullquote.right p { + text-align: right; +} +.article pre { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + margin-top: 1em; + margin-bottom: 1em; + overflow: auto; + background: var(--color-codeblock); + font-size: 0.8125rem; + font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif; + border: 1px solid #ffebcb; + padding: 16px; + border-radius: 4px; + -webkit-border-radius: 4px; +} +.article pre >code:not([class]) { + background: transparent; +} +.article div>pre { + border-radius: 4px; + -webkit-border-radius: 4px; +} +.article div>pre>code:not([class]) { + padding: 0; + margin: 0; + background: transparent; + color: rgba(68,68,68,0.9); +} +.article code { + font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif; +} +.article code:not([class]) { + word-break: break-all; + color: var(--color-inlinecode); + border-radius: 2px; + -webkit-border-radius: 2px; +} +@media screen and (max-width: 500px) { + .article ul, + .article ol { + font-size: 0.875rem; + } + .article figure { + font-size: 13px; + line-height: 1.5; + } +} +.article .widget { + background: transparent; + margin: 1em 0; + box-shadow: none; + -webkit-box-shadow: none; + border-radius: 4px; + -webkit-border-radius: 4px; + cursor: auto; + background: var(--color-block); + padding: 8px 0; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + width: 100%; +} +.article .widget:hover { + box-shadow: none; + -webkit-box-shadow: none; +} +.article .widget:active { + box-shadow: none; + -webkit-box-shadow: none; +} +.article .widget header { + padding: 4px 0.6em; + padding-bottom: 0; +} +.article .widget header, +.article .widget header a { + color: rgba(68,68,68,0.85); +} +.article .widget.copyright, +.article .widget.qrcode { + background: none; + padding: 0; +} +.article .widget.copyright header, +.article .widget.qrcode header { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +.article .widget.copyright .content, +.article .widget.qrcode .content { + padding: 0; +} +.article .widget.list .content, +.article .widget.related_posts .content { + padding: 0 0.6em !important; +} +.article .widget.list .content a, +.article .widget.related_posts .content a { + color: #2092ec; +} +.article .widget.list .content a:hover, +.article .widget.related_posts .content a:hover { + color: #ff5722; +} +.article .widget .content { + padding: 0 0.6em; + margin: 0; +} +.article .widget .content ul { + padding-left: 4px; + margin-left: 16px; +} +.article .widget .content ul a { + transition: all 0.1s ease; + -webkit-transition: all 0.1s ease; + -khtml-transition: all 0.1s ease; + -moz-transition: all 0.1s ease; + -o-transition: all 0.1s ease; + -ms-transition: all 0.1s ease; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; + border-left: none; + padding: 0; + padding-left: 4px; + color: #2092ec; + font-weight: normal; + text-decoration: none; +} +.article .widget .content ul a:hover, +.article .widget .content ul a.active, +.article .widget .content ul a:active { + border-left: none !important; + background: none !important; +} +.article .widget .content ul a:hover { + color: #ff5722; +} +.article .widget .content .list a .name { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; + color: #2092ec; +} +.article .widget .content .list a:hover .name { + color: #ff5722; +} +.article .widget.qrcode > .content { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + align-items: center; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + padding-left: 16px; + padding-right: 16px; + margin-bottom: 4px; +} +.article .widget.qrcode > .content>.fancybox, +.article .widget.qrcode > .content>img { + margin: 0 8px; +} +.article .widget.qrcode > .content img { + margin-bottom: 4px; +} +.article .article_footer { + margin-top: 64px; +} +.article .widget-blur { + backdrop-filter: none; +} +.md .footer { + margin-top: 64px; +} +.md .footer >div { + margin-top: 1em; + margin-bottom: 1em; +} +.md .footer .header { + line-height: 1.75; + padding-bottom: 8px; + font-weight: 500; + font-size: 0.875rem; + color: var(--color-list); +} +.md .footer .header i { + margin-right: 2px; +} +.md .footer .body ul, +.md .footer .body ol { + margin-top: 0; + margin-bottom: 0; +} +.md .footer .references, +.md .footer .related_posts { + background: var(--color-block); + border-radius: 4px; + -webkit-border-radius: 4px; + padding: 16px; +} +.md .footer .references .body a { + font-size: 0.9375rem; + font-weight: 500; +} +.md .footer .related_posts .body { + margin: 4px; + overflow: hidden; + border-radius: 2px; + -webkit-border-radius: 2px; +} +.md .footer .related_posts .body .vlts-rps { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; +} +.md .footer .related_posts .body .vlts-rps .item { + flex-shrink: 0; + width: 240px; +} +.md .footer .related_posts .body .vlts-rps .item+.item { + margin-left: 16px; +} +.md .footer .related_posts .body .vlts-rps .item:hover img { + filter: ; +} +.md .footer .related_posts .body .vlts-rps img { + border-radius: 2px; + -webkit-border-radius: 2px; + width: 100%; + height: 120px; + object-fit: cover; + filter: ; +} +.md .footer .related_posts .body .vlts-rps span { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + text-align: justify; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; +} +.md .footer .related_posts .body .vlts-rps .title { + font-weight: 600; + -webkit-line-clamp: 1; +} +.md .footer .related_posts .body .vlts-rps .excerpt { + font-size: 0.875rem; + color: var(--color-meta); + -webkit-line-clamp: 3; +} +.md .footer .copyright blockquote p { + font-size: 0.875rem; + margin: 0.25em 0; +} +.md .footer .copyright blockquote p a { + font-weight: 500; +} +.md .footer .donate { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + margin: 0 auto; +} +.md .footer .donate .imgs { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-inline-flexbox /* TWEENER - IE 10 */; + display: -webkit-inline-flex /* NEW - Chrome */; + display: inline-flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: inline-flex; + margin: 0 auto; +} +.md .footer .donate .imgs .fancybox { + margin: 8px; +} +.md .footer .donate .imgs img { + width: 80px; +} +article .readmore { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin-top: 24px; + font-size: 0.875rem; +} +.copyright.license { + background: var(--color-copyright-bkg); + color: var(--color-meta); + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + font-size: 0.95rem; + line-height: 1.2; + margin: 15px -40px; + overflow: hidden; + padding: 1.25em 40px; + position: relative; + border-radius: 4px; + -webkit-border-radius: 4px; +} +.copyright.license:after { + background: url("data:image/svg+xml;charset=utf-8,%3Csvg version='1.1' id='Capa_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 367.467 367.467' style='enable-background:new 0 0 367.467 367.467;' xml:space='preserve'%3E%3Cg%3E%3Cpath d='M183.73,0.018C82.427,0.018,0,82.404,0,183.733c0,101.289,82.427,183.716,183.73,183.716 c101.315,0,183.737-82.427,183.737-183.716C367.467,82.404,285.045,0.018,183.73,0.018z M183.73,326.518 c-78.743,0-142.798-64.052-142.798-142.784c0-78.766,64.055-142.817,142.798-142.817c78.752,0,142.807,64.052,142.807,142.817 C326.536,262.466,262.481,326.518,183.73,326.518z'/%3E%3Cpath d='M244.036,217.014c-11.737,20.141-33.562,32.635-56.956,32.635c-36.329,0-65.921-29.585-65.921-65.915 c0-36.36,29.592-65.955,65.921-65.955c23.395,0,45.219,12.54,56.956,32.641l1.517,2.627h44.28l-2.658-7.129 c-7.705-20.413-21.225-37.769-39.122-50.157c-17.942-12.42-39.017-19.009-60.973-19.009c-58.981,0-106.946,48.006-106.946,106.982 c0,58.98,47.965,106.941,106.946,106.941c21.956,0,43.03-6.567,60.973-19.006c17.897-12.391,31.417-29.741,39.122-50.154 l2.658-7.133h-44.28L244.036,217.014z'/%3E%3C/g%3E%3C/svg%3E"); + content: " "; + opacity: 0.1; + -webkit-opacity: 0.1; + -moz-opacity: 0.1; + height: 180px; + right: -10px; + top: -35px; + width: 180px; + position: absolute; +} +.copyright.license a { + color: var(--color-meta); +} +.copyright.license a:hover { + color: #ff5722; +} +.copyright.license .license-title, +.copyright.license .license-meta-title { + margin: 0 0 0.25rem; +} +.copyright.license .license-link, +.copyright.license .license-meta-title { + font-size: 0.8rem; +} +.copyright.license .license-title { + font-weight: 700; +} +.copyright.license .license-link { + margin-bottom: 1rem; +} +.copyright.license .license-meta { + align-items: center; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; +} +.copyright.license .license-meta-item { + margin: 0 2rem 1em 0; +} +.copyright.license .license-meta-text { + margin: 0; +} +.copyright.license .license-meta-text a { + border-bottom: 1px solid var(--color-meta); +} +.copyright.license .license-meta-text a:hover { + border-bottom-color: #ff5722; +} +footer.footer { + position: relative; + padding: 40px 10px 120px 10px; + width: 100%; + color: var(--color-site-footer); + margin: 0px auto; + overflow: hidden; + text-align: center; +} +footer.footer, +footer.footer p { + font-size: 0.8125rem; +} +footer.footer .licenses { + color: fade(, 50%); +} +footer.footer .social-wrapper { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + margin: 4px 8px; +} +footer.footer a { + color: var(--color-site-footer); + padding: 0; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +footer.footer a:hover { + color: #ff5722; +} +footer.footer a:not(.social):hover { + text-decoration: underline; +} +footer.footer a.social { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + text-align: center; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + align-items: center; + min-width: 36px; + min-height: 36px; + margin: 4px; + opacity: 0.75; + -webkit-opacity: 0.75; + -moz-opacity: 0.75; + border-radius: 4px; + -webkit-border-radius: 4px; + font-size: 1rem; +} +footer.footer a.social img { + margin: 8px; + height: 24px; +} +footer.footer a.social:hover { + color: #ff5722; + background: rgba(255,87,34,0.1); +} +footer.footer .copyright { + margin-top: 16px; +} +footer.footer .copyright p { + font-size: 0.78125rem; +} +@media screen and (max-width: 768px) { + footer.footer { + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + } +} +.article.l_friends .friends-group .friend-content { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + margin: -8px; + border-radius: 8px; + -webkit-border-radius: 8px; + align-items: flex-start; + line-height: 1.3; +} +.article.l_friends .friends-group .friend-content .friend-card { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + border-radius: 4px; + -webkit-border-radius: 4px; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + padding: 8px 0; + margin: 8px; + margin-top: calc(2.25 * 16px + 32px); + color: var(--color-meta); + background: var(--color-block); + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; + align-content: flex-start; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + width: calc(100%/4 - 16px); +} +@media screen and (max-width: 1024px) { + .article.l_friends .friends-group .friend-content .friend-card { + width: calc(100%/4 - 16px); + } +} +@media screen and (max-width: 768px) { + .article.l_friends .friends-group .friend-content .friend-card { + width: calc(100%/3 - 16px); + } +} +@media screen and (max-width: 500px) { + .article.l_friends .friends-group .friend-content .friend-card { + width: calc(100%/2 - 16px); + } +} +.article.l_friends .friends-group .friend-content .friend-card:hover .friend-left .avatar { + transform: scale(1.2) rotate(12deg); + -webkit-transform: scale(1.2) rotate(12deg); + -khtml-transform: scale(1.2) rotate(12deg); + -moz-transform: scale(1.2) rotate(12deg); + -o-transform: scale(1.2) rotate(12deg); + -ms-transform: scale(1.2) rotate(12deg); + box-shadow: 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); + -webkit-box-shadow: 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); +} +.article.l_friends .friends-group .friend-content .friend-card .friend-left { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-self: center; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-left .avatar { + width: 64px; + height: 64px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + margin: 16px 8px 4px 8px; + margin-top: calc(-1.25 * 16px - 32px); + border-radius: 100%; + -webkit-border-radius: 100%; + border: 2px solid #fff; + background: #fff; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-right { + margin: 4px 8px; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + text-align: center; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-right p { + text-align: center; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-right .friend-tags-wrapper { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + margin-left: -2px; + word-break: break-all; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-right p { + margin: 0; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-right p.friend-name { + font-size: 0.8125rem; + padding-top: 4px; + font-weight: bold; +} +.article.l_friends .friends-group .friend-content .friend-card .friend-right p.tags { + font-size: 0.78125rem; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; + background: none; + word-wrap: break-word; + padding-right: 4px; +} +.md img { + position: relative; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +@media screen and (max-width: 500px) { + .md img { + box-shadow: none; + -webkit-box-shadow: none; + } +} +.md div>img, +.md p>img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin: auto; + border-radius: 4px; + -webkit-border-radius: 4px; +} +@media screen and (max-width: 500px) { + .md div>img, + .md p>img { + border-radius: 2px; + -webkit-border-radius: 2px; + } +} +.md span img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; + margin: auto; +} +.md .img-wrap { + margin: 1.5rem auto; + text-align: center; + border-radius: 2px; + -webkit-border-radius: 2px; + overflow: hidden; +} +.md .img-wrap .img-bg { + width: 100%; +} +.md .img-wrap .image-caption { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin: 0.75rem auto; + font-size: 0.8125rem; + color: var(--color-meta); +} +.md .img-wrap .image-caption:empty { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +svg.loading { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + position: absolute; + color: var(--text-p3); + width: 100%; + height: 2rem; + margin: auto; + animation: spin infinite 2s; + -webkit-animation: spin infinite 2s; + -khtml-animation: spin infinite 2s; + -moz-animation: spin infinite 2s; + -o-animation: spin infinite 2s; + -ms-animation: spin infinite 2s; + animation-timing-function: linear; +} +@-moz-keyframes spin { + from { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -khtml-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + } + to { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +@-webkit-keyframes spin { + from { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -khtml-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + } + to { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +@-o-keyframes spin { + from { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -khtml-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + } + to { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +@keyframes spin { + from { + transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -khtml-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + } + to { + transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -khtml-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + } +} +#safearea { + margin: 16px 16px 0; +} +#l_body { + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +#l_body div.loading { + margin: 16px 0; + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +#l_body div.loading, +#l_body div.loading p { + text-align: center; +} +#l_body #s-top { + transition: all 0.6s ease; + -webkit-transition: all 0.6s ease; + -khtml-transition: all 0.6s ease; + -moz-transition: all 0.6s ease; + -o-transition: all 0.6s ease; + -ms-transition: all 0.6s ease; + z-index: 9; + position: fixed; + width: 48px; + height: 48px; + line-height: 48px; + border-radius: 100%; + -webkit-border-radius: 100%; + bottom: 32px; + right: 32px; + transform: translateY(100px) scale(0); + -webkit-transform: translateY(100px) scale(0); + -khtml-transform: translateY(100px) scale(0); + -moz-transform: translateY(100px) scale(0); + -o-transform: translateY(100px) scale(0); + -ms-transform: translateY(100px) scale(0); + transform-origin: bottom; + -webkit-transform-origin: bottom; + -khtml-transform-origin: bottom; + -moz-transform-origin: bottom; + -o-transform-origin: bottom; + -ms-transform-origin: bottom; + color: var(--color-text); +} +@media screen and (max-width: 768px) { + #l_body #s-top { + right: 16px; + } +} +#l_body #s-top.show { + transform: translateY(0) scale(1); + -webkit-transform: translateY(0) scale(1); + -khtml-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); +} +#l_body #s-top.show.hl { + background: #3dd9b6; + color: #fff; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); +} +@media screen and (min-width: 768px) { + #l_body #s-top:hover { + transform: scale(1.2); + -webkit-transform: scale(1.2); + -khtml-transform: scale(1.2); + -moz-transform: scale(1.2); + -o-transform: scale(1.2); + -ms-transform: scale(1.2); + border-radius: 25%; + -webkit-border-radius: 25%; + background: #3dd9b6; + color: #fff; + box-shadow: 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); + -webkit-box-shadow: 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); + } + #l_body #s-top:hover.hl { + box-shadow: 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); + -webkit-box-shadow: 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); + } +} +#l_main { + width: calc(100% - 1 * 240px); + padding-right: 16px; + float: left; +} +@media screen and (max-width: 768px) { + #l_main { + width: 100%; + } +} +#l_main.no_sidebar { + width: 100%; + padding-right: 0; + max-width: 840px; + margin: auto; +} +@media screen and (min-width: 2048px) { + #l_main.no_sidebar { + max-width: calc(55vw - 240px); + } +} +#l_main.no_sidebar ~#l_side { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +#l_main .post-list { + position: relative; + margin-bottom: 16px; + column-gap: 16px; + -webkit-column-gap: 16px; + -moz-column-gap: 16px; +} +#l_main .post-list.multiple-columns { + columns: 320px; +} +#l_main .post-wrapper { + column-break-inside: avoid; + break-inside: avoid-column; +} +#l_main .widget .content p, +#l_main .widget .content ul, +#l_main .widget .content ol, +#l_main .widget .content table, +#l_main .widget .content .tabs, +#l_main .widget .content details { + margin-top: 1em; + margin-bottom: 1em; +} +#l_main .widget .content .post { + padding-top: 0; + padding-bottom: 0; + margin-top: 1em; + margin-bottom: 1em; +} +#l_main .widget.grid .content .grid.fixed a { + width: calc(100%/8 - 0 * 16px); +} +@media screen and (max-width: 1024px) { + #l_main .widget.grid .content .grid.fixed a { + width: calc(100%/7 - 0 * 16px); + } +} +@media screen and (max-width: 768px) { + #l_main .widget.grid .content .grid.fixed a { + width: calc(100%/6 - 0 * 16px); + } +} +@media screen and (max-width: 500px) { + #l_main .widget.grid .content .grid.fixed a { + width: calc(100%/5 - 0 * 16px); + } +} +@media screen and (max-width: 425px) { + #l_main .widget.grid .content .grid.fixed a { + width: calc(100%/4 - 0 * 16px); + } +} +@media screen and (max-width: 375px) { + #l_main .widget.grid .content .grid.fixed a { + width: calc(100%/3 - 0 * 16px); + } +} +#l_main .post { + position: relative; + margin-bottom: 16px; + padding: 24px; + border-radius: 8px; + -webkit-border-radius: 8px; +} +#l_main .post h1.title { + font-size: 1.5rem; + margin: 0; + border-bottom: none; + padding-bottom: 4px; + border-bottom: none; +} +#l_main .post .article-meta { + color: var(--color-meta); + margin-bottom: 16px; + line-height: normal; +} +#l_main .post .article-meta#top { + margin-top: 16px; + margin-bottom: 32px; +} +#l_main .post .article-meta#bottom { + margin-top: 32px; + margin-bottom: 8px; +} +#l_main .post .article-meta .aplayer, +#l_main .post .article-meta .aplayer-pic, +#l_main .post .article-meta .thumbnail { + width: 48px; + height: 48px; +} +#l_main .post .article-meta .aplayer, +#l_main .post .article-meta .thumbnail { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + border-radius: 100%; + -webkit-border-radius: 100%; + float: right; + margin: 2px; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); +} +#l_main .post .article-meta .aplayer:hover, +#l_main .post .article-meta .thumbnail:hover { + border-radius: 25%; + -webkit-border-radius: 25%; + transform: scale(1.1); + -webkit-transform: scale(1.1); + -khtml-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + box-shadow: 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); + -webkit-box-shadow: 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); +} +@media screen and (max-width: 500px) { + #l_main .post .article-meta .aplayer:hover, + #l_main .post .article-meta .thumbnail:hover { + border-radius: 100%; + -webkit-border-radius: 100%; + transform: scale(1); + -webkit-transform: scale(1); + -khtml-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + } +} +#l_main .post .article-meta .thumbnail { + width: auto; + border-radius: 4px; + -webkit-border-radius: 4px; + box-shadow: none; + -webkit-box-shadow: none; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +#l_main .post .article-meta .thumbnail:hover { + border-radius: 4px; + -webkit-border-radius: 4px; + transform: scale(1.1) rotate(4deg); + -webkit-transform: scale(1.1) rotate(4deg); + -khtml-transform: scale(1.1) rotate(4deg); + -moz-transform: scale(1.1) rotate(4deg); + -o-transform: scale(1.1) rotate(4deg); + -ms-transform: scale(1.1) rotate(4deg); + box-shadow: none; + -webkit-box-shadow: none; +} +#l_main .post .article-meta .new-meta-box { + transition: all 0.1s ease; + -webkit-transition: all 0.1s ease; + -khtml-transition: all 0.1s ease; + -moz-transition: all 0.1s ease; + -o-transition: all 0.1s ease; + -ms-transition: all 0.1s ease; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-items: center; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} +#l_main .post .article-meta .new-meta-box, +#l_main .post .article-meta .new-meta-box p, +#l_main .post .article-meta .new-meta-box i { + font-size: 0.8125rem; +} +#l_main .post .article-meta .new-meta-box .new-meta-item { + color: var(--color-meta); + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-items: baseline; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + margin: 0 16px 0 0; + padding: 8px 0; +} +#l_main .post .article-meta .new-meta-box .new-meta-item .notlink { + cursor: default; +} +#l_main .post .article-meta .new-meta-box .new-meta-item .notlink:hover { + color: var(--color-meta); +} +#l_main .post .article-meta .new-meta-box .new-meta-item .notlink:hover p { + color: var(--color-meta); +} +#l_main .post .article-meta .new-meta-box .new-meta-item:last-child { + margin-right: 0; +} +#l_main .post .article-meta .new-meta-box .new-meta-item img, +#l_main .post .article-meta .new-meta-box .new-meta-item i { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; +} +#l_main .post .article-meta .new-meta-box .new-meta-item i { + margin-right: 4px; + border-radius: 0; + -webkit-border-radius: 0; +} +#l_main .post .article-meta .new-meta-box .new-meta-item i.fa-hashtag { + margin-right: 2px; +} +#l_main .post .article-meta .new-meta-box .new-meta-item p, +#l_main .post .article-meta .new-meta-box .new-meta-item a { + color: var(--color-meta); + padding: 3px 0; +} +#l_main .post .article-meta .new-meta-box .new-meta-item a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + align-items: center; +} +#l_main .post .article-meta .new-meta-box .new-meta-item a img { + height: 16px; + width: 16px; + margin-right: 8px; +} +#l_main .post .article-meta .new-meta-box .new-meta-item a p { + margin: 0; + font-weight: normal; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +#l_main .post .article-meta .new-meta-box .new-meta-item a:hover { + color: #ff5722; +} +#l_main .post .article-meta .new-meta-box .new-meta-item a:hover p { + color: #ff5722; +} +#l_main .post .article-meta .new-meta-box .author img, +#l_main .post .article-meta .new-meta-box .author i { + border-radius: 100%; + -webkit-border-radius: 100%; +} +#l_main .post .article-meta .new-meta-box .author img { + transform: translateY(-0.5px); + -webkit-transform: translateY(-0.5px); + -khtml-transform: translateY(-0.5px); + -moz-transform: translateY(-0.5px); + -o-transform: translateY(-0.5px); + -ms-transform: translateY(-0.5px); +} +@media screen and (max-width: 500px) { + #l_main .post .article-meta .new-meta-box .share { + width: 100%; + margin-top: 16px; + background: var(--color-block); + border-radius: 4px; + -webkit-border-radius: 4px; + } +} +#l_main .post .article-meta .new-meta-box .share-body { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + margin: 0; + padding: 0 2px; +} +#l_main .post .article-meta .new-meta-box .share-body a { + padding: 0; + margin: 0 1px; +} +#l_main .post .article-meta .new-meta-box .share-body a img { + margin: 2px; + height: 24px; + width: auto; + background: transparent; +} +@media screen and (max-width: 500px) { + #l_main .post .article-meta .new-meta-box .share-body a img { + height: 32px; + margin: 8px; + } +} +#l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + position: absolute; + background: var(--color-card); + border-radius: 8px; + -webkit-border-radius: 8px; + box-shadow: 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); + -webkit-box-shadow: 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); + padding: 8px; + left: 50%; + top: -20px; + transform: translate(-50%, -100%); + -webkit-transform: translate(-50%, -100%); + -khtml-transform: translate(-50%, -100%); + -moz-transform: translate(-50%, -100%); + -o-transform: translate(-50%, -100%); + -ms-transform: translate(-50%, -100%); +} +#l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin: 0; + padding: 0; + height: 128px; + width: 128px; + min-width: 128px; +} +#l_main .post .article-meta .new-meta-box .share-body div.hoverbox:hover div.target { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; +} +@media screen and (max-width: 500px) { + #l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target { + position: absolute; + } +} +#l_main .post span>img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; +} +#l_main .post a img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; +} +@media screen and (max-width: 768px) { + #l_main { + padding-right: 0; + } +} +@media screen and (max-width: 768px) and (max-width: 500px) { + #l_main { + width: 100%; + } +} +.body-wrapper { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + width: 100%; + max-width: 1080px; + margin: 0 auto; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + align-items: stretch; +} +@media screen and (min-width: 2048px) { + .body-wrapper { + max-width: 55vw; + } +} +article#comments p[ct] { + margin-top: 0; + margin-bottom: 1em; + font-size: 1.125rem; + color: var(--color-text); + font-weight: 600; +} +article#comments p[cst] { + margin-top: 1em; + margin-bottom: 1em; + font-size: 0.875rem; +} +article#comments #load-btns, +article#comments #loading-comments { + text-align: center; + margin: 16px 0; +} +article#comments #load-btns, +article#comments #loading-comments, +article#comments #load-btns a, +article#comments #loading-comments a, +article#comments #load-btns i, +article#comments #loading-comments i { + line-height: 3em; +} +article#comments #load-btns a.load-comments, +article#comments #loading-comments a.load-comments { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + border-radius: 2px; + -webkit-border-radius: 2px; + cursor: pointer; + background: #44d7b6; + color: #fff; + padding-left: 48px; + padding-right: 48px; +} +article#comments #load-btns a.load-comments:hover, +article#comments #loading-comments a.load-comments:hover { + background: #ff5722; +} +.white-box { + background: var(--color-card); +} +img { + max-width: 100%; +} +img.lazyload:not(.placeholder) { + transition: opacity 0.5s ease-out 0s; + -webkit-transition: opacity 0.5s ease-out 0s; + -khtml-transition: opacity 0.5s ease-out 0s; + -moz-transition: opacity 0.5s ease-out 0s; + -o-transition: opacity 0.5s ease-out 0s; + -ms-transition: opacity 0.5s ease-out 0s; + transition: filter 0.25s ease-out 0s; + -webkit-transition: filter 0.25s ease-out 0s; + -khtml-transition: filter 0.25s ease-out 0s; + -moz-transition: filter 0.25s ease-out 0s; + -o-transition: filter 0.25s ease-out 0s; + -ms-transition: filter 0.25s ease-out 0s; +} +img.lazyload:not(.placeholder):not(.loaded) { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; +} +img.lazyload:not(.placeholder).loaded { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; +} +img.lazyload:not(.placeholder):not(.loaded) { + filter: blur(8px); +} +img.lazyload:not(.placeholder).loaded { + filter: none; +} +.md >p { + padding-top: 4px; +} +.md h1, +.md h2, +.md h3, +.md h4, +.md h5, +.md h6 { + position: relative; + pointer-events: none; + margin-top: 0; + font-weight: 500; +} +.md h1 >a, +.md h2 >a, +.md h3 >a, +.md h4 >a, +.md h5 >a, +.md h6 >a { + color: inherit; + pointer-events: auto; +} +.md h1 >a:hover, +.md h2 >a:hover, +.md h3 >a:hover, +.md h4 >a:hover, +.md h5 >a:hover, +.md h6 >a:hover { + color: #ff5722; +} +.md h1:before, +.md h2:before, +.md h3:before, +.md h4:before, +.md h5:before, +.md h6:before { + content: ''; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin-top: -48px; + height: 96px; + visibility: hidden; + pointer-events: none; +} +.md h1:before, +.md h2:before { + margin-top: -32px; +} +.md .article-meta+h1, +.md .article-meta+h2 { + margin-top: -80px; +} +.md h3, +.md h4, +.md h5, +.md h6 { + margin-bottom: 1em; +} +.md h3:before { + margin-top: -56px; +} +.md h4:before { + margin-top: -64px; +} +.md h5 { + font-weight: bold; +} +.md h2+h3:before { + margin-top: -80px; +} +.md ul, +.md ol { + font-size: 0.9375rem; + list-style: initial; + padding-left: 8px; + margin-left: 16px; + margin-top: 1em; + margin-bottom: 1em; +} +.md ul ul, +.md ol ul, +.md ul ol, +.md ol ol { + margin-top: 0; + margin-bottom: 0; +} +.md ul li, +.md ol li { + margin-top: 0px; + margin-bottom: 0px; +} +.md ul li li, +.md ol li li { + margin-top: 0; + margin-bottom: 0; +} +.md ul li p, +.md ol li p { + margin-top: 4px; + margin-bottom: 0; +} +.md ul.task-list, +.md ol.task-list { + padding-left: 0; + margin-left: 4px; +} +.md ul.task-list li, +.md ol.task-list li { + list-style: none; +} +.md ul.task-list li input, +.md ol.task-list li input { + margin-right: 4px; +} +.md ul>li { + list-style: initial; +} +.md ol>li { + list-style: decimal; +} +.md .div-ori-link { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + text-align: center; + margin: 4rem 0; +} +.md .ori-link { + margin: auto; + padding: 1em 3em; + border: 1px solid #3dd9b6; + border-radius: 4px; + -webkit-border-radius: 4px; + color: #3dd9b6; + font-weight: 500; +} +.md .ori-link:hover { + color: #ff5722; + border-color: #ff5722; +} +#l_main .prev-next { + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + align-items: baseline; + color: var(--color-meta); + margin: 0; + font-weight: 600; +} +#l_main .prev-next .prev { + text-align: left; + border-top-right-radius: 32px; + border-bottom-right-radius: 32px; +} +#l_main .prev-next .next { + text-align: right; + border-top-left-radius: 32px; + border-bottom-left-radius: 32px; +} +#l_main .prev-next p { + margin: 16px; +} +#l_main .prev-next section { + color: var(--color-meta); + padding: 16px; + border-radius: 8px; + -webkit-border-radius: 8px; +} +#l_main .prev-next section:hover { + color: #ff5722; +} +#l_main .article .prev-next { + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + align-content: flex-start; + margin-top: 8px; +} +#l_main .article .prev-next >a { + width: 100%; + padding: 8px; + color: var(--color-meta); + background: var(--color-block); + border-radius: 4px; + -webkit-border-radius: 4px; +} +#l_main .article .prev-next >a:hover { + background: #ffeee8; +} +#l_main .article .prev-next >a:hover p.title { + color: #ff5722; +} +#l_main .article .prev-next >a p { + margin: 8px 0.5rem; +} +#l_main .article .prev-next >a p.title { + font-weight: 600; + font-size: 1rem; +} +#l_main .article .prev-next >a p.title >i { + width: 1rem; +} +#l_main .article .prev-next >a p.content { + font-size: 0.875rem; + font-weight: 400; + text-align: justify; + word-break: break-all; +} +#l_main .article .prev-next >a:only-child { + margin-left: 0; + margin-right: 0; +} +#l_main .article .prev-next .prev { + margin-left: 0; + margin-right: 8px; +} +#l_main .article .prev-next .prev p.title { + text-align: left; +} +#l_main .article .prev-next .next { + margin-left: 8px; + margin-right: 0; +} +#l_main .article .prev-next .next p.title { + text-align: right; +} +.article-title { + font-weight: 500; + margin-bottom: 12px; + line-height: 1.4; +} +.article-title a { + color: var(--color-h1); +} +.article-title a:hover { + color: #ff5722; +} +.article-title[pin] { + margin-right: 36px; +} +.article-desc { + word-break: break-word; +} +.post-v3 { + overflow: hidden; + text-align: justify; +} +.post-v3 .md { + color: var(--color-p); +} +.post-v3 .pin { + position: absolute; + width: 20px; + height: 20px; + border-radius: 20px; + -webkit-border-radius: 20px; + right: 24px; + top: 24px; + z-index: 1; + pointer-events: none; +} +.meta-v3[line_style='solid'] { + border-top: 1px solid rgba(68,68,68,0.1); +} +.meta-v3[line_style='dashed'] { + border-top: 2px dashed rgba(68,68,68,0.1); +} +.meta-v3[line_style='dotted'] { + border-top: 4px dotted rgba(68,68,68,0.1); +} +.meta-v3 { + margin-top: 16px; + padding-top: 12px; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + color: var(--color-meta); +} +.meta-v3 >div { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-items: center; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +.meta-v3 time { + font-size: 0.875rem; +} +.meta-v3 .category-link { + font-size: 0.875rem; + color: var(--color-meta); + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} +.meta-v3 .category-link:hover { + color: #ff5722; +} +.meta-v3 .readmore { + font-weight: bold; +} +.meta-v3 .avatar { + line-height: 0; + margin-right: 0.75em; +} +.meta-v3 .avatar img { + width: 24px; + height: 24px; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + border-radius: 12px; + -webkit-border-radius: 12px; + object-fit: cover; +} +.headimg-div { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin-left: -24px; + margin-top: -24px; + margin-bottom: 20px; + width: calc(100% + 3 * 16px); +} +.headimg-div .headimg-a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + overflow: hidden; + height: 280px; +} +@media screen and (max-width: 768px) { + .headimg-div .headimg-a { + height: 250px; + } +} +@media screen and (max-width: 500px) { + .headimg-div .headimg-a { + height: 220px; + } +} +@media screen and (max-width: 425px) { + .headimg-div .headimg-a { + height: 190px; + } +} +.headimg-div .headimg { + object-fit: cover; + width: 100%; + height: 100%; + transition: transform 3s ease-out; + -webkit-transition: transform 3s ease-out; + -khtml-transition: transform 3s ease-out; + -moz-transition: transform 3s ease-out; + -o-transition: transform 3s ease-out; + -ms-transition: transform 3s ease-out; +} +.headimg-div .headimg:hover { + transform: scale(1.1); + -webkit-transform: scale(1.1); + -khtml-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); +} +.headimg-div .headimg.lazyload:not(.placeholder) { + transition: transform 3s ease-out, opacity 0.5s ease-out; + -webkit-transition: transform 3s ease-out, opacity 0.5s ease-out; + -khtml-transition: transform 3s ease-out, opacity 0.5s ease-out; + -moz-transition: transform 3s ease-out, opacity 0.5s ease-out; + -o-transition: transform 3s ease-out, opacity 0.5s ease-out; + -ms-transition: transform 3s ease-out, opacity 0.5s ease-out; +} +.headimg-div .headimg.lazyload:not(.placeholder):not(.loaded) { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; +} +.headimg-div .headimg.lazyload:not(.placeholder).loaded { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; +} +#u-search .modal { + position: fixed; + height: 80%; + width: 100%; + max-width: 640px; + left: 50%; + top: 0; + margin: 64px 0px 0px -320px; + background: var(--color-card); + z-index: 3; + border-radius: 8px; + -webkit-border-radius: 8px; + overflow: hidden; +} +@media screen and (max-width: 680px) { + #u-search .modal { + box-shadow: none; + -webkit-box-shadow: none; + max-width: none; + top: 0; + left: 0; + margin: 0; + height: 100%; + border-radius: 0; + -webkit-border-radius: 0; + } +} +#u-search .modal .modal-header { + position: relative; + width: 100%; + height: 64px; + z-index: 3; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + font-size: $fontsize; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + background: #fff; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +@media screen and (max-width: 680px) { + #u-search .modal .modal-header { + border-radius: 0; + -webkit-border-radius: 0; + padding: 0px; + } +} +#u-search .modal .modal-header .btn-close { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + position: absolute; + width: 55px; + height: 64px; + top: 0; + right: 0; + color: #3dd9b6; + cursor: pointer; + text-align: center; + line-height: 64px; + vertical-align: middle; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + z-index: 2; +} +#u-search .modal .modal-header .btn-close:hover { + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -khtml-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); +} +#u-search .modal .modal-header #u-search-modal-form { + position: relative; + width: 100%; + height: 100%; + z-index: 2; +} +#u-search .modal .modal-header #u-search-modal-form input { + color: var(--color-text); +} +#u-search .modal .modal-header #u-search-modal-form #u-search-modal-input { + margin: 16px 50px; + padding: 0 8px; + width: calc(100% - 100px - 16px); + line-height: 2rem; + border-radius: 8px; + -webkit-border-radius: 8px; + vertical-align: middle; + border: none; + appearance: none; + box-shadow: none; + -webkit-box-shadow: none; + background: transparent; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +@media screen and (max-width: 680px) { + #u-search .modal .modal-header #u-search-modal-form #u-search-modal-input { + padding: 0; + } +} +#u-search .modal .modal-header #u-search-modal-form #u-search-modal-input:focus { + border-top-left-radius: 8px; + border-top-right-radius: 8px; +} +#u-search .modal .modal-header #u-search-modal-btn-submit { + position: absolute; + top: 0; + left: 0; + padding-left: 5px; + padding-top: 2px; + background: transparent; + border: none; + width: 50px; + height: 64px; + vertical-align: middle; + color: #3dd9b6; + z-index: 2; +} +#u-search .modal .modal-body { + position: absolute; + padding: 16px; + width: 100%; + height: calc(100% - 64px); + top: 64px; + left: 0; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + background: var(--color-card); + border-radius: 8px; + -webkit-border-radius: 8px; +} +#u-search .modal .modal-body::-webkit-scrollbar { + height: 4px; + width: 4px; +} +#u-search .modal .modal-body::-webkit-scrollbar-track-piece { + background: transparent; +} +#u-search .modal .modal-body::-webkit-scrollbar-thumb { + background: #3dd9b6; + cursor: pointer; + border-radius: 2px; + -webkit-border-radius: 2px; +} +#u-search .modal .modal-body::-webkit-scrollbar-thumb:hover { + background: #ff5722; +} +#u-search .modal .modal-body .modal-results { + list-style: none; +} +#u-search .modal .modal-body .modal-results .result { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + padding: 16px; + border-radius: 8px; + -webkit-border-radius: 8px; +} +#u-search .modal .modal-body .modal-results .result b[mark] { + color: #25be9c; + text-decoration: underline; +} +#u-search .modal .modal-body .modal-results .result:hover { + background: var(--color-site-bg); +} +#u-search .modal .modal-body .modal-results .result:hover .title { + color: var(--color-list-hl); +} +#u-search .modal .modal-body .modal-results .result .title { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + max-width: 100%; + color: var(--color-list); + font-weight: bold; + padding: 1px; + margin-bottom: 2px; + white-space: normal; + overflow: hidden; + text-overflow: ellipsis; + font-size: 1.125rem; +} +#u-search .modal .modal-body .modal-results .result .digest { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + white-space: inherit; + overflow: hidden; + word-break: break-all; + text-overflow: ellipsis; + font-size: 0.8125rem; + color: var(--color-meta); +} +#u-search .modal .modal-body .modal-results .result .icon { + position: absolute; + top: 50%; + right: 0; + margin-top: -4px; + font-size: 11px; + color: var(--color-meta); +} +#u-search .modal-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.7); + z-index: 1; +} +#l_side { + width: 240px; + float: right; + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +@media screen and (max-width: 768px) { + #l_side { + width: 100%; + } +} +#l_side .widget { + overflow: hidden; +} +#l_side .widget.sticky { + position: sticky; + top: 80px; + z-index: 1; +} +#l_side .widget >.content { + max-height: 200vh; + overflow: auto; + text-align: justify; + font-size: 0.875rem; + max-width: 100%; +} +@media screen and (max-width: 768px) { + #l_side .widget >.content { + max-height: none; + } +} +#l_side .widget >.content::-webkit-scrollbar { + height: 4px; + width: 4px; +} +#l_side .widget >.content::-webkit-scrollbar-track-piece { + background: transparent; +} +#l_side .widget >.content::-webkit-scrollbar-thumb { + background: #3dd9b6; + cursor: pointer; + border-radius: 2px; + -webkit-border-radius: 2px; +} +#l_side .widget >.content::-webkit-scrollbar-thumb:hover { + background: #ff5722; +} +.widget { + z-index: 0; + background: var(--color-card); + margin-bottom: 16px; + border-radius: 8px; + -webkit-border-radius: 8px; + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +.widget ul li, +.widget ol li { + margin-top: 0; + margin-bottom: 0; +} +.widget.desktop { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +@media screen and (max-width: 768px) { + .widget { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none !important; + } + .widget.mobile { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block !important; + } +} +.widget header { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + padding: calc(16px - 2px); + font-weight: bold; + font-size: 0.875rem; + padding-bottom: 0; +} +.widget header, +.widget header a { + color: var(--color-meta); +} +.widget header >a:hover { + color: #ff5722; +} +.widget header span.name { + margin-left: 8px; +} +.widget >.content { + padding: 8px 0; +} +.widget >.content p { + margin-top: 1em; + margin-bottom: 1em; +} +.widget >.content p:first-child { + margin-top: 0.5em; +} +.widget >.content ul>li a { + color: var(--color-meta); + padding: 0 16px; + padding-left: 12px; + line-height: 2; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + align-content: center; + border-left: 2px solid transparent; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.widget >.content ul.entry, +.widget >.content ul.popular-posts { + list-style: none; +} +.widget >.content ul.entry a, +.widget >.content ul.popular-posts a { + color: var(--color-list); +} +.widget >.content ul.entry a .name, +.widget >.content ul.popular-posts a .name { + -webkit-box-flex: auto; + -moz-box-flex: auto; + -webkit-flex: auto 0; + -ms-flex: auto 0; + flex: auto 0; +} +.widget >.content ul.entry a .badge, +.widget >.content ul.popular-posts a .badge { + -webkit-box-flex: none; + -moz-box-flex: none; + -webkit-flex: none 0; + -ms-flex: none 0; + flex: none 0; + font-weight: normal; + font-size: 0.875rem; + color: rgba(68,68,68,0.7); +} +.widget >.content ul.entry a.active, +.widget >.content ul.popular-posts a.active { + border-left: 2px solid #3dd9b6; + color: var(--color-list-hl); +} +.widget >.content ul.entry a.active .badge, +.widget >.content ul.popular-posts a.active .badge { + color: rgba(61,217,182,0.9); +} +.widget >.content ul.entry a.child, +.widget >.content ul.popular-posts a.child { + padding-left: 32px; +} +.widget >.content ul.entry a:hover, +.widget >.content ul.popular-posts a:hover { + border-left: 2px solid #3dd9b6; + color: var(--color-list-hl); + background: var(--color-site-bg); +} +.widget.blogger { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.widget.blogger .content { + padding: 0; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: stretch; +} +.widget.blogger .content >.avatar { + align-self: center; + overflow: hidden; + position: relative; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + line-height: 0; +} +.widget.blogger .content >.avatar.circle { + border-radius: 100%; + -webkit-border-radius: 100%; + width: 128px; + height: 128px; + margin-top: 32px; + margin-bottom: 1em; +} +.widget.blogger .content >.avatar.circle img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + -khtml-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); +} +@media screen and (max-width: 768px) { + .widget.blogger .content >.avatar { + width: 80px; + height: 80px; + border-radius: 100%; + -webkit-border-radius: 100%; + border: 2px solid #fff; + } + .widget.blogger .content >.avatar img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + -khtml-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + position: absolute; + } +} +.widget.blogger .content .text :first-child { + margin-top: 16px; +} +.widget.blogger .content h2 { + text-align: center; + font-weight: bold; + margin: 8px; +} +@media screen and (max-width: 768px) { + .widget.blogger .content h2 { + margin: 8px; + } +} +.widget.blogger .content p { + text-align: center; + font-weight: bold; + margin: 8px 8px 0 8px; + empty-cells: hide; +} +.widget.blogger .content .social-wrapper { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + margin: 4px 4px; +} +.widget.blogger .content .social-wrapper a { + color: var(--color-meta); + padding: 0; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.widget.blogger .content .social-wrapper a:hover { + color: #ff5722; +} +.widget.blogger .content .social-wrapper a.social { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + align-items: center; + width: 32px; + height: 32px; + margin: 4px; + border-radius: 100px; + -webkit-border-radius: 100px; +} +.widget.blogger .content .social-wrapper a.social:hover { + background: #ebfbf7; + color: #3dd9b6; +} +@media screen and (max-width: 768px) { + .widget.blogger .content .social-wrapper { + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; + } +} +@media screen and (max-width: 768px) { + .widget.blogger { + box-shadow: none; + -webkit-box-shadow: none; + background: transparent !important; + margin-top: 32px; + backdrop-filter: none; + color: var(--color-site-inner); + } +} +.widget.text .content { + padding: 4px 16px; +} +.widget.text .content, +.widget.text .content p { + font-size: 0.875rem; + word-break: break-all; +} +.widget.text .content a { + color: #2092ec; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.widget.text .content a:hover { + color: #ff5722; +} +.widget.text .content a:active { + color: #d93400; +} +.widget.list .content { + padding: 8px 0; +} +.widget.list .content a { + font-size: 0.875rem; + font-weight: bold; + line-height: 1.5; + padding-top: 6px; + padding-bottom: 6px; +} +.widget.list .content a img, +.widget.list .content a i { + margin-right: 4px; +} +.widget.list .content a i { + margin-left: 1px; +} +.widget.list .content a img { + vertical-align: middle; + height: 20px; + width: 20px; + margin-bottom: 4px; +} +.widget.list .content a img#round { + border-radius: 100%; + -webkit-border-radius: 100%; +} +.widget.grid .content .grid { + border: none; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + justify-content: space-around; + -webkit-justify-content: space-around; + -khtml-justify-content: space-around; + -moz-justify-content: space-around; + -o-justify-content: space-around; + -ms-justify-content: space-around; + padding: 4px 16px; +} +.widget.grid .content .grid a { + text-align: center; + border-radius: 2px; + -webkit-border-radius: 2px; + margin: 0; + padding: 4px 8px; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: center; + font-size: 0.78125rem; + font-weight: bold; + color: rgba(68,68,68,0.7); + line-height: 1.5; + word-wrap: break-word; +} +.widget.grid .content .grid a i { + margin-top: 0.3em; + margin-bottom: 0.3em; + font-size: 1.8em; +} +.widget.grid .content .grid a img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; + vertical-align: middle; + margin-bottom: 4px; +} +.widget.grid .content .grid a img#round { + border-radius: 100%; + -webkit-border-radius: 100%; +} +.widget.grid .content .grid a.active { + color: var(--color-list-hl); + background: var(--color-site-bg); +} +.widget.grid .content .grid a:hover { + color: var(--color-list-hl); + background: var(--color-site-bg); + border-radius: 2px; + -webkit-border-radius: 2px; +} +.widget.grid .content .grid.fixed a { + width: calc(100%/3 - 0 * 16px); +} +@media screen and (max-width: 768px) { + .widget.grid .content .grid.fixed a { + width: calc(100%/6 - 0 * 16px); + } +} +@media screen and (max-width: 500px) { + .widget.grid .content .grid.fixed a { + width: calc(100%/5 - 0 * 16px); + } +} +@media screen and (max-width: 425px) { + .widget.grid .content .grid.fixed a { + width: calc(100%/4 - 0 * 16px); + } +} +@media screen and (max-width: 375px) { + .widget.grid .content .grid.fixed a { + width: calc(100%/3 - 0 * 16px); + } +} +.widget.tagcloud .content { + text-align: justify; + padding: 8px 16px; +} +.widget.tagcloud .content a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + line-height: 1.2em; + margin: 4px 0; + border-bottom: 1px solid transparent; +} +.widget.tagcloud .content a:hover { + color: #ff5722 !important; + border-bottom: 1px solid #ff5722; +} +.widget.related_posts .content { + font-weight: bold; +} +.widget.related_posts .content ul { + margin-top: 8px; + margin-bottom: 8px; +} +.widget.related_posts .content h3 { + font-size: 0.875rem; + font-weight: bold; + margin: 0; +} +.widget.related_posts .content h3 a { + line-height: inherit; + padding-top: 4px; + padding-bottom: 4px; +} +.widget.qrcode .content { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + align-items: center; + justify-content: space-around; + -webkit-justify-content: space-around; + -khtml-justify-content: space-around; + -moz-justify-content: space-around; + -o-justify-content: space-around; + -ms-justify-content: space-around; + padding-left: 16px; + padding-right: 16px; +} +.widget.qrcode .content, +.widget.qrcode .content img { + margin-bottom: 4px; +} +#l_side>.widget.page >.content { + padding-top: 0; + padding-left: 12px; + padding-right: 12px; +} +.webinfo { + padding: 0.2rem 1rem; +} +.webinfo .webinfo-item { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + padding: 4px 0 0; +} +.webinfo .webinfo-item div:first-child { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; +} +.webinfo .webinfo-item div:last-child { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + float: right; +} +.widget-last { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block !important; +} +.widget-last .item { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: space-between; + -webkit-justify-content: space-between; + -khtml-justify-content: space-between; + -moz-justify-content: space-between; + -o-justify-content: space-between; + -ms-justify-content: space-between; + font-size: 0.8rem; +} +.widget-last .item-title { + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.widget-sticky { + position: sticky; + top: 80px; + z-index: 10; +} +.snackbar-wrap { + position: fixed; + width: 100%; + left: 0; + bottom: 0; + background: #3dd9b6; + padding: 16px; + z-index: 2; +} +.snackbar-content { + max-width: 1080px; + margin: 16px auto; +} +@media screen and (max-width: 1080px) { + .snackbar-content { + max-width: 100%; + } +} +.snackbar-content p { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + color: #fff; +} +.snackbar-content .title { + font-size: 1.5rem; + font-weight: 600; +} +.snackbar-content .action { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin: 1.5rem -4px; +} +.snackbar-content .action a { + margin: 4px; + cursor: pointer; + color: #fff; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + padding: 0.4em 2em; + font-weight: 600; + border-radius: 2px; + -webkit-border-radius: 2px; + border: 1px solid #fff; +} +.snackbar-content .action a:hover { + color: #3dd9b6; + background: #fff; +} +.snackbar-wrap[theme='warning'] { + background: #f7e751; +} +.snackbar-wrap[theme='warning'] .snackbar-content p { + color: #000; +} +.snackbar-wrap[theme='warning'] .snackbar-content a { + color: #000; + border-color: #000; +} +.snackbar-wrap[theme='warning'] .snackbar-content a:hover { + color: #f7e751; + background: #000; +} +#l_side .toc-wrapper { + z-index: 1; + overflow: hidden; + border-radius: 8px; + -webkit-border-radius: 8px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + line-height: 1.6; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +#l_side .toc-wrapper header { + position: sticky; + width: 100%; + top: 0; + padding-bottom: 4px; +} +#l_side .toc-wrapper .content { + max-height: calc(100vh - 144px); +} +#l_side .toc-wrapper .content a { + border-left: 2px solid transparent; +} +#l_side .toc-wrapper .content a.active { + color: var(--color-list-hl); + border-left: 2px solid #3dd9b6; +} +#l_side .toc-wrapper .content a:hover { + color: var(--color-list-hl); + background: var(--color-site-bg); + border-left: 2px solid #3dd9b6; +} +@media screen and (max-width: 768px) { + #l_side .toc-wrapper { + z-index: 1001; + position: fixed; + max-height: 1000px; + width: auto; + max-width: calc(100% - 2 * 16px); + top: 48px; + right: 16px; + border-radius: 4px; + -webkit-border-radius: 4px; + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1); + border: 1px solid #e7e7e7; + visibility: hidden; + transform: scale(0, 0); + -webkit-transform: scale(0, 0); + -khtml-transform: scale(0, 0); + -moz-transform: scale(0, 0); + -o-transform: scale(0, 0); + -ms-transform: scale(0, 0); + transform-origin: right top; + -webkit-transform-origin: right top; + -khtml-transform-origin: right top; + -moz-transform-origin: right top; + -o-transform-origin: right top; + -ms-transform-origin: right top; + } + #l_side .toc-wrapper.active { + visibility: visible; + transform: scale(1, 1); + -webkit-transform: scale(1, 1); + -khtml-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -o-transform: scale(1, 1); + -ms-transform: scale(1, 1); + } +} +@media screen and (max-width: 375px) { + #l_side .toc-wrapper { + right: 0; + } +} +#l_side .toc-wrapper a { + padding-left: 8px; + color: var(--color-meta); + font-size: 0.875rem; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; +} +#l_side .toc-wrapper ul .toc-child a, +#l_side .toc-wrapper ol .toc-child a { + font-weight: normal; +} +#l_side .toc-wrapper ul .toc-item.toc-level-1 .toc-child a, +#l_side .toc-wrapper ol .toc-item.toc-level-1 .toc-child a { + padding-left: 12.8px; +} +#l_side .toc-wrapper ul .toc-item.toc-level-2 .toc-child a, +#l_side .toc-wrapper ol .toc-item.toc-level-2 .toc-child a { + padding-left: 25.6px; +} +#l_side .toc-wrapper ul .toc-item.toc-level-3 .toc-child a, +#l_side .toc-wrapper ol .toc-item.toc-level-3 .toc-child a { + padding-left: 38.4px; +} +#l_side .toc-wrapper ul .toc-item.toc-level-4 .toc-child a, +#l_side .toc-wrapper ol .toc-item.toc-level-4 .toc-child a { + padding-left: 51.2px; +} +#l_side .toc-wrapper ul .toc-item.toc-level-5 .toc-child a, +#l_side .toc-wrapper ol .toc-item.toc-level-5 .toc-child a { + padding-left: 64px; +} +#l_side .toc-wrapper ul .toc-item.toc-level-6 .toc-child a, +#l_side .toc-wrapper ol .toc-item.toc-level-6 .toc-child a { + padding-left: 76.8px; +} +#l_side .toc-wrapper ul li, +#l_side .toc-wrapper ol li { + width: auto; + text-align: left; +} +#l_side .toc-wrapper ul li a, +#l_side .toc-wrapper ol li a { + padding: 0 8px 0 11px; + font-weight: bold; + width: 100%; +} +#l_side .toc-wrapper:empty { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +#l_side .toc-wrapper .toc-child { + font-size: 1rem; + overflow: hidden; + transition: max-height 0.6s ease-in; + -webkit-transition: max-height 0.6s ease-in; + -khtml-transition: max-height 0.6s ease-in; + -moz-transition: max-height 0.6s ease-in; + -o-transition: max-height 0.6s ease-in; + -ms-transition: max-height 0.6s ease-in; + max-height: 0; +} +#l_side .toc-wrapper .toc-item.active>.toc-link { + color: var(--color-list-hl); + border-left: 2px solid #3dd9b6; +} +#l_side .toc-wrapper .toc-item.active>.toc-child { + max-height: 1000px; +} +.md .video-wrap { + margin: 1.5rem auto; +} +.article span.btn, +.md span.btn { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; +} +.article span.btn a, +.md span.btn a { + text-decoration: none; + border-bottom: none; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + padding: 3px 4px 2px 4px; + margin: 2px; + line-height: 1.1; + border-radius: 2px; + -webkit-border-radius: 2px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.article span.btn a i, +.md span.btn a i { + margin-right: 2px; +} +.article span.btn a:not([href]), +.md span.btn a:not([href]) { + opacity: 0.5; + -webkit-opacity: 0.5; + -moz-opacity: 0.5; +} +.article span.btn a:not([href]):hover, +.md span.btn a:not([href]):hover { + cursor: $not-allowed, not-allowed; +} +.article span.btn a, +.md span.btn a, +.article span.btn.regular a, +.md span.btn.regular a { + color: #44d7b6; + border: 1px solid #44d7b6; +} +.article span.btn a:hover, +.md span.btn a:hover, +.article span.btn.regular a:hover, +.md span.btn.regular a:hover { + color: #ff5722; + border-color: #ff5722; +} +.article span.btn a i, +.md span.btn a i, +.article span.btn.regular a i, +.md span.btn.regular a i { + margin-right: 4px; +} +.article span.btn.regular a, +.md span.btn.regular a, +.article span.btn.solid a, +.md span.btn.solid a { + padding: 8px 12px; +} +.article span.btn.solid a, +.md span.btn.solid a { + border: none; + background: #44d7b6; + color: #fff; +} +.article span.btn.solid a:hover, +.md span.btn.solid a:hover { + color: #fff; + background: #ff5722; +} +.article span.btn.large a, +.md span.btn.large a { + font-size: 1rem; + padding: 12px 36px; +} +.article span.btn.large a i, +.md span.btn.large a i { + margin-right: 8px; +} +.article span.btn.center, +.md span.btn.center { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + text-align: center; +} +.article div.btns, +.md div.btns { + margin: 0 -8px; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + align-items: flex-start; + overflow: visible; + line-height: 1.8; +} +.article div.btns, +.md div.btns, +.article div.btns p, +.md div.btns p, +.article div.btns a, +.md div.btns a { + font-size: 0.8125rem; + color: var(--color-p); +} +.article div.btns b, +.md div.btns b { + font-size: 0.875rem; +} +.article div.btns.wide>a, +.md div.btns.wide>a { + padding-left: 32px; + padding-right: 32px; +} +.article div.btns.fill>a, +.md div.btns.fill>a { + flex-grow: 1; + width: auto; +} +.article div.btns.around, +.md div.btns.around { + justify-content: space-around; + -webkit-justify-content: space-around; + -khtml-justify-content: space-around; + -moz-justify-content: space-around; + -o-justify-content: space-around; + -ms-justify-content: space-around; +} +.article div.btns.center, +.md div.btns.center { + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; +} +.article div.btns.grid2>a, +.md div.btns.grid2>a { + width: calc(100%/2 - 16px); +} +@media screen and (max-width: 1024px) { + .article div.btns.grid2>a, + .md div.btns.grid2>a { + width: calc(100%/2 - 16px); + } +} +@media screen and (max-width: 768px) { + .article div.btns.grid2>a, + .md div.btns.grid2>a { + width: calc(100%/2 - 16px); + } +} +@media screen and (max-width: 500px) { + .article div.btns.grid2>a, + .md div.btns.grid2>a { + width: calc(100%/1 - 16px); + } +} +.article div.btns.grid3>a, +.md div.btns.grid3>a { + width: calc(100%/3 - 16px); +} +@media screen and (max-width: 1024px) { + .article div.btns.grid3>a, + .md div.btns.grid3>a { + width: calc(100%/3 - 16px); + } +} +@media screen and (max-width: 768px) { + .article div.btns.grid3>a, + .md div.btns.grid3>a { + width: calc(100%/3 - 16px); + } +} +@media screen and (max-width: 500px) { + .article div.btns.grid3>a, + .md div.btns.grid3>a { + width: calc(100%/1 - 16px); + } +} +.article div.btns.grid4>a, +.md div.btns.grid4>a { + width: calc(100%/4 - 16px); +} +@media screen and (max-width: 1024px) { + .article div.btns.grid4>a, + .md div.btns.grid4>a { + width: calc(100%/3 - 16px); + } +} +@media screen and (max-width: 768px) { + .article div.btns.grid4>a, + .md div.btns.grid4>a { + width: calc(100%/3 - 16px); + } +} +@media screen and (max-width: 500px) { + .article div.btns.grid4>a, + .md div.btns.grid4>a { + width: calc(100%/2 - 16px); + } +} +.article div.btns.grid5>a, +.md div.btns.grid5>a { + width: calc(100%/5 - 16px); +} +@media screen and (max-width: 1024px) { + .article div.btns.grid5>a, + .md div.btns.grid5>a { + width: calc(100%/4 - 16px); + } +} +@media screen and (max-width: 768px) { + .article div.btns.grid5>a, + .md div.btns.grid5>a { + width: calc(100%/3 - 16px); + } +} +@media screen and (max-width: 500px) { + .article div.btns.grid5>a, + .md div.btns.grid5>a { + width: calc(100%/2 - 16px); + } +} +.article div.btns a, +.md div.btns a { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + text-decoration: none; + border-bottom: none; + margin: 8px; + margin-top: calc(1.25 * 16px + 32px); + min-width: 120px; + font-weight: bold; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; + align-content: center; + align-items: center; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 8px; + text-align: center; + background: var(--color-block); + border-radius: 4px; + -webkit-border-radius: 4px; +} +.article div.btns a>img:first-child, +.md div.btns a>img:first-child, +.article div.btns a>i:first-child, +.md div.btns a>i:first-child { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + height: 64px; + width: 64px; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + margin: 16px 8px 4px 8px; + margin-top: calc(-1.25 * 16px - 32px); + border: 2px solid var(--color-card); + background: #fff; + line-height: 60px; + font-size: 28px; +} +.article div.btns a>img:first-child.auto, +.md div.btns a>img:first-child.auto, +.article div.btns a>i:first-child.auto, +.md div.btns a>i:first-child.auto { + width: auto; +} +.article div.btns a>i:first-child, +.md div.btns a>i:first-child { + color: #fff; + background: #3dd9b6; +} +.article div.btns a p, +.md div.btns a p, +.article div.btns a b, +.md div.btns a b { + margin: 0.25em; + font-weight: normal; + line-height: 1.25; + word-wrap: break-word; +} +.article div.btns a b, +.md div.btns a b { + font-weight: bold; + line-height: 1.3; +} +.article div.btns a img, +.md div.btns a img { + margin: 0.4em auto; +} +.article div.btns a:not([href]), +.md div.btns a:not([href]) { + cursor: default; + color: inherit; +} +.article div.btns a[href]:hover, +.md div.btns a[href]:hover { + background: rgba(255,87,34,0.15); +} +.article div.btns a[href]:hover, +.md div.btns a[href]:hover, +.article div.btns a[href]:hover b, +.md div.btns a[href]:hover b { + color: #ff5722; +} +.article div.btns a[href]:hover>img:first-child, +.md div.btns a[href]:hover>img:first-child, +.article div.btns a[href]:hover>i:first-child, +.md div.btns a[href]:hover>i:first-child { + transform: scale(1.1) translateY(-8px); + -webkit-transform: scale(1.1) translateY(-8px); + -khtml-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); + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1); +} +.article div.btns a[href]:hover>i:first-child, +.md div.btns a[href]:hover>i:first-child { + background: #ff5722; +} +.article div.btns.circle a>img:first-child, +.md div.btns.circle a>img:first-child, +.article div.btns.circle a>i:first-child, +.md div.btns.circle a>i:first-child { + border-radius: 32px; + -webkit-border-radius: 32px; +} +.article div.btns.rounded a>img:first-child, +.md div.btns.rounded a>img:first-child, +.article div.btns.rounded a>i:first-child, +.md div.btns.rounded a>i:first-child { + border-radius: 16px; + -webkit-border-radius: 16px; +} +.md .checkbox { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-items: center; + margin-top: 1em; + margin-bottom: 1em; +/* Checkbox */ +/* Radio */ +/* Colors */ +} +.md .checkbox+.checkbox { + margin-top: -1em; +} +.md .checkbox input { + transform: translate(0, -1px); + -webkit-transform: translate(0, -1px); + -khtml-transform: translate(0, -1px); + -moz-transform: translate(0, -1px); + -o-transform: translate(0, -1px); + -ms-transform: translate(0, -1px); + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + position: relative; + height: 16px; + width: 16px; + transition: all 0.15s ease-out 0s; + -webkit-transition: all 0.15s ease-out 0s; + -khtml-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; + cursor: pointer; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + outline: none; + border-radius: 2px; + -webkit-border-radius: 2px; + flex-shrink: 0; + margin-right: 8px; + pointer-events: none; +} +.md .checkbox input[type=checkbox]:before, +.md .checkbox input[type=checkbox]:after { + position: absolute; + content: ""; + background: #fff; +} +.md .checkbox input[type=checkbox]:before { + left: 1px; + top: 5px; + width: 0px; + height: 2px; + transition: all 0.2s ease-in; + -webkit-transition: all 0.2s ease-in; + -khtml-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; + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -khtml-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); +} +.md .checkbox input[type=checkbox]:after { + right: 7px; + bottom: 3px; + width: 2px; + height: 0px; + transition: all 0.2s ease-out; + -webkit-transition: all 0.2s ease-out; + -khtml-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; + transform: rotate(40deg); + -webkit-transform: rotate(40deg); + -khtml-transform: rotate(40deg); + -moz-transform: rotate(40deg); + -o-transform: rotate(40deg); + -ms-transform: rotate(40deg); + -webkit-transform: rotate(40deg); + -moz-transform: rotate(40deg); + -ms-transform: rotate(40deg); + -o-transform: rotate(40deg); + transition-delay: 0.25s; + -webkit-transition-delay: 0.25s; + -khtml-transition-delay: 0.25s; + -moz-transition-delay: 0.25s; + -o-transition-delay: 0.25s; + -ms-transition-delay: 0.25s; +} +.md .checkbox input[type=checkbox]:checked:before { + left: 0px; + top: 7px; + width: 6px; + height: 2px; +} +.md .checkbox input[type=checkbox]:checked:after { + right: 3px; + bottom: 1px; + width: 2px; + height: 10px; +} +.md .checkbox.minus input[type=checkbox]:before { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + left: 1px; + top: 5px; + width: 0px; + height: 2px; +} +.md .checkbox.minus input[type=checkbox]:after { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + left: 1px; + top: 5px; + width: 0px; + height: 2px; +} +.md .checkbox.minus input[type=checkbox]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.md .checkbox.minus input[type=checkbox]:checked:after { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.md .checkbox.plus input[type=checkbox]:before { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + left: 1px; + top: 5px; + width: 0px; + height: 2px; +} +.md .checkbox.plus input[type=checkbox]:after { + transform: rotate(0); + -webkit-transform: rotate(0); + -khtml-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + left: 5px; + top: 1px; + width: 2px; + height: 0px; +} +.md .checkbox.plus input[type=checkbox]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.md .checkbox.plus input[type=checkbox]:checked:after { + left: 5px; + top: 1px; + width: 2px; + height: 10px; +} +.md .checkbox.times input[type=checkbox]:before { + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -khtml-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + left: 3px; + top: 1px; + width: 0px; + height: 2px; +} +.md .checkbox.times input[type=checkbox]:after { + transform: rotate(135deg); + -webkit-transform: rotate(135deg); + -khtml-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -o-transform: rotate(135deg); + -ms-transform: rotate(135deg); + right: 3px; + top: 1px; + width: 0px; + height: 2px; +} +.md .checkbox.times input[type=checkbox]:checked:before { + left: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.md .checkbox.times input[type=checkbox]:checked:after { + right: 1px; + top: 5px; + width: 10px; + height: 2px; +} +.md .checkbox input[type=radio] { + border-radius: 50%; + -webkit-border-radius: 50%; +} +.md .checkbox input[type=radio]:before { + content: ""; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + width: 8px; + height: 8px; + border-radius: 50%; + -webkit-border-radius: 50%; + margin: 2px; + transform: scale(0); + -webkit-transform: scale(0); + -khtml-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transition: all 0.25s ease-out; + -webkit-transition: all 0.25s ease-out; + -khtml-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; +} +.md .checkbox input[type=radio]:checked:before { + transform: scale(1); + -webkit-transform: scale(1); + -khtml-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); +} +.md .checkbox input { + border: 2px solid #3dd9b6; +} +.md .checkbox input[type=checkbox]:checked { + background: #3dd9b6; +} +.md .checkbox input[type=radio]:checked:before { + background: #3dd9b6; +} +.md .checkbox.red input { + border-color: #fe5f58; +} +.md .checkbox.red input[type=checkbox]:checked { + background: #fe5f58; +} +.md .checkbox.red input[type=radio]:checked:before { + background: #fe5f58; +} +.md .checkbox.green input { + border-color: #3dc550; +} +.md .checkbox.green input[type=checkbox]:checked { + background: #3dc550; +} +.md .checkbox.green input[type=radio]:checked:before { + background: #3dc550; +} +.md .checkbox.yellow input { + border-color: #ffbd2b; +} +.md .checkbox.yellow input[type=checkbox]:checked { + background: #ffbd2b; +} +.md .checkbox.yellow input[type=radio]:checked:before { + background: #ffbd2b; +} +.md .checkbox.cyan input { + border-color: #1bcdfc; +} +.md .checkbox.cyan input[type=checkbox]:checked { + background: #1bcdfc; +} +.md .checkbox.cyan input[type=radio]:checked:before { + background: #1bcdfc; +} +.md .checkbox.blue input { + border-color: #2196f3; +} +.md .checkbox.blue input[type=checkbox]:checked { + background: #2196f3; +} +.md .checkbox.blue input[type=radio]:checked:before { + background: #2196f3; +} +article .checkbox p { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + margin-top: 0 !important; + margin-bottom: 0 !important; +} +div.dropmenu-wrapper { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; +} +div.dropmenu { + position: relative; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + color: #2092ec; +} +div.dropmenu:hover { + color: inherit; +} +div.dropmenu:hover >ul { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + left: 0; + margin-left: 0; + margin-top: 0px; +} +div.dropmenu ul>li { + list-style: none; +} +div.dropmenu ul>li >a:hover { + text-decoration: none !important; +} +div.dropmenu .list-v .list-v { + left: calc(100% - 0.5 * 16px); +} +div.gallery { + margin: 1em 0; + overflow: hidden; +} +div.gallery+.gallery { + margin-top: -1em; +} +div.gallery >.fancybox, +div.gallery >p>.fancybox { + margin: 1px; + padding: 0; + position: relative; +} +div.gallery >.fancybox a, +div.gallery >p>.fancybox a { + height: 100%; + width: 100%; +} +div.gallery >.fancybox img, +div.gallery >p>.fancybox img { + object-fit: cover; + height: 100%; + width: 100%; +} +div.gallery >.fancybox .image-caption, +div.gallery >p>.fancybox .image-caption { + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + transform: translateY(100%); + -webkit-transform: translateY(100%); + -khtml-transform: translateY(100%); + -moz-transform: translateY(100%); + -o-transform: translateY(100%); + -ms-transform: translateY(100%); + transition: all 0.3s ease; + -webkit-transition: all 0.3s ease; + -khtml-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + pointer-events: none; + position: absolute; + width: 100%; + bottom: 0; + text-align: center; + background: rgba(0,0,0,0.3); + color: #fff; +} +div.gallery >.fancybox .image-caption:empty, +div.gallery >p>.fancybox .image-caption:empty { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +div.gallery >.fancybox:hover .image-caption, +div.gallery >p>.fancybox:hover .image-caption { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; + transform: translateY(0); + -webkit-transform: translateY(0); + -khtml-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); +} +div.gallery, +div.gallery >p { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + align-items: center; + flex-wrap: nowrap; + -webkit-flex-wrap: nowrap; + -khtml-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + padding: 0 !important; + align-items: stretch; +} +div.gallery[col] { + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; +} +div.gallery[col='2']>.fancybox { + width: calc(50% - 2 * 1px); +} +div.gallery[col='3']>.fancybox { + width: calc(33.33% - 2 * 1px); +} +div.gallery[col='4']>.fancybox { + width: calc(25% - 2 * 1px); +} +div.gallery[col='5']>.fancybox { + width: calc(20% - 2 * 1px); +} +div.gallery[col='6']>.fancybox { + width: calc(16.66% - 2 * 1px); +} +div.gallery[col='7']>.fancybox { + width: calc(14.2857% - 2 * 1px); +} +div.gallery[col='8']>.fancybox { + width: calc(12.5% - 2 * 1px); +} +div.gallery >p { + margin: 0; +} +div.gallery.left, +div.gallery.left>p { + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; +} +div.gallery.center, +div.gallery.center>p { + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; +} +div.gallery.right, +div.gallery.right>p { + justify-content: flex-end; + -webkit-justify-content: flex-end; + -khtml-justify-content: flex-end; + -moz-justify-content: flex-end; + -o-justify-content: flex-end; + -ms-justify-content: flex-end; +} +div.gallery.stretch, +div.gallery.stretch>p { + align-items: stretch; +} +.fancybox-container .fancybox-stage { + cursor: zoom-out; +} +div.fancybox { + margin-top: 1em; + margin-bottom: 1em; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + align-items: center; + flex-wrap: nowrap; + -webkit-flex-wrap: nowrap; + -khtml-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + padding: 0 !important; + overflow: hidden; + border-radius: 2px; + -webkit-border-radius: 2px; +} +@media screen and (max-width: 500px) { + div.fancybox { + border-radius: 1px; + -webkit-border-radius: 1px; + } +} +div.fancybox a { + line-height: 0; + margin: 0 auto; + align-items: stretch; +} +div.fancybox .gallery { + overflow: hidden; +} +div.fancybox .image-caption { + font-size: 0.8125rem; + padding-top: 0.5em; + padding-bottom: 1em; + color: var(--color-meta); +} +div.fancybox .image-caption:empty { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +details { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + padding: 16px; + margin: 1em 0; + border-radius: 4px; + -webkit-border-radius: 4px; + background: var(--color-card); + font-size: 0.9375rem; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + border: 1px solid var(--color-block); +} +details summary { + cursor: pointer; + padding: 16px; + margin: -16px; + border-radius: 4px; + -webkit-border-radius: 4px; + color: rgba(68,68,68,0.7); + font-size: 0.875rem; + font-weight: bold; + position: relative; + line-height: normal; +} +details summary > p, +details summary > h1, +details summary > h2, +details summary > h3, +details summary > h4, +details summary > h5, +details summary > h6 { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline; + border-bottom: none !important; +} +details summary:hover { + color: var(--color-p); +} +details summary:hover:after { + position: absolute; + content: '+'; + text-align: center; + top: 50%; + transform: translateY(-50%); + -webkit-transform: translateY(-50%); + -khtml-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + right: 16px; +} +details >summary { + background: var(--color-block); +} +details[blue] { + border-color: #e8f4fd; +} +details[blue] >summary { + background: #e8f4fd; +} +details[cyan] { + border-color: #e8fafe; +} +details[cyan] >summary { + background: #e8fafe; +} +details[green] { + border-color: #ebf9ed; +} +details[green] >summary { + background: #ebf9ed; +} +details[yellow] { + border-color: #fff8e9; +} +details[yellow] >summary { + background: #fff8e9; +} +details[red] { + border-color: #feefee; +} +details[red] >summary { + background: #feefee; +} +details[open] { + border-color: rgba(68,68,68,0.2); +} +details[open] >summary { + border-bottom: 1px solid rgba(68,68,68,0.2); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +details[open][blue] { + border-color: rgba(33,150,243,0.3); +} +details[open][blue] >summary { + border-bottom-color: rgba(33,150,243,0.3); +} +details[open][cyan] { + border-color: rgba(27,205,252,0.3); +} +details[open][cyan] >summary { + border-bottom-color: rgba(27,205,252,0.3); +} +details[open][green] { + border-color: rgba(61,197,80,0.3); +} +details[open][green] >summary { + border-bottom-color: rgba(61,197,80,0.3); +} +details[open][yellow] { + border-color: rgba(255,189,43,0.3); +} +details[open][yellow] >summary { + border-bottom-color: rgba(255,189,43,0.3); +} +details[open][red] { + border-color: rgba(254,95,88,0.3); +} +details[open][red] >summary { + border-bottom-color: rgba(254,95,88,0.3); +} +details[open] >summary { + color: #444; + margin-bottom: 0; +} +details[open] >summary:hover:after { + content: '-'; +} +details[open] >div.content { + padding: 16px; + margin: -16px; + margin-top: 0; +} +details[open] >div.content p>a:hover { + text-decoration: underline; +} +details[open] >div.content > p:first-child, +details[open] >div.content > .tabs:first-child, +details[open] >div.content > ul:first-child, +details[open] >div.content > ol:first-child, +details[open] >div.content > .highlight:first-child, +details[open] >div.content > .note:first-child, +details[open] >div.content > details:first-child { + margin-top: 0; +} +details[open] >div.content > p:last-child, +details[open] >div.content > .tabs:last-child, +details[open] >div.content > ul:last-child, +details[open] >div.content > ol:last-child, +details[open] >div.content > .highlight:last-child, +details[open] >div.content > .note:last-child, +details[open] >div.content > details:last-child { + margin-bottom: 0; +} +.md .frame-wrap { + position: relative; + overflow: hidden; + margin: 0 auto; + max-width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: center; +} +.md .frame-wrap img, +.md .frame-wrap video { + border-radius: 0; + -webkit-border-radius: 0; +} +.md .frame-wrap .frame { + z-index: 1; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + position: absolute; + background-size: 100%; + -webkit-background-size: 100%; + -moz-background-size: 100%; + background-repeat: no-repeat; + overflow: hidden; +} +.md .img-wrap .frame-wrap[part] { + height: auto; +} +.md .frame-wrap#iphone11 img, +.md .frame-wrap#iphone11 video { + width: 287px; + margin-top: 19px; + margin-bottom: 20px; +} +.md .frame-wrap#iphone11 .frame { + background-image: url("https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@3/img/frame/iphone11.svg"); + width: 329px; + height: 658px; +} +.md .frame-wrap[part='top'] img, +.md .frame-wrap[part='top'] video { + margin-bottom: 0 !important; +} +.md .frame-wrap:not([part='bottom']) .frame { + top: 0; +} +.md .frame-wrap[part='bottom'] img, +.md .frame-wrap[part='bottom'] video { + bottom: 0; + margin-top: 0 !important; +} +.md .frame-wrap[part='bottom'] .frame { + bottom: 0; +} +@media screen and (max-width: 500px) { + .md .frame-wrap#iphone11 img, + .md .frame-wrap#iphone11 video { + width: 208px; + margin-top: 13px; + margin-bottom: 14px; + } + .md .frame-wrap#iphone11 .frame { + width: 238px; + height: 476px; + } +} +.users-wrap { + overflow: hidden; +} +.users-wrap .group-header { + margin: 0 0 1rem; +} +.users-wrap .group-header p { + margin: 0; + font-size: 0.875rem; +} +.users-wrap .group-header p:first-child { + font-size: 1.25rem; + font-weight: 500; +} +.users-wrap .group-body { + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + align-items: stretch; + margin-bottom: 2rem; +} +.users-wrap .friendsjs-wrap { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +.users-wrap .friendsjs-wrap .loading-wrap { + min-height: 50px; + margin: 2rem 0; + text-align: center; +} +.users-wrap .user-card { + flex-shrink: 1; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-items: stretch; + width: 12.5%; +} +@media screen and (max-width: 980px) { + .users-wrap .user-card { + width: 14.28%; + } +} +@media screen and (max-width: 900px) { + .users-wrap .user-card { + width: 16.66%; + } +} +@media screen and (max-width: 820px) { + .users-wrap .user-card { + width: 20%; + } +} +@media screen and (max-width: 768px) { + .users-wrap .user-card { + width: 16.66%; + } +} +@media screen and (max-width: 500px) { + .users-wrap .user-card { + width: 25%; + } +} +.users-wrap .user-card .card-link { + margin: 0; + width: 100%; + color: var(--text-p1); + font-size: 10px; + font-weight: 500; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + align-items: center; + text-align: center; + line-height: 1.2; + border-radius: 4px; + -webkit-border-radius: 4px; + overflow: hidden; + position: relative; + padding: 1rem 0.5rem; +} +.users-wrap .user-card .card-link img { + object-fit: cover; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + width: 48px; + height: 48px; + background: var(--card); + border-radius: 64px; + -webkit-border-radius: 64px; + margin: 0 0 0.5rem; +} +.users-wrap .user-card .card-link >img { + transition: transform 0.2s ease-out, box-shadow 0.2s ease-out; + -webkit-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out; + -khtml-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out; + -moz-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out; + -o-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out; + -ms-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out; +} +.users-wrap .user-card .card-link:hover { + background: var(--block-hover); +} +.users-wrap .user-card .card-link:hover img { + transform: scale(1.2) rotate(8deg); + -webkit-transform: scale(1.2) rotate(8deg); + -khtml-transform: scale(1.2) rotate(8deg); + -moz-transform: scale(1.2) rotate(8deg); + -o-transform: scale(1.2) rotate(8deg); + -ms-transform: scale(1.2) rotate(8deg); + box-shadow: 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); + -webkit-box-shadow: 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); +} +a.ghcard { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + line-height: 0; +} +.md .ghcard-group { + column-count: 2; + -webkit-column-count: 2; + -moz-column-count: 2; + column-gap: 0; + -webkit-column-gap: 0; + -moz-column-gap: 0; + margin: 0 -8px; +} +.md .ghcard-group .ghcard { + margin: 8px; +} +.md .img { + object-fit: contain; +} +img.inline { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline !important; + vertical-align: middle; + transform: translateY(-4px); + -webkit-transform: translateY(-4px); + -khtml-transform: translateY(-4px); + -moz-transform: translateY(-4px); + -o-transform: translateY(-4px); + -ms-transform: translateY(-4px); +} +.md .tag.link { + margin-top: 1em; + margin-bottom: 1em; +} +.md .link-card { + margin-right: 1em; + background: var(--color-block); + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-inline-flexbox /* TWEENER - IE 10 */; + display: -webkit-inline-flex /* NEW - Chrome */; + display: inline-flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: inline-flex; + align-items: center; + cursor: pointer; + text-align: center; + width: 361px; + max-width: 100%; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + color: var(--color-p); + border-radius: 8px; + -webkit-border-radius: 8px; +} +@media screen and (max-width: 425px) { + .md .link-card { + max-width: 100%; + width: 100%; + } +} +.md .link-card:hover { + 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); + -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); +} +.md .link-card div.left, +.md .link-card div.right { + pointer-events: none; +} +.md .link-card div.left { + width: 54px; + height: 54px; + margin: 12px; + overflow: hidden; + flex-shrink: 0; + position: relative; +} +.md .link-card div.left i { + font-size: 32px; + line-height: 48px; + margin-left: 4px; +} +.md .link-card div.left img { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + position: absolute; + border-radius: 8px/4; + -webkit-border-radius: 8px/4; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + -khtml-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); +} +.md .link-card div.right { + overflow: hidden; + margin-right: 16px; +} +.md .link-card p { + margin: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.md .link-card p.text { + font-weight: bold; +} +.md .link-card p.url { + flex-shrink: 0; + color: var(--color-meta); + font-size: 0.8125rem; +} +.md .link-group { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 16px; +} +@media screen and (max-width: 850px) { + .md .link-group { + grid-template-columns: 1fr; + } +} +.md .link-group .tag.link { + margin: 0; +} +.md .link-group .link-card { + width: 100%; +} +audio, +video { + border-radius: 4px; + -webkit-border-radius: 4px; + max-width: 100%; +} +video { + z-index: 1; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +video:hover { + box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24); + -webkit-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 /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -khtml-flex-wrap: wrap; + -moz-flex-wrap: wrap; + -o-flex-wrap: wrap; + -ms-flex-wrap: wrap; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; + align-items: flex-end; + margin: 1em -4px; +} +div.videos .video, +div.videos iframe { + width: 100%; + margin: 4px; +} +div.videos iframe { + border-radius: 4px; + -webkit-border-radius: 4px; + width: 100%; + min-height: 300px; +} +div.videos.left { + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; +} +div.videos.center { + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; +} +div.videos.right { + justify-content: flex-end; + -webkit-justify-content: flex-end; + -khtml-justify-content: flex-end; + -moz-justify-content: flex-end; + -o-justify-content: flex-end; + -ms-justify-content: flex-end; +} +div.videos.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); +} +div.note { + position: relative; + margin-top: 1em; + margin-bottom: 1em; + padding: 16px; + padding-left: calc(16px + 16px); + border-radius: 4px; + -webkit-border-radius: 4px; + font-size: 0.9375rem; + background: var(--color-block); + border-left: 4px solid #3dd9b6; +} +div.note h2, +div.note h3, +div.note h4, +div.note h5, +div.note h6 { + margin-top: 3px; + margin-bottom: 0; + padding-top: 0 !important; + border-bottom: initial; +} +div.note p, +div.note ul, +div.note ol, +div.note blockquote, +div.note img { + margin-top: 0.5em; + margin-bottom: 0.5em; +} +div.note .link-card { + background: var(--color-card); +} +div.note::before { + position: absolute; + top: calc(50% - 24px * 0.5); + left: 4px; + width: 24px; + height: 24px; + text-align: center; + font-weight: 600; + line-height: 24px; + vertical-align: middle; + font-family: 'Font Awesome 6 Free'; +} +div.note::before { + color: #3dd9b6; + content: '\f054'; +} +div.note::before { + content: '\f054'; +} +div.note.quote { + background: #e8f4fd; + border-color: #2196f3; +} +div.note.quote::before { + color: #2196f3; + content: '\f10d'; +} +div.note.info { + background: #ebfbf7; + border-color: #3dd9b6; +} +div.note.info::before { + color: #3dd9b6; + content: '\f129'; +} +div.note.success, +div.note.done { + background: #ebf9ed; + border-color: #3dc550; +} +div.note.success::before, +div.note.done::before { + color: #3dc550; + content: '\f00c'; +} +div.note.warning { + background: #fff8e9; + border-color: #ffbd2b; +} +div.note.warning::before { + color: #ffbd2b; + content: '\f12a'; +} +div.note.danger, +div.note.error { + background: #feefee; + border-color: #fe5f58; +} +div.note.danger::before, +div.note.error::before { + color: #fe5f58; + content: '\f00d'; +} +div.note.radiation::before { + content: '\f7b9'; +} +div.note.bug::before { + content: '\f188'; +} +div.note.idea::before { + content: '\f0eb'; +} +div.note.link::before { + content: '\f0c1'; +} +div.note.paperclip::before { + content: '\f0c6'; +} +div.note.todo::before { + content: '\f0ae'; +} +div.note.message::before { + content: '\f4ad'; +} +div.note.guide::before { + content: '\f277'; +} +div.note.download::before { + content: '\f019'; +} +div.note.up::before { + content: '\f102'; +} +div.note.undo::before { + content: '\f2ea'; +} +div.note.play::before { + content: '\f144'; +} +div.note.clear { + background: none; + border-color: none; +} +div.note.light { + background: #f5f5f5; + border-color: #a1a1a1; +} +div.note.light::before { + color: #a1a1a1; +} +div.note.gray { + background: #f5f5f5; + border-color: #696969; +} +div.note.gray::before { + color: #696969; +} +div.note.theme { + background: #ebfbf7; + border-color: #3dd9b6; +} +div.note.theme::before { + color: #3dd9b6; +} +div.note.red { + background: #feefee; + border-color: #fe5f58; +} +div.note.red::before { + color: #fe5f58; +} +div.note.yellow { + background: #fff8e9; + border-color: #ffbd2b; +} +div.note.yellow::before { + color: #ffbd2b; +} +div.note.green { + background: #ebf9ed; + border-color: #3dc550; +} +div.note.green::before { + color: #3dc550; +} +div.note.cyan { + background: #e8fafe; + border-color: #1bcdfc; +} +div.note.cyan::before { + color: #1bcdfc; +} +div.note.blue { + background: #e8f4fd; + border-color: #2196f3; +} +div.note.blue::before { + color: #2196f3; +} +.sites-wrap .group-header { + margin: 0 0 1rem; +} +.sites-wrap .group-header p { + margin: 0; + font-size: 0.875rem; +} +.sites-wrap .group-header p:first-child { + font-size: 1.25rem; + font-weight: 500; +} +.sites-wrap .group-body { + width: 100%; + margin-bottom: 2rem; +} +.sites-wrap .sitesjs-wrap { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +.sites-wrap .sitesjs-wrap .loading-wrap { + min-height: 50px; + margin: 2rem 0; + text-align: center; +} +.sites-wrap .group-body { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: grid; + grid-gap: 1rem 1rem; + grid-template-columns: repeat(auto-fill, calc((100% - 3 * 1rem) / 4)); + margin-bottom: 2rem; +} +@media screen and (max-width: 1024px) { + .sites-wrap .group-body { + grid-template-columns: repeat(auto-fill, calc((100% - 2 * 1rem) / 3)); + } +} +@media screen and (max-width: 900px) { + .sites-wrap .group-body { + grid-template-columns: repeat(auto-fill, calc((100% - 1 * 1rem) / 2)); + } +} +@media screen and (max-width: 768px) { + .sites-wrap .group-body { + grid-template-columns: repeat(auto-fill, calc((100% - 2 * 1rem) / 3)); + } +} +@media screen and (max-width: 500px) { + .sites-wrap .group-body { + grid-template-columns: repeat(auto-fill, calc((100% - 1 * 1rem) / 2)); + } +} +.sites-wrap .group-body .site-card .card-link { + width: 100%; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + -webkit-box-direction: normal; + -moz-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.sites-wrap .group-body .site-card .card-link >img { + width: 100%; + height: 120px; + border-radius: 4px; + -webkit-border-radius: 4px; + object-fit: cover; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2); +} +@media screen and (max-width: 1024px) { + .sites-wrap .group-body .site-card .card-link >img { + height: 150px; + } +} +@media screen and (max-width: 900px) { + .sites-wrap .group-body .site-card .card-link >img { + height: 180px; + } +} +@media screen and (max-width: 768px) { + .sites-wrap .group-body .site-card .card-link >img { + height: 150px; + } +} +.sites-wrap .group-body .site-card .card-link .info { + margin-top: 0.5rem; + line-height: 1.2; +} +.sites-wrap .group-body .site-card .card-link .info >img { + width: 28px; + height: 28px; + border-radius: 28px; + -webkit-border-radius: 28px; + float: left; + margin-right: 8px; + margin-top: 2px; +} +.sites-wrap .group-body .site-card .card-link .info span { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +.sites-wrap .group-body .site-card .card-link .info .title { + font-weight: 500; + color: var(--text-p1); + font-size: 0.875rem; + margin-top: 1px; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 1; +} +.sites-wrap .group-body .site-card .card-link .info .desc { + font-size: 10px; + margin-top: 2px; + word-wrap: break-word; + color: var(--text-p3); + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 2; +} +.sites-wrap .site-card .card-link >img { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.sites-wrap .site-card .card-link:hover >img { + 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); + -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); +} +p.p.subtitle { + font-weight: bold; + color: #3eb399; + font-size: 1.25rem !important; + padding-top: 1.5rem; +} +p.p.subtitle:first-child { + padding-top: 1rem; +} +span.p.logo, +p.p.logo { + font-family: "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Helvetica, monospace; +} +span.p.code, +p.p.code { + font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif; +} +span.p.left, +p.p.left { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + text-align: left; +} +span.p.center, +p.p.center { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + text-align: center; +} +span.p.right, +p.p.right { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + text-align: right; +} +span.p.small, +p.p.small { + font-size: 0.875rem; +} +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.5rem; + color: var(--color-h1); + padding-top: 2em; +} +span.p.h2, +p.p.h2 { + font-size: 1.5rem; + 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.25rem; + 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: #fe5f58; +} +span.p.yellow, +p.p.yellow { + color: #ffbd2b; +} +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; +} +.swiper-container { + width: 100%; + border-radius: 4px; + -webkit-border-radius: 4px; + --gap-p: 2rem; +} +.swiper-container:not(.swiper-container-initialized) { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +div.swiper-slide { + text-align: center; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -webkit-box; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -webkit-flex; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + align-self: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-justify-content: center; + -khtml-justify-content: center; + -moz-justify-content: center; + -o-justify-content: center; + -ms-justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 50%; +} +div.swiper-slide img { + border-radius: 4px; + -webkit-border-radius: 4px; +} +.swiper-container[width='max'] div.swiper-slide { + width: 100%; +} +.swiper-container[width='min'] div.swiper-slide { + width: 25%; +} +.swiper-button-prev, +.swiper-button-next { + padding: 1rem 0.5rem; + margin-top: -2rem !important; + border-radius: 4px; + -webkit-border-radius: 4px; + background: rgba(255,255,255,0.25); + transition: background 0.2s ease-out; + -webkit-transition: background 0.2s ease-out; + -khtml-transition: background 0.2s ease-out; + -moz-transition: background 0.2s ease-out; + -o-transition: background 0.2s ease-out; + -ms-transition: background 0.2s ease-out; + --swiper-theme-color: #000 !important; +} +.swiper-button-prev:after, +.swiper-button-next:after { + font-size: 1.2rem !important; + font-weight: 700 !important; +} +.swiper-button-prev:hover, +.swiper-button-next:hover { + background: #fff !important; + --swiper-theme-color: #ff5722 !important; +} +.md .table { + overflow: auto; + margin-top: 1em; + margin-bottom: 1em; +} +.md .table table { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: table; + width: 100%; +} +div.tabs { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + position: relative; + margin-top: 1em; + margin-bottom: 1em; + border-radius: 4px; + -webkit-border-radius: 4px; + background: var(--color-card); + border: 1px solid rgba(68,68,68,0.2); + font-size: 0.9375rem; +} +div.tabs .highlight, +div.tabs p, +div.tabs ul, +div.tabs ol, +div.tabs div.note, +div.tabs details { + margin-top: 1em; + margin-bottom: 1em; +} +div.tabs ul.nav-tabs { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: -ms-flexbox /* TWEENER - IE 10 */; + display: -webkit-flex /* NEW - Chrome */; + display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */; + display: flex; + overflow-x: auto; + white-space: nowrap; + justify-content: flex-start; + -webkit-justify-content: flex-start; + -khtml-justify-content: flex-start; + -moz-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-justify-content: flex-start; + margin: 0 !important; + padding: 8px 8px 0 8px; + background: var(--color-block); + border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + line-height: 1.5; +} +div.tabs ul.nav-tabs li.tab { + list-style-type: none; + margin-top: 0; + margin-bottom: 0; +} +div.tabs ul.nav-tabs li.tab:last-child { + padding-right: 16px; +} +div.tabs ul.nav-tabs li.tab a { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + cursor: pointer; + border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + padding: 8px; + text-align: center; + font-size: 0.875rem; + line-height: inherit; + font-weight: bold; + color: var(--color-meta); + border: 1px solid transparent; +} +div.tabs ul.nav-tabs li.tab a:hover { + color: var(--color-p); +} +div.tabs ul.nav-tabs li.tab a i { + pointer-events: none; +} +div.tabs ul.nav-tabs li.tab.active a { + cursor: default; + color: var(--color-p); + background: #fff; + border: 1px solid rgba(68,68,68,0.2); + border-bottom: 1px solid var(--color-card); +} +div.tabs .tab-content { + border-top: 1px solid rgba(68,68,68,0.2); + margin-top: -1px; +} +div.tabs .tab-content .tab-pane { + padding: 16px; +} +div.tabs .tab-content .tab-pane:not(.active) { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +div.tabs .tab-content .tab-pane.active { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; +} +div.tabs .tab-content .tab-pane > p:first-child, +div.tabs .tab-content .tab-pane > .tabs:first-child, +div.tabs .tab-content .tab-pane > ul:first-child, +div.tabs .tab-content .tab-pane > ol:first-child, +div.tabs .tab-content .tab-pane > .highlight:first-child, +div.tabs .tab-content .tab-pane > .note:first-child { + margin-top: 0; +} +div.tabs .tab-content .tab-pane > p:last-child, +div.tabs .tab-content .tab-pane > .tabs:last-child, +div.tabs .tab-content .tab-pane > ul:last-child, +div.tabs .tab-content .tab-pane > ol:last-child, +div.tabs .tab-content .tab-pane > .highlight:last-child, +div.tabs .tab-content .tab-pane > .note:last-child { + margin-bottom: 0; +} +.article del { + color: #8e8e8e; + text-decoration-color: #8e8e8e; +} +.article u { + color: var(--color-text); + text-decoration: none; + border-bottom: 1px solid #fe5f58; +} +.article emp { + color: var(--color-text); + border-bottom: 4px dotted #fe5f58; +} +.article wavy { + color: var(--color-text); + text-decoration-style: wavy; + text-decoration-line: underline; + text-decoration-color: #fe5f58; +} +.article psw { + color: transparent; + background: #a1a1a1; + border-radius: 2px; + -webkit-border-radius: 2px; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.article psw:hover { + color: var(--color-p); + background: none; +} +.article kbd { + border-radius: 4px; + -webkit-border-radius: 4px; + border: 1px solid #d2d2d2; + border-bottom-width: 2px; + background: #fafafa; + padding-left: 4px; + padding-right: 4px; +} +div.timenode { + position: relative; +} +div.timenode:before, +div.timenode:after { + content: ''; + z-index: 1; + position: absolute; + background: rgba(61,217,182,0.5); + width: 2px; + left: 7px; +} +div.timenode:before { + top: 0px; + height: 6px; +} +div.timenode:after { + top: 26px; + height: calc(100% - 26px); +} +div.timenode:last-child:after { + height: calc(100% - 26px - 16px); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} +div.timenode .meta, +div.timenode .body { + max-width: calc(100% - 24px); +} +div.timenode .meta { + position: relative; + color: var(--color-meta); + font-size: 0.875rem; + line-height: 32px; + height: 32px; +} +div.timenode .meta:before, +div.timenode .meta:after { + content: ''; + position: absolute; + top: 8px; + z-index: 2; +} +div.timenode .meta:before { + background: rgba(61,217,182,0.5); + width: 16px; + height: 16px; + border-radius: 8px; + -webkit-border-radius: 8px; +} +div.timenode .meta:after { + background: #3dd9b6; + margin-left: 2px; + margin-top: 2px; + width: 12px; + height: 12px; + border-radius: 6px; + -webkit-border-radius: 6px; + transform: scale(0.5); + -webkit-transform: scale(0.5); + -khtml-transform: scale(0.5); + -moz-transform: scale(0.5); + -o-transform: scale(0.5); + -ms-transform: scale(0.5); + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +div.timenode .meta p { + font-weight: bold; + margin: 0 0 0 24px; +} +div.timenode .body { + margin: 4px 0 16px 24px; + padding: 16px; + border-radius: 8px; + -webkit-border-radius: 8px; + background: var(--color-block); + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; +} +div.timenode .body:empty { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +div.timenode .body >*:first-child { + margin-top: 0.25em; +} +div.timenode .body >*:last-child { + margin-bottom: 0.25em; +} +div.timenode .body .highlight { + border: 1px solid #e4e4e4; +} +div.timenode:hover .meta { + color: var(--color-text); +} +div.timenode:hover .meta:before { + background: rgba(255,87,34,0.5); +} +div.timenode:hover .meta:after { + background: #ff5722; + transform: scale(1); + -webkit-transform: scale(1); + -khtml-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); +} +.article mjx-container { + font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif; + padding: 16px 8px; + border-radius: 4px; + -webkit-border-radius: 4px; + min-width: 0 !important; +} +.article mjx-container[jax="CHTML"][display="true"], +.article .has-jax { + overflow: auto hidden; +} +.article mjx-container + br { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +.fa.red, +.fas.red, +.far.red, +.fad.red, +.fal.red, +.fa-solid.red, +.fa-regular.red, +.fa-duotone.red, +.fa-light.red, +.fa-thin.red, +.iziToast>.iziToast-body .iziToast-icon.red { + color: #f44336; +} +.fa.pink, +.fas.pink, +.far.pink, +.fad.pink, +.fal.pink, +.fa-solid.pink, +.fa-regular.pink, +.fa-duotone.pink, +.fa-light.pink, +.fa-thin.pink, +.iziToast>.iziToast-body .iziToast-icon.pink { + color: #e91e63; +} +.fa.purple, +.fas.purple, +.far.purple, +.fad.purple, +.fal.purple, +.fa-solid.purple, +.fa-regular.purple, +.fa-duotone.purple, +.fa-light.purple, +.fa-thin.purple, +.iziToast>.iziToast-body .iziToast-icon.purple { + color: #9c27b0; +} +.fa.indigo, +.fas.indigo, +.far.indigo, +.fad.indigo, +.fal.indigo, +.fa-solid.indigo, +.fa-regular.indigo, +.fa-duotone.indigo, +.fa-light.indigo, +.fa-thin.indigo, +.iziToast>.iziToast-body .iziToast-icon.indigo { + color: #3f51b5; +} +.fa.light-blue, +.fas.light-blue, +.far.light-blue, +.fad.light-blue, +.fal.light-blue, +.fa-solid.light-blue, +.fa-regular.light-blue, +.fa-duotone.light-blue, +.fa-light.light-blue, +.fa-thin.light-blue, +.iziToast>.iziToast-body .iziToast-icon.light-blue { + color: #4ba7ee; +} +.fa.deep-blue, +.fas.deep-blue, +.far.deep-blue, +.fad.deep-blue, +.fal.deep-blue, +.fa-solid.deep-blue, +.fa-regular.deep-blue, +.fa-duotone.deep-blue, +.fa-light.deep-blue, +.fa-thin.deep-blue, +.iziToast>.iziToast-body .iziToast-icon.deep-blue { + color: #3367d6; +} +.fa.teal, +.fas.teal, +.far.teal, +.fad.teal, +.fal.teal, +.fa-solid.teal, +.fa-regular.teal, +.fa-duotone.teal, +.fa-light.teal, +.fa-thin.teal, +.iziToast>.iziToast-body .iziToast-icon.teal { + color: #009688; +} +.fa.light-green, +.fas.light-green, +.far.light-green, +.fad.light-green, +.fal.light-green, +.fa-solid.light-green, +.fa-regular.light-green, +.fa-duotone.light-green, +.fa-light.light-green, +.fa-thin.light-green, +.iziToast>.iziToast-body .iziToast-icon.light-green { + color: #8bc34a; +} +.fa.orange, +.fas.orange, +.far.orange, +.fad.orange, +.fal.orange, +.fa-solid.orange, +.fa-regular.orange, +.fa-duotone.orange, +.fa-light.orange, +.fa-thin.orange, +.iziToast>.iziToast-body .iziToast-icon.orange { + color: #ff9800; +} +.fa.deep-orange, +.fas.deep-orange, +.far.deep-orange, +.fad.deep-orange, +.fal.deep-orange, +.fa-solid.deep-orange, +.fa-regular.deep-orange, +.fa-duotone.deep-orange, +.fa-light.deep-orange, +.fa-thin.deep-orange, +.iziToast>.iziToast-body .iziToast-icon.deep-orange { + color: #ff5722; +} +.fa.brown, +.fas.brown, +.far.brown, +.fad.brown, +.fal.brown, +.fa-solid.brown, +.fa-regular.brown, +.fa-duotone.brown, +.fa-light.brown, +.fa-thin.brown, +.iziToast>.iziToast-body .iziToast-icon.brown { + color: #795548; +} +.fa.blue-grey, +.fas.blue-grey, +.far.blue-grey, +.fad.blue-grey, +.fal.blue-grey, +.fa-solid.blue-grey, +.fa-regular.blue-grey, +.fa-duotone.blue-grey, +.fa-light.blue-grey, +.fa-thin.blue-grey, +.iziToast>.iziToast-body .iziToast-icon.blue-grey { + color: #607d8b; +} +.fa.yellow, +.fas.yellow, +.far.yellow, +.fad.yellow, +.fal.yellow, +.fa-solid.yellow, +.fa-regular.yellow, +.fa-duotone.yellow, +.fa-light.yellow, +.fa-thin.yellow, +.iziToast>.iziToast-body .iziToast-icon.yellow { + color: #fcec60; +} +.fa.TURQUOISE, +.fas.TURQUOISE, +.far.TURQUOISE, +.fad.TURQUOISE, +.fal.TURQUOISE, +.fa-solid.TURQUOISE, +.fa-regular.TURQUOISE, +.fa-duotone.TURQUOISE, +.fa-light.TURQUOISE, +.fa-thin.TURQUOISE, +.iziToast>.iziToast-body .iziToast-icon.TURQUOISE { + color: #1abc9c; +} +.fa.EMERALD, +.fas.EMERALD, +.far.EMERALD, +.fad.EMERALD, +.fal.EMERALD, +.fa-solid.EMERALD, +.fa-regular.EMERALD, +.fa-duotone.EMERALD, +.fa-light.EMERALD, +.fa-thin.EMERALD, +.iziToast>.iziToast-body .iziToast-icon.EMERALD { + color: #2ecc71; +} +.fa.PETERRIVE, +.fas.PETERRIVE, +.far.PETERRIVE, +.fad.PETERRIVE, +.fal.PETERRIVE, +.fa-solid.PETERRIVE, +.fa-regular.PETERRIVE, +.fa-duotone.PETERRIVE, +.fa-light.PETERRIVE, +.fa-thin.PETERRIVE, +.iziToast>.iziToast-body .iziToast-icon.PETERRIVE { + color: #3498db; +} +.fa.AMETHYST, +.fas.AMETHYST, +.far.AMETHYST, +.fad.AMETHYST, +.fal.AMETHYST, +.fa-solid.AMETHYST, +.fa-regular.AMETHYST, +.fa-duotone.AMETHYST, +.fa-light.AMETHYST, +.fa-thin.AMETHYST, +.iziToast>.iziToast-body .iziToast-icon.AMETHYST { + color: #9b59b6; +} +.fa.WETASPHALT, +.fas.WETASPHALT, +.far.WETASPHALT, +.fad.WETASPHALT, +.fal.WETASPHALT, +.fa-solid.WETASPHALT, +.fa-regular.WETASPHALT, +.fa-duotone.WETASPHALT, +.fa-light.WETASPHALT, +.fa-thin.WETASPHALT, +.iziToast>.iziToast-body .iziToast-icon.WETASPHALT { + color: #34495e; +} +.fa.GREENSEA, +.fas.GREENSEA, +.far.GREENSEA, +.fad.GREENSEA, +.fal.GREENSEA, +.fa-solid.GREENSEA, +.fa-regular.GREENSEA, +.fa-duotone.GREENSEA, +.fa-light.GREENSEA, +.fa-thin.GREENSEA, +.iziToast>.iziToast-body .iziToast-icon.GREENSEA { + color: #16a085; +} +.fa.NEPHRITIS, +.fas.NEPHRITIS, +.far.NEPHRITIS, +.fad.NEPHRITIS, +.fal.NEPHRITIS, +.fa-solid.NEPHRITIS, +.fa-regular.NEPHRITIS, +.fa-duotone.NEPHRITIS, +.fa-light.NEPHRITIS, +.fa-thin.NEPHRITIS, +.iziToast>.iziToast-body .iziToast-icon.NEPHRITIS { + color: #27ae60; +} +.fa.BELIZEHOLE, +.fas.BELIZEHOLE, +.far.BELIZEHOLE, +.fad.BELIZEHOLE, +.fal.BELIZEHOLE, +.fa-solid.BELIZEHOLE, +.fa-regular.BELIZEHOLE, +.fa-duotone.BELIZEHOLE, +.fa-light.BELIZEHOLE, +.fa-thin.BELIZEHOLE, +.iziToast>.iziToast-body .iziToast-icon.BELIZEHOLE { + color: #2980b9; +} +.fa.WISTERIA, +.fas.WISTERIA, +.far.WISTERIA, +.fad.WISTERIA, +.fal.WISTERIA, +.fa-solid.WISTERIA, +.fa-regular.WISTERIA, +.fa-duotone.WISTERIA, +.fa-light.WISTERIA, +.fa-thin.WISTERIA, +.iziToast>.iziToast-body .iziToast-icon.WISTERIA { + color: #8e44ad; +} +.fa.MIDNIGHTBLUE, +.fas.MIDNIGHTBLUE, +.far.MIDNIGHTBLUE, +.fad.MIDNIGHTBLUE, +.fal.MIDNIGHTBLUE, +.fa-solid.MIDNIGHTBLUE, +.fa-regular.MIDNIGHTBLUE, +.fa-duotone.MIDNIGHTBLUE, +.fa-light.MIDNIGHTBLUE, +.fa-thin.MIDNIGHTBLUE, +.iziToast>.iziToast-body .iziToast-icon.MIDNIGHTBLUE { + color: #2c3e50; +} +.fa.SUNFLOWER, +.fas.SUNFLOWER, +.far.SUNFLOWER, +.fad.SUNFLOWER, +.fal.SUNFLOWER, +.fa-solid.SUNFLOWER, +.fa-regular.SUNFLOWER, +.fa-duotone.SUNFLOWER, +.fa-light.SUNFLOWER, +.fa-thin.SUNFLOWER, +.iziToast>.iziToast-body .iziToast-icon.SUNFLOWER { + color: #f1c40f; +} +.fa.CARROT, +.fas.CARROT, +.far.CARROT, +.fad.CARROT, +.fal.CARROT, +.fa-solid.CARROT, +.fa-regular.CARROT, +.fa-duotone.CARROT, +.fa-light.CARROT, +.fa-thin.CARROT, +.iziToast>.iziToast-body .iziToast-icon.CARROT { + color: #e67e22; +} +.fa.ALIZARIN, +.fas.ALIZARIN, +.far.ALIZARIN, +.fad.ALIZARIN, +.fal.ALIZARIN, +.fa-solid.ALIZARIN, +.fa-regular.ALIZARIN, +.fa-duotone.ALIZARIN, +.fa-light.ALIZARIN, +.fa-thin.ALIZARIN, +.iziToast>.iziToast-body .iziToast-icon.ALIZARIN { + color: #e74c3c; +} +.fa.CLOUDS, +.fas.CLOUDS, +.far.CLOUDS, +.fad.CLOUDS, +.fal.CLOUDS, +.fa-solid.CLOUDS, +.fa-regular.CLOUDS, +.fa-duotone.CLOUDS, +.fa-light.CLOUDS, +.fa-thin.CLOUDS, +.iziToast>.iziToast-body .iziToast-icon.CLOUDS { + color: #ecf0f1; +} +.fa.CONCRETE, +.fas.CONCRETE, +.far.CONCRETE, +.fad.CONCRETE, +.fal.CONCRETE, +.fa-solid.CONCRETE, +.fa-regular.CONCRETE, +.fa-duotone.CONCRETE, +.fa-light.CONCRETE, +.fa-thin.CONCRETE, +.iziToast>.iziToast-body .iziToast-icon.CONCRETE { + color: #95a5a6; +} +.fa.ORANGE, +.fas.ORANGE, +.far.ORANGE, +.fad.ORANGE, +.fal.ORANGE, +.fa-solid.ORANGE, +.fa-regular.ORANGE, +.fa-duotone.ORANGE, +.fa-light.ORANGE, +.fa-thin.ORANGE, +.iziToast>.iziToast-body .iziToast-icon.ORANGE { + color: #f39c12; +} +.fa.PUMPKIN, +.fas.PUMPKIN, +.far.PUMPKIN, +.fad.PUMPKIN, +.fal.PUMPKIN, +.fa-solid.PUMPKIN, +.fa-regular.PUMPKIN, +.fa-duotone.PUMPKIN, +.fa-light.PUMPKIN, +.fa-thin.PUMPKIN, +.iziToast>.iziToast-body .iziToast-icon.PUMPKIN { + color: #d35400; +} +.fa.POMEGRANATE, +.fas.POMEGRANATE, +.far.POMEGRANATE, +.fad.POMEGRANATE, +.fal.POMEGRANATE, +.fa-solid.POMEGRANATE, +.fa-regular.POMEGRANATE, +.fa-duotone.POMEGRANATE, +.fa-light.POMEGRANATE, +.fa-thin.POMEGRANATE, +.iziToast>.iziToast-body .iziToast-icon.POMEGRANATE { + color: #c0392b; +} +.fa.SILVER, +.fas.SILVER, +.far.SILVER, +.fad.SILVER, +.fal.SILVER, +.fa-solid.SILVER, +.fa-regular.SILVER, +.fa-duotone.SILVER, +.fa-light.SILVER, +.fa-thin.SILVER, +.iziToast>.iziToast-body .iziToast-icon.SILVER { + color: #bdc3c7; +} +.fa.ASBESTOS, +.fas.ASBESTOS, +.far.ASBESTOS, +.fad.ASBESTOS, +.fal.ASBESTOS, +.fa-solid.ASBESTOS, +.fa-regular.ASBESTOS, +.fa-duotone.ASBESTOS, +.fa-light.ASBESTOS, +.fa-thin.ASBESTOS, +.iziToast>.iziToast-body .iziToast-icon.ASBESTOS { + color: #7f8c8d; +} +.highlight { + position: relative; +} +.btn-copy { + z-index: 1; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: inline-block; + cursor: pointer; + border: none; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -webkit-appearance: none; + font-family: Menlo, Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif; + font-size: 11px; + font-weight: bold; + padding: 4px 8px; + color: var(--color-meta); + background: var(--color-block); + border-radius: 3px; + -webkit-border-radius: 3px; + box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1); + position: absolute; + top: 1px; + right: 1px; + opacity: 0; + -webkit-opacity: 0; + -moz-opacity: 0; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.btn-copy >i { + margin-right: 4px; +} +.btn-copy:hover { + color: #ff5722; + background: #ffeee8; +} +.highlight:hover .btn-copy { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; +} +.article pre:hover .btn-copy { + opacity: 1; + -webkit-opacity: 1; + -moz-opacity: 1; +} +.hljs:before, +.highlight:before { + position: absolute; + top: 0; + right: 0; + color: var(--color-meta); + font-size: 13px; + padding: 4px 8px; +} +.hljs.md:before, +.highlight.md:before, +.hljs.markdown:before, +.highlight.markdown:before { + content: "md"; +} +.hljs.yaml:before, +.highlight.yaml:before { + content: "YAML"; +} +.hljs.json:before, +.highlight.json:before { + content: "JSON"; +} +.hljs.html:before, +.highlight.html:before { + content: "HTML"; +} +.hljs.js:before, +.highlight.js:before, +.hljs.javascript:before, +.highlight.javascript:before { + content: "JS"; +} +.hljs.css:before, +.highlight.css:before { + content: "CSS"; +} +.hljs.less:before, +.highlight.less:before { + content: "Less"; +} +.hljs.stylus:before, +.highlight.stylus:before { + content: "Stylus"; +} +.hljs.bash:before, +.highlight.bash:before { + content: "bash"; +} +.hljs.shell:before, +.highlight.shell:before { + content: "shell"; +} +.hljs.sh:before, +.highlight.sh:before { + content: "sh"; +} +.hljs.ini:before, +.highlight.ini:before { + content: "ini"; +} +.hljs.c:before, +.highlight.c:before { + content: "C"; +} +.hljs.cpp:before, +.highlight.cpp:before { + content: "C++"; +} +.hljs.objc:before, +.highlight.objc:before, +.hljs.objectivec:before, +.highlight.objectivec:before { + content: "Objective-C"; +} +.hljs.swift:before, +.highlight.swift:before { + content: "Swift"; +} +.hljs.java:before, +.highlight.java:before { + content: "Java"; +} +.hljs.python:before, +.highlight.python:before { + content: "Python"; +} +.hljs.php:before, +.highlight.php:before { + content: "PHP"; +} +.hljs.rust:before, +.highlight.rust:before { + content: "Rust"; +} +.hljs.sql:before, +.highlight.sql:before { + content: "SQL"; +} +.hljs.ruby:before, +.highlight.ruby:before { + content: "Ruby"; +} +.hljs.makefile:before, +.highlight.makefile:before { + content: "Makefile"; +} +.hljs.go:before, +.highlight.go:before { + content: "Go"; +} +.hljs.typescript:before, +.highlight.typescript:before { + content: "TypeScript"; +} +.highlight pre .line, +.highlight pre .params { + color: rgba(68,68,68,0.9); +} +.highlight pre .line .addition { + color: #3fa33f; +} +.highlight pre .line .deletion { + color: #ee2b29; +} +.highlight pre .marked { + background-color: rgba(254,213,66,0.4); + padding: 2px 8px 2px 0; + border-radius: 2px; + -webkit-border-radius: 2px; + width: 100%; +} +.highlight pre .title, +.highlight pre .attr, +.highlight pre .attribute { + color: #3f51b5; +} +.highlight pre .comment { + color: var(--color-meta); +} +.highlight pre .keyword, +.highlight pre .meta-keyword, +.highlight pre .javascript .function { + color: #9c27b0; +} +.highlight pre .type, +.highlight pre .built_in, +.highlight pre .tag .name { + color: #4ba7ee; +} +.highlight pre .variable, +.highlight pre .regexp, +.highlight pre .ruby .constant, +.highlight pre .xml .tag .title, +.highlight pre .xml .pi, +.highlight pre .xml .doctype, +.highlight pre .html .doctype, +.highlight pre .css .id, +.highlight pre .css .class, +.highlight pre .css .pseudo { + color: #fd8607; +} +.highlight pre .number, +.highlight pre .preprocessor, +.highlight pre .literal, +.highlight pre .constant { + color: #fd8607; +} +.highlight pre .class, +.highlight pre .ruby .class .title, +.highlight pre .css .rules .attribute { + color: #ff9800; +} +.highlight pre .string, +.highlight pre .meta-string { + color: #449e48; +} +.highlight pre .value, +.highlight pre .inheritance, +.highlight pre .header, +.highlight pre .ruby .symbol, +.highlight pre .xml .cdata { + color: #4caf50; +} +.highlight pre .css .hexcolor { + color: #6cc; +} +.highlight pre .function, +.highlight pre .python .decorator, +.highlight pre .python .title, +.highlight pre .ruby .function .title, +.highlight pre .ruby .title .keyword, +.highlight pre .perl .sub, +.highlight pre .javascript .title, +.highlight pre .coffeescript .title { + color: #69c; +} +.highlight.html .line .tag .name, +.highlight.css .line .tag .name, +.highlight.less .line .tag .name, +.highlight.stylus .line .tag .name, +.highlight.html .line .selector-tag, +.highlight.css .line .selector-tag, +.highlight.less .line .selector-tag, +.highlight.stylus .line .selector-tag { + color: #ee2b29; +} +.highlight.html .line .selector-class, +.highlight.css .line .selector-class, +.highlight.less .line .selector-class, +.highlight.stylus .line .selector-class, +.highlight.html .line .selector-attr, +.highlight.css .line .selector-attr, +.highlight.less .line .selector-attr, +.highlight.stylus .line .selector-attr { + color: #fd8607; +} +.highlight.html .line .attribute, +.highlight.css .line .attribute, +.highlight.less .line .attribute, +.highlight.stylus .line .attribute { + color: #3f51b5; +} +.highlight.html .line .number, +.highlight.css .line .number, +.highlight.less .line .number, +.highlight.stylus .line .number { + color: #17afca; +} +.highlight.objc .line .meta, +.highlight.objectivec .line .meta, +.highlight.swift .line .meta, +.highlight.c .line .meta { + color: #9c27b0; +} +.highlight.objc .line .meta-string, +.highlight.objectivec .line .meta-string, +.highlight.swift .line .meta-string, +.highlight.c .line .meta-string, +.highlight.objc .line .string, +.highlight.objectivec .line .string, +.highlight.swift .line .string, +.highlight.c .line .string { + color: #fb3f1b; +} +.highlight.objc .line .class, +.highlight.objectivec .line .class, +.highlight.swift .line .class, +.highlight.c .line .class { + color: rgba(68,68,68,0.9); +} +.highlight.objc .line .class .title, +.highlight.objectivec .line .class .title, +.highlight.swift .line .class .title, +.highlight.c .line .class .title { + color: #1e80f0; +} +.highlight.objc .line .comment, +.highlight.objectivec .line .comment, +.highlight.swift .line .comment, +.highlight.c .line .comment { + color: #3fa33f; +} +.highlight.json .line .attr { + color: #e24f5a; +} +.highlight.json .line .literal { + color: #3f51b5; +} +.highlight.yaml .line .attr { + color: #e24f5a; +} +pre { + position: relative; +} +.hljs { + margin: -16px !important; + padding: 16px !important; + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} +.hljs::-webkit-scrollbar { + height: 4px; + width: 4px; +} +.hljs::-webkit-scrollbar-track-piece { + background: transparent; +} +.hljs::-webkit-scrollbar-thumb { + background: #3dd9b6; + cursor: pointer; + border-radius: 2px; + -webkit-border-radius: 2px; +} +.hljs::-webkit-scrollbar-thumb:hover { + background: #ff5722; +} +.highlight { + position: relative; + width: 100%; + margin: 1em 0; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + background: var(--color-block); + font-size: 0.8125rem; + font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif; + border-radius: 4px; + -webkit-border-radius: 4px; + line-height: 1.5; + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; +} +.highlight:hover { + background: var(--color-codeblock); +} +.highlight:hover figcaption { + transition: all 0.28s ease; + -webkit-transition: all 0.28s ease; + -khtml-transition: all 0.28s ease; + -moz-transition: all 0.28s ease; + -o-transition: all 0.28s ease; + -ms-transition: all 0.28s ease; + background: #ffeed2; +} +.highlight:hover .gutter { + background: #ffedd0; +} +.highlight figcaption { + font-size: 13px; + position: sticky; + left: 0; + padding: 4px 8px 4px 8px; + background: #eaeaea; + border-top-left-radius: calc(4px - 1px); + border-top-right-radius: calc(4px - 1px); +} +.highlight >table { + overflow: auto; + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: block; + margin: 0; + background-color: transparent; + border: none; +} +.highlight >table::-webkit-scrollbar { + height: 4px; + width: 4px; +} +.highlight >table::-webkit-scrollbar-track-piece { + background: transparent; +} +.highlight >table::-webkit-scrollbar-thumb { + background: transparent; + cursor: pointer; + border-radius: 4px; + -webkit-border-radius: 4px; +} +.highlight >table:hover::-webkit-scrollbar-thumb { + background: rgba(68,68,68,0.5); +} +.highlight >table:hover::-webkit-scrollbar-thumb:hover { + background: #ff5722; +} +.highlight >table td, +.highlight >table th { + padding: 0; + border: none; + line-height: 1.5; +} +.highlight >table tr { + background-color: transparent; +} +.highlight >table tr:hover { + background-color: transparent; +} +.highlight >table pre { + overflow-y: hidden; +} +.highlight >table .gutter { + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + padding: 0 12px; + text-align: right; + border-width: 0; + margin-left: 0; + position: sticky; + left: 0; + z-index: 1; + background: #e9e9e9; +} +.highlight >table .gutter pre { + color: var(--color-meta); +} +.highlight >table pre { + background: transparent; + margin: 0; + padding: 0; + border: none; +} +.highlight >table pre .code:before { + display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */; + display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */; + display: none; +} +.highlight >table .code { + padding: 20px 16px; + vertical-align: top; + background-color: transparent; +} +.highlight >table .code:before { + content: ""; + position: absolute; + top: 0; + right: 0; + color: var(--color-meta); + font-size: 13px; + padding: 4px 8px; +} +.iziToast-texts { + max-width: 300px !important; + min-width: 200px !important; +} +@media screen and (max-width: 500px) { + .iziToast-texts { + max-width: unset !important; + min-width: unset !important; + } +} +.iziToast-title { + margin-bottom: 6px !important; + font-size: 1rem !important; +} +.iziToast-message { + word-break: break-all !important; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..6e3cf91 --- /dev/null +++ b/index.html @@ -0,0 +1,4034 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
+
+ + +

SecureNexusLab

+ + +
+ +
+ + +
+ + +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. +Qu... + + +
+ +
+
+ + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:i3g1nner + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:蒙面阿强 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:rainki + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:风间映川 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:Celeste_GXB + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:老梁 + + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:gxh191 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:LCatro + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+
+ + + + + + + + + + +

+ +

+ +
+ + + 分享人:流竹君雅 + + + +
+ +
+
+ + + + + 社区分享 + + + + +
+ + + +
+ + +
+ +
+ + + +
+ + +
+
+ +

+ 1 / 4 +

+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..db5f790 --- /dev/null +++ b/js/app.js @@ -0,0 +1,1223 @@ +document.addEventListener("DOMContentLoaded", function () { + volantis.requestAnimationFrame(() => { + VolantisApp.init(); + VolantisApp.subscribe(); + VolantisFancyBox.init(); + highlightKeyWords.startFromURL(); + locationHash(); + + volantis.pjax.push(() => { + VolantisApp.pjaxReload(); + VolantisFancyBox.init(); + sessionStorage.setItem("domTitle", document.title); + highlightKeyWords.startFromURL(); + }, 'app.js'); + volantis.pjax.send(() => { + volantis.dom.switcher.removeClass('active'); // 关闭移动端激活的搜索框 + volantis.dom.header.removeClass('z_search-open'); // 关闭移动端激活的搜索框 + volantis.dom.wrapper.removeClass('sub'); // 跳转页面时关闭二级导航 + volantis.EventListener.remove() // 移除事件监听器 see: layout/_partial/scripts/global.ejs + }, 'app.js'); + }); +}); + +/* 锚点定位 */ +const locationHash = () => { + if (window.location.hash) { + let locationID = decodeURI(window.location.hash.split('#')[1]).replace(/\ /g, '-'); + let target = document.getElementById(locationID); + if (target) { + setTimeout(() => { + if (window.location.hash.startsWith('#fn')) { // hexo-reference https://github.com/volantis-x/hexo-theme-volantis/issues/647 + volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant', observer: true }) + } else { + // 锚点中上半部有大片空白 高度大概是 volantis.dom.header.offsetHeight + volantis.scroll.to(target, { addTop: 5, behavior: 'instant', observer: true }) + } + }, 1000) + } + } +} +Object.freeze(locationHash); + +/* Main */ +const VolantisApp = (() => { + const fn = {}, + COPYHTML = ''; + let scrollCorrection = 80; + + fn.init = () => { + if (volantis.dom.header) { + scrollCorrection = volantis.dom.header.clientHeight + 16; + } + + window.onresize = () => { + if (document.documentElement.clientWidth < 500) { + volantis.isMobile = 1; + } else { + volantis.isMobile = 0; + } + if (volantis.isMobile != volantis.isMobileOld) { + fn.setGlobalHeaderMenuEvent(); + fn.setHeader(); + fn.setHeaderSearch(); + } + } + volantis.scroll.push(fn.scrollEventCallBack, "scrollEventCallBack") + } + + fn.event = () => { + volantis.dom.$(document.getElementById("scroll-down"))?.on('click', function () { + fn.scrolltoElement(volantis.dom.bodyAnchor); + }); + + // 如果 sidebar 为空,隐藏 sidebar。 + const sidebar = document.querySelector("#l_side") + if (sidebar) { + const sectionList = sidebar.querySelectorAll("section") + if (!sectionList.length) { + document.querySelector("#l_main").classList.add("no_sidebar") + } + } + + // 站点信息 最后活动日期 + if (volantis.GLOBAL_CONFIG.sidebar.for_page.includes('webinfo') || volantis.GLOBAL_CONFIG.sidebar.for_post.includes('webinfo')) { + const lastupd = volantis.GLOBAL_CONFIG.sidebar.webinfo.lastupd; + if (!!document.getElementById('last-update-show') && lastupd.enable && lastupd.friendlyShow) { + document.getElementById('last-update-show').innerHTML = fn.utilTimeAgo(volantis.GLOBAL_CONFIG.lastupdate); + } + } + + // 站点信息 运行时间 + if (!!document.getElementById('webinfo-runtime-count')) { + let BirthDay = new Date(volantis.GLOBAL_CONFIG.sidebar.webinfo.runtime.data); + let timeold = (new Date().getTime() - BirthDay.getTime()); + let daysold = Math.floor(timeold / (24 * 60 * 60 * 1000)); + document.getElementById('webinfo-runtime-count').innerHTML = `${daysold} ${volantis.GLOBAL_CONFIG.sidebar.webinfo.runtime.unit}`; + } + + // 消息提示 复制时弹出 + document.body.oncopy = function () { + fn.messageCopyright() + }; + } + + fn.restData = () => { + scrollCorrection = volantis.dom.header ? volantis.dom.header.clientHeight + 16 : 80; + } + + fn.setIsMobile = () => { + if (document.documentElement.clientWidth < 500) { + volantis.isMobile = 1; + volantis.isMobileOld = 1; + } else { + volantis.isMobile = 0; + volantis.isMobileOld = 0; + } + } + + // 校正页面定位(被导航栏挡住的区域) + fn.scrolltoElement = (elem, correction = scrollCorrection) => { + volantis.scroll.to(elem, { + top: elem.offsetTop - correction + }) + } + + // 滚动事件回调们 + fn.scrollEventCallBack = () => { + // 【移动端 PC】////////////////////////////////////////////////////////////////////// + + // 显示/隐藏 Header导航 topBtn 【移动端 PC】 + const showHeaderPoint = volantis.dom.bodyAnchor.offsetTop - scrollCorrection; + const scrollTop = volantis.scroll.getScrollTop(); // 滚动条距离顶部的距离 + + // topBtn + if (volantis.dom.topBtn) { + if (scrollTop > volantis.dom.bodyAnchor.offsetTop) { + volantis.dom.topBtn.addClass('show'); + // 向上滚动高亮 topBtn + if (volantis.scroll.del > 0) { + volantis.dom.topBtn.removeClass('hl'); + } else { + volantis.dom.topBtn.addClass('hl'); + } + } else { + volantis.dom.topBtn.removeClass('show').removeClass('hl'); + } + } + + // Header导航 + if (volantis.dom.header) { + if (scrollTop - showHeaderPoint > -1) { + volantis.dom.header.addClass('show'); + } else { + volantis.dom.header.removeClass('show'); + } + } + + // 决定一二级导航栏的切换 【向上滚动切换为一级导航栏;向下滚动切换为二级导航栏】 【移动端 PC】 + if (pdata.ispage && volantis.dom.wrapper) { + if (volantis.scroll.del > 0 && scrollTop > 100) { // 向下滚动 + volantis.dom.wrapper.addClass('sub'); // <---- 二级导航显示 + } else if (volantis.scroll.del < 0) { // 向上滚动 + volantis.dom.wrapper.removeClass('sub'); // <---- 取消二级导航显示 一级导航显示 + } + } + + // 【移动端】////////////////////////////////////////////////////////////////////// + if (volantis.isMobile) { + // 【移动端】 页面滚动 隐藏 移动端toc目录按钮 + if (pdata.ispage && volantis.dom.tocTarget && volantis.dom.toc) { + volantis.dom.tocTarget.removeClass('active'); + volantis.dom.toc.removeClass('active'); + } + // 【移动端】 滚动时隐藏子菜单 + if (volantis.dom.mPhoneList) { + volantis.dom.mPhoneList.forEach(function (e) { + volantis.dom.$(e).hide(); + }) + } + } + } + + // 设置滚动锚点 + fn.setScrollAnchor = () => { + // click topBtn 滚动至bodyAnchor 【移动端 PC】 + if (volantis.dom.topBtn && volantis.dom.bodyAnchor) { + volantis.dom.topBtn.click(e => { + e.preventDefault(); + e.stopPropagation(); + fn.scrolltoElement(volantis.dom.bodyAnchor); + e.stopImmediatePropagation(); + }); + } + + } + + // 设置导航栏 + fn.setHeader = () => { + // !!! 此处的Dom对象需要重载 !!! + if (!pdata.ispage) return; + + // 填充二级导航文章标题 【移动端 PC】 + volantis.dom.wrapper.find('.nav-sub .title').html(document.title.split(" - ")[0]); + + // ====== bind events to every btn ========= + // 评论按钮 【移动端 PC】 + volantis.dom.comment = volantis.dom.$(document.getElementById("s-comment")); // 评论按钮 桌面端 移动端 + volantis.dom.commentTarget = volantis.dom.$(document.querySelector('#l_main article#comments')); // 评论区域 + if (volantis.dom.commentTarget) { + volantis.dom.comment.click(e => { // 评论按钮点击后 跳转到评论区域 + e.preventDefault(); + e.stopPropagation(); + fn.scrolltoElement(volantis.dom.commentTarget); + e.stopImmediatePropagation(); + }); + } else volantis.dom.comment.style.display = 'none'; // 关闭了评论,则隐藏评论按钮 + + // 移动端toc目录按钮 【移动端】 + if (volantis.isMobile) { + volantis.dom.toc = volantis.dom.$(document.getElementById("s-toc")); // 目录按钮 仅移动端 + volantis.dom.tocTarget = volantis.dom.$(document.querySelector('#l_side .toc-wrapper')); // 侧边栏的目录列表 + if (volantis.dom.tocTarget) { + // 点击移动端目录按钮 激活目录按钮 显示侧边栏的目录列表 + volantis.dom.toc.click((e) => { + e.stopPropagation(); + volantis.dom.tocTarget.toggleClass('active'); + volantis.dom.toc.toggleClass('active'); + }); + // 点击空白 隐藏 + volantis.dom.$(document).click(function (e) { + e.stopPropagation(); + if (volantis.dom.tocTarget) { + volantis.dom.tocTarget.removeClass('active'); + } + volantis.dom.toc.removeClass('active'); + }); + } else volantis.dom.toc.style.display = 'none'; // 隐藏toc目录按钮 + } + } + + // 设置导航栏菜单选中状态 【移动端 PC】 + fn.setHeaderMenuSelection = () => { + // !!! 此处的Dom对象需要重载 !!! + volantis.dom.headerMenu = volantis.dom.$(document.querySelectorAll('#l_header .navigation,#l_cover .navigation,#l_side .navigation')); // 导航列表 + + // 先把已经激活的取消激活 + volantis.dom.headerMenu.forEach(element => { + let li = volantis.dom.$(element).find('li a.active') + if (li) + li.removeClass('active') + let div = volantis.dom.$(element).find('div a.active') + if (div) + div.removeClass('active') + }); + + // replace '%' '/' '.' + var idname = location.pathname.replace(/\/|%|\./g, ''); + if (idname.length == 0) { + idname = 'home'; + } + var page = idname.match(/page\d{0,}$/g); + if (page) { + page = page[0]; + idname = idname.split(page)[0]; + } + var index = idname.match(/index.html/); + if (index) { + index = index[0]; + idname = idname.split(index)[0]; + } + // 转义字符如 [, ], ~, #, @ + idname = idname.replace(/(\[|\]|~|#|@)/g, '\\$1'); + if (idname && volantis.dom.headerMenu) { + volantis.dom.headerMenu.forEach(element => { + // idname 不能为数字开头, 加一个 action- 前缀 + let id = element.querySelector("[active-action=action-" + idname + "]") + if (id) { + volantis.dom.$(id).addClass('active') + } + }); + } + } + + // 设置全局事件 + fn.setGlobalHeaderMenuEvent = () => { + if (volantis.isMobile) { + // 【移动端】 关闭已经展开的子菜单 点击展开子菜单 + document.querySelectorAll('#l_header .m-phone li').forEach(function (_e) { + if (_e.querySelector(".list-v")) { + // 点击菜单 + volantis.dom.$(_e).click(function (e) { + e.stopPropagation(); + let menuType = '' + // 关闭.menu-phone + Array.from(e.currentTarget.children).some(val => { + if(val.classList.contains('s-menu')) { + menuType = 'menu' // 代表点击的是一级菜单外层的icon + return + } + if(val.classList.contains('menuitem')) { + menuType = 'item' // 点击的是下拉一级菜单 + return + } + }) + if(menuType === 'item') { + // 关闭已经展开的子菜单, 这一步是针对点击多个拥有二级子菜单的一级菜单,关闭其他所有一级菜单的二级菜单 + // ① + e.currentTarget.parentElement.childNodes.forEach(function (e2) { + if (Object.prototype.toString.call(e2) == '[object HTMLLIElement]') { + e2.childNodes.forEach(function (e1) { + if (Object.prototype.toString.call(e1) == '[object HTMLUListElement]') { + volantis.dom.$(e1).hide() + } + }) + } + }) + // 点击展开二级子菜单 + + /* + 由于采用事件委托,因此此处点击, 两种情况,currentTarget指向菜单按钮a.s-menu和ul的共同父元素li, 第二,指向ul中的li元素,也就是子菜单 + 区分:情况一的第一个子元素a的类名是s-menu;情况二的子元素a的类名为menuitem + 我们要点击外部的menu icon时要关闭的是.menu-phone而不是.menuitem + */ + let array = e.currentTarget.children + for (let index = 0; index < array.length; index++) { + const element = array[index]; + if (volantis.dom.$(element).title === 'menu') { // 移动端菜单栏异常 + volantis.dom.$(element).style.display = "flex" // https://github.com/volantis-x/hexo-theme-volantis/issues/706 + } else { + volantis.dom.$(element).show() + } + } + } else { + let menuPhone = document.querySelector('.switcher .menu-phone') + let isHiding = window.getComputedStyle(menuPhone).display === 'none' + if(isHiding) { + volantis.dom.$(menuPhone).show() + } else { + volantis.dom.$(menuPhone).hide() + // 别忘了再执行① + // 准备关闭所有二级菜单, 注意此时的e和点击一级菜单时候的e层级不同 + // 此处好像不能使用变量存储的menuPhone?要重新查询 + document.querySelector('.switcher .menu-phone').childNodes.forEach(function (e2) { + if (Object.prototype.toString.call(e2) == '[object HTMLLIElement]') { + e2.childNodes.forEach(function (e1) { + if (Object.prototype.toString.call(e1) == '[object HTMLUListElement]') { + volantis.dom.$(e1).hide() + } + }) + } + }) + } + } + + }, 0); + } + }) + } else { + // 【PC端】 hover时展开子菜单,点击时[target.baseURI==origin时]隐藏子菜单? 现有逻辑大部分情况不隐藏子菜单 + document.querySelectorAll('#wrapper .m-pc li > a[href]').forEach(function (e) { + volantis.dom.$(e.parentElement).click(function (e) { + e.stopPropagation(); + if (e.target.origin == e.target.baseURI) { + document.querySelectorAll('#wrapper .m-pc .list-v').forEach(function (e) { + volantis.dom.$(e).hide(); // 大概率不会执行 + }) + } + }, 0); + }) + } + fn.setPageHeaderMenuEvent(); + } + + // 【移动端】隐藏子菜单 + fn.setPageHeaderMenuEvent = () => { + if (!volantis.isMobile) return + // 【移动端】 点击空白处隐藏子菜单 + volantis.dom.$(document).click(function (e) { + volantis.dom.mPhoneList.forEach(function (e) { + volantis.dom.$(e).hide(); + }) + }); + } + + // 设置导航栏搜索框 【移动端】 + fn.setHeaderSearch = () => { + if (!volantis.isMobile) return; + if (!volantis.dom.switcher) return; + // 点击移动端搜索按钮 + volantis.dom.switcher.click(function (e) { + e.stopPropagation(); + volantis.dom.header.toggleClass('z_search-open'); // 激活移动端搜索框 + volantis.dom.switcher.toggleClass('active'); // 移动端搜索按钮 + }, false); // false : pjax 不移除监听 + // 点击空白取消激活 + volantis.dom.$(document).click(function (e) { + volantis.dom.header.removeClass('z_search-open'); + volantis.dom.switcher.removeClass('active'); + }, false); // false : pjax 不移除监听 + // 移动端点击搜索框 停止事件传播 + volantis.dom.search.click(function (e) { + e.stopPropagation(); + }, false); // false : pjax 不移除监听 + } + + // 设置 tabs 标签 【移动端 PC】 + fn.setTabs = () => { + let tabs = document.querySelectorAll('#l_main .tabs .nav-tabs') + if (!tabs) return + tabs.forEach(function (e) { + e.querySelectorAll('a').forEach(function (e) { + volantis.dom.$(e).on('click', (e) => { + e.preventDefault(); + e.stopPropagation(); + const $tab = volantis.dom.$(e.target.parentElement.parentElement.parentElement); + $tab.find('.nav-tabs .active').removeClass('active'); + volantis.dom.$(e.target.parentElement).addClass('active'); + $tab.find('.tab-content .active').removeClass('active'); + $tab.find(e.target.className).addClass('active'); + return false; + }); + }) + }) + } + + // hexo-reference 页脚跳转 https://github.com/volantis-x/hexo-theme-volantis/issues/647 + fn.footnotes = () => { + let ref = document.querySelectorAll('#l_main .footnote-backref, #l_main .footnote-ref > a'); + ref.forEach(function (e, i) { + ref[i].click = () => { }; // 强制清空原 click 事件 + volantis.dom.$(e).on('click', (e) => { + e.stopPropagation(); + e.preventDefault(); + let targetID = decodeURI(e.target.hash.split('#')[1]).replace(/\ /g, '-'); + let target = document.getElementById(targetID); + if (target) { + volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' }) + } + }); + }) + } + + // 工具类:代码块复制 + fn.utilCopyCode = (Selector) => { + document.querySelectorAll(Selector).forEach(node => { + const test = node.insertAdjacentHTML("beforebegin", COPYHTML); + const _BtnCopy = node.previousSibling; + _BtnCopy.onclick = e => { + e.stopPropagation(); + const _icon = _BtnCopy.querySelector('i'); + const _span = _BtnCopy.querySelector('span'); + + node.focus(); + const range = new Range(); + range.selectNodeContents(node); + document.getSelection().removeAllRanges(); + document.getSelection().addRange(range); + + const str = document.getSelection().toString(); + fn.utilWriteClipText(str).then(() => { + fn.messageCopyright(); + _BtnCopy.classList.add('copied'); + _icon.classList.remove('fa-copy'); + _icon.classList.add('fa-check-circle'); + _span.innerText = "COPIED"; + setTimeout(() => { + _icon.classList.remove('fa-check-circle'); + _icon.classList.add('fa-copy'); + _span.innerText = "COPY"; + }, 2000) + }).catch(e => { + VolantisApp.message('系统提示', e, { + icon: 'fa fa-exclamation-circle red' + }); + _BtnCopy.classList.add('copied-failed'); + _icon.classList.remove('fa-copy'); + _icon.classList.add('fa-exclamation-circle'); + _span.innerText = "COPY FAILED"; + setTimeout(() => { + _icon.classList.remove('fa-exclamation-circle'); + _icon.classList.add('fa-copy'); + _span.innerText = "COPY"; + }) + }) + } + }); + } + + // 工具类:复制字符串到剪切板 + fn.utilWriteClipText = (str) => { + return navigator.clipboard + .writeText(str) + .then(() => { + return Promise.resolve() + }) + .catch(e => { + const input = document.createElement('textarea'); + input.setAttribute('readonly', 'readonly'); + document.body.appendChild(input); + input.innerHTML = str; + input.select(); + try { + let result = document.execCommand('copy') + document.body.removeChild(input); + if (!result || result === 'unsuccessful') { + return Promise.reject('复制文本失败!') + } else { + return Promise.resolve() + } + } catch (e) { + document.body.removeChild(input); + return Promise.reject( + '当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作!' + ) + } + }) + } + + // 工具类:返回时间间隔 + fn.utilTimeAgo = (dateTimeStamp) => { + const minute = 1e3 * 60, hour = minute * 60, day = hour * 24, week = day * 7, month = day * 30; + const now = new Date().getTime(); + const diffValue = now - dateTimeStamp; + const minC = diffValue / minute, + hourC = diffValue / hour, + dayC = diffValue / day, + weekC = diffValue / week, + monthC = diffValue / month; + if (diffValue < 0) { + result = "" + } else if (monthC >= 1 && monthC < 7) { + result = " " + parseInt(monthC) + " 月前" + } else if (weekC >= 1 && weekC < 4) { + result = " " + parseInt(weekC) + " 周前" + } else if (dayC >= 1 && dayC < 7) { + result = " " + parseInt(dayC) + " 天前" + } else if (hourC >= 1 && hourC < 24) { + result = " " + parseInt(hourC) + " 小时前" + } else if (minC >= 1 && minC < 60) { + result = " " + parseInt(minC) + " 分钟前" + } else if (diffValue >= 0 && diffValue <= minute) { + result = "刚刚" + } else { + const datetime = new Date(); + datetime.setTime(dateTimeStamp); + const Nyear = datetime.getFullYear(); + const Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1; + const Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate(); + const Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours(); + const Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes(); + const Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds(); + result = Nyear + "-" + Nmonth + "-" + Ndate + } + return result; + } + + // 消息提示:标准 + fn.message = (title, message, option = {}, done = null) => { + if (typeof iziToast === "undefined") { + volantis.css(volantis.GLOBAL_CONFIG.plugins.message.css) + volantis.js(volantis.GLOBAL_CONFIG.plugins.message.js, () => { + tozashMessage(title, message, option, done); + }); + } else { + tozashMessage(title, message, option, done); + } + function tozashMessage(title, message, option, done) { + const { + icon, + time, + position, + transitionIn, + transitionOut, + messageColor, + titleColor, + backgroundColor, + zindex, + displayMode + } = option; + iziToast.show({ + layout: '2', + icon: 'Fontawesome', + closeOnEscape: 'true', + displayMode: displayMode || 'replace', + transitionIn: transitionIn || volantis.GLOBAL_CONFIG.plugins.message.transitionIn, + transitionOut: transitionOut || volantis.GLOBAL_CONFIG.plugins.message.transitionOut, + messageColor: messageColor || volantis.GLOBAL_CONFIG.plugins.message.messageColor, + titleColor: titleColor || volantis.GLOBAL_CONFIG.plugins.message.titleColor, + backgroundColor: backgroundColor || volantis.GLOBAL_CONFIG.plugins.message.backgroundColor, + zindex: zindex || volantis.GLOBAL_CONFIG.plugins.message.zindex, + icon: icon || volantis.GLOBAL_CONFIG.plugins.message.icon.default, + timeout: time || volantis.GLOBAL_CONFIG.plugins.message.time.default, + position: position || volantis.GLOBAL_CONFIG.plugins.message.position, + title: title, + message: message, + onClosed: () => { + if (done) done(); + }, + }); + } + } + + // 消息提示:询问 + fn.question = (title, message, option = {}, success = null, cancel = null, done = null) => { + if (typeof iziToast === "undefined") { + volantis.css(volantis.GLOBAL_CONFIG.plugins.message.css) + volantis.js(volantis.GLOBAL_CONFIG.plugins.message.js, () => { + tozashQuestion(title, message, option, success, cancel, done); + }); + } else { + tozashQuestion(title, message, option, success, cancel, done); + } + + function tozashQuestion(title, message, option, success, cancel, done) { + const { + icon, + time, + position, + transitionIn, + transitionOut, + messageColor, + titleColor, + backgroundColor, + zindex + } = option; + iziToast.question({ + id: 'question', + icon: 'Fontawesome', + close: false, + overlay: true, + displayMode: 'once', + position: 'center', + messageColor: messageColor || volantis.GLOBAL_CONFIG.plugins.message.messageColor, + titleColor: titleColor || volantis.GLOBAL_CONFIG.plugins.message.titleColor, + backgroundColor: backgroundColor || volantis.GLOBAL_CONFIG.plugins.message.backgroundColor, + zindex: zindex || volantis.GLOBAL_CONFIG.plugins.message.zindex, + icon: icon || volantis.GLOBAL_CONFIG.plugins.message.icon.quection, + timeout: time || volantis.GLOBAL_CONFIG.plugins.message.time.quection, + title: title, + message: message, + buttons: [ + ['', (instance, toast) => { + instance.hide({ transitionOut: transitionOut || 'fadeOut' }, toast, 'button'); + if (success) success(instance, toast) + }], + ['', (instance, toast) => { + instance.hide({ transitionOut: transitionOut || 'fadeOut' }, toast, 'button'); + if (cancel) cancel(instance, toast) + }] + ], + onClosed: (instance, toast, closedBy) => { + if (done) done(instance, toast, closedBy); + } + }); + } + } + + // 消息提示:隐藏 + fn.hideMessage = (done = null) => { + const toast = document.querySelector('.iziToast'); + if (!toast) { + if (done) done() + return; + } + + if (typeof iziToast === "undefined") { + volantis.css(volantis.GLOBAL_CONFIG.plugins.message.css) + volantis.js(volantis.GLOBAL_CONFIG.plugins.message.js, () => { + hideMessage(done); + }); + } else { + hideMessage(done); + } + + function hideMessage(done) { + iziToast.hide({}, toast); + if (done) done(); + } + } + + // 消息提示:复制 + let messageCopyrightShow = 0; + fn.messageCopyright = () => { + // 消息提示 复制时弹出 + if (volantis.GLOBAL_CONFIG.plugins.message.enable + && volantis.GLOBAL_CONFIG.plugins.message.copyright.enable + && messageCopyrightShow < 1) { + messageCopyrightShow++; + VolantisApp.message(volantis.GLOBAL_CONFIG.plugins.message.copyright.title, + volantis.GLOBAL_CONFIG.plugins.message.copyright.message, { + icon: volantis.GLOBAL_CONFIG.plugins.message.copyright.icon, + transitionIn: 'flipInX', + transitionOut: 'flipOutX', + displayMode: 1 + }); + } + } + + return { + init: () => { + fn.init(); + fn.event(); + }, + subscribe: () => { + fn.setIsMobile(); + fn.setHeader(); + fn.setHeaderMenuSelection(); + fn.setGlobalHeaderMenuEvent(); + fn.setHeaderSearch(); + fn.setScrollAnchor(); + fn.setTabs(); + fn.footnotes(); + }, + pjaxReload: () => { + fn.event(); + fn.restData(); + fn.setHeader(); + fn.setHeaderMenuSelection(); + fn.setPageHeaderMenuEvent(); + fn.setScrollAnchor(); + fn.setTabs(); + fn.footnotes(); + + // 移除小尾巴的移除 + document.querySelector("#l_header .nav-main").querySelectorAll('.list-v:not(.menu-phone)').forEach(function (e) { + e.removeAttribute("style") + }) + document.querySelector("#l_header .menu-phone.list-v").removeAttribute("style"); + messageCopyrightShow = 0; + }, + utilCopyCode: fn.utilCopyCode, + utilWriteClipText: fn.utilWriteClipText, + utilTimeAgo: fn.utilTimeAgo, + message: fn.message, + question: fn.question, + hideMessage: fn.hideMessage, + messageCopyright: fn.messageCopyright, + scrolltoElement: fn.scrolltoElement + } +})() +Object.freeze(VolantisApp); + +/* FancyBox */ +const VolantisFancyBox = (() => { + const fn = {}; + + fn.loadFancyBox = (done) => { + volantis.css(volantis.GLOBAL_CONFIG.plugins.fancybox.css); + volantis.js(volantis.GLOBAL_CONFIG.plugins.fancybox.js).then(() => { + if (done) done(); + }) + } + + /** + * 加载及处理 + * + * @param {*} checkMain 是否只处理文章区域的文章 + * @param {*} done FancyBox 加载完成后的动作,默认执行分组绑定 + * @returns + */ + fn.init = (checkMain = true, done = fn.groupBind) => { + if (!document.querySelector(".md .gallery img, .fancybox") && checkMain) return; + if (typeof Fancybox === "undefined") { + fn.loadFancyBox(done); + } else { + done(); + } + } + + /** + * 图片元素预处理 + * + * @param {*} selectors 选择器 + * @param {*} name 分组 + */ + fn.elementHandling = (selectors, name) => { + const nodeList = document.querySelectorAll(selectors); + nodeList.forEach($item => { + if ($item.hasAttribute('fancybox')) return; + $item.setAttribute('fancybox', ''); + const $link = document.createElement('a'); + $link.setAttribute('href', $item.src); + $link.setAttribute('data-caption', $item.alt); + $link.setAttribute('data-fancybox', name); + $link.classList.add('fancybox'); + $link.append($item.cloneNode()); + $item.replaceWith($link); + }) + } + + /** + * 原生绑定 + * + * @param {*} selectors 选择器 + */ + fn.bind = (selectors) => { + fn.init(false, () => { + Fancybox.bind(selectors, { + groupAll: true, + Hash: false, + hideScrollbar: false, + Thumbs: { + autoStart: false, + }, + caption: function (fancybox, carousel, slide) { + return slide.$trigger.alt || null + } + }); + }); + } + + /** + * 分组绑定 + * + * @param {*} groupName 分组名称 + */ + fn.groupBind = (groupName = null) => { + const group = new Set(); + + document.querySelectorAll(".gallery").forEach(ele => { + if (ele.querySelector("img")) { + group.add(ele.getAttribute('data-group') || 'default'); + } + }) + + if (!!groupName) group.add(groupName); + + for (const iterator of group) { + Fancybox.unbind('[data-fancybox="' + iterator + '"]'); + Fancybox.bind('[data-fancybox="' + iterator + '"]', { + Hash: false, + hideScrollbar: false, + Thumbs: { + autoStart: false, + } + }); + } + } + + return { + init: fn.init, + bind: fn.bind, + groupBind: (selectors, groupName = 'default') => { + try { + fn.elementHandling(selectors, groupName); + fn.init(false, () => { + fn.groupBind(groupName) + }); + } catch (error) { + console.error(error) + } + } + } +})() +Object.freeze(VolantisFancyBox); + +// highlightKeyWords 与 搜索功能搭配 https://github.com/next-theme/hexo-theme-next/blob/eb194a7258058302baf59f02d4b80b6655338b01/source/js/third-party/search/local-search.js +// Question: 锚点稳定性未知 +// ToDo: 查找模式 +// 0. (/////////要知道浏览器自带全页面查找功能 CTRL + F) +// 1. 右键开启查找模式 / 导航栏菜单开启?? / CTRL + F ??? +// 2. 查找模式面板 (可拖动? or 固定?) +// 3. keyword mark id 从 0 开始编号 查找下一处 highlightKeyWords.scrollToNextHighlightKeywordMark() 查找上一处 scrollToPrevHighlightKeywordMark() 循环查找(取模%) +// 4. 可输入修改 查找关键词 keywords(type:list) +// 5. 区分大小写 caseSensitive (/ 全字匹配?? / 正则匹配??) +// 6. 在选定区域中查找 querySelector ?? +// 7. 关闭查找模式 +// 8. 搜索跳转 (URL 入口) 自动开启查找模式 调用 scrollToNextHighlightKeywordMark() +const highlightKeyWords = (() => { + let fn = {} + fn.markNum = 0 + fn.markNextId = -1 + fn.startFromURL = () => { + const params = decodeURI(new URL(location.href).searchParams.get('keyword')); + const keywords = params ? params.split(' ') : []; + const post = document.querySelector('#l_main'); + if (keywords.length == 1 && keywords[0] == "null") { + return; + } + fn.start(keywords, post); // 渲染耗时较长 + fn.scrollToFirstHighlightKeywordMark() + } + fn.scrollToFirstHighlightKeywordMark = () => { + volantis.cleanContentVisibility(); + let target = fn.scrollToNextHighlightKeywordMark("0"); + if (!target) { + volantis.requestAnimationFrame(fn.scrollToFirstHighlightKeywordMark) + } + } + fn.scrollToNextHighlightKeywordMark = (id) => { + // Next Id + let input = id || (fn.markNextId + 1) % fn.markNum; + fn.markNextId = parseInt(input) + let target = document.getElementById("keyword-mark-" + fn.markNextId); + if (!target) { + fn.markNextId = (fn.markNextId + 1) % fn.markNum; + target = document.getElementById("keyword-mark-" + fn.markNextId); + } + if (target) { + volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' }) + } + // Current target + return target + } + fn.scrollToPrevHighlightKeywordMark = (id) => { + // Prev Id + let input = id || (fn.markNextId - 1 + fn.markNum) % fn.markNum; + fn.markNextId = parseInt(input) + let target = document.getElementById("keyword-mark-" + fn.markNextId); + if (!target) { + fn.markNextId = (fn.markNextId - 1 + fn.markNum) % fn.markNum; + target = document.getElementById("keyword-mark-" + fn.markNextId); + } + if (target) { + volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' }) + } + // Current target + return target + } + fn.start = (keywords, querySelector) => { + fn.markNum = 0 + if (!keywords.length || !querySelector || (keywords.length == 1 && keywords[0] == "null")) return; + console.log(keywords); + const walk = document.createTreeWalker(querySelector, NodeFilter.SHOW_TEXT, null); + const allNodes = []; + while (walk.nextNode()) { + if (!walk.currentNode.parentNode.matches('button, select, textarea')) allNodes.push(walk.currentNode); + } + allNodes.forEach(node => { + const [indexOfNode] = fn.getIndexByWord(keywords, node.nodeValue); + if (!indexOfNode.length) return; + const slice = fn.mergeIntoSlice(0, node.nodeValue.length, indexOfNode); + fn.highlightText(node, slice, 'keyword'); + fn.highlightStyle() + }); + } + fn.getIndexByWord = (words, text, caseSensitive = false) => { + const index = []; + const included = new Set(); + words.forEach(word => { + const div = document.createElement('div'); + div.innerText = word; + word = div.innerHTML; + + const wordLen = word.length; + if (wordLen === 0) return; + let startPosition = 0; + let position = -1; + if (!caseSensitive) { + text = text.toLowerCase(); + word = word.toLowerCase(); + } + while ((position = text.indexOf(word, startPosition)) > -1) { + index.push({ position, word }); + included.add(word); + startPosition = position + wordLen; + } + }); + index.sort((left, right) => { + if (left.position !== right.position) { + return left.position - right.position; + } + return right.word.length - left.word.length; + }); + return [index, included]; + }; + fn.mergeIntoSlice = (start, end, index) => { + let item = index[0]; + let { position, word } = item; + const hits = []; + const count = new Set(); + while (position + word.length <= end && index.length !== 0) { + count.add(word); + hits.push({ + position, + length: word.length + }); + const wordEnd = position + word.length; + + index.shift(); + while (index.length !== 0) { + item = index[0]; + position = item.position; + word = item.word; + if (wordEnd > position) { + index.shift(); + } else { + break; + } + } + } + return { + hits, + start, + end, + count: count.size + }; + }; + fn.highlightText = (node, slice, className) => { + const val = node.nodeValue; + let index = slice.start; + const children = []; + for (const { position, length } of slice.hits) { + const text = document.createTextNode(val.substring(index, position)); + index = position + length; + let mark = document.createElement('mark'); + mark.className = className; + mark = fn.highlightStyle(mark) + mark.appendChild(document.createTextNode(val.substr(position, length))); + children.push(text, mark); + } + node.nodeValue = val.substring(index, slice.end); + children.forEach(element => { + node.parentNode.insertBefore(element, node); + }); + } + fn.highlightStyle = (mark) => { + if (!mark) return; + mark.id = "keyword-mark-" + fn.markNum; + fn.markNum++; + mark.style.background = "transparent"; + mark.style["border-bottom"] = "1px dashed #ff2a2a"; + mark.style["color"] = "#ff2a2a"; + mark.style["font-weight"] = "bold"; + return mark + } + fn.cleanHighlightStyle = () => { + document.querySelectorAll(".keyword").forEach(mark => { + mark.style.background = "transparent"; + mark.style["border-bottom"] = null; + mark.style["color"] = null; + mark.style["font-weight"] = null; + }) + } + return { + start: (keywords, querySelector) => { + fn.start(keywords, querySelector) + }, + startFromURL: () => { + fn.startFromURL() + }, + scrollToNextHighlightKeywordMark: (id) => { + fn.scrollToNextHighlightKeywordMark(id) + }, + scrollToPrevHighlightKeywordMark: (id) => { + fn.scrollToPrevHighlightKeywordMark(id) + }, + cleanHighlightStyle: () => { + fn.cleanHighlightStyle() + }, + } +})() +Object.freeze(highlightKeyWords); + +/* DOM 控制 */ +const DOMController = { + /** + * 控制元素显隐 + */ + visible: (ele, type = true) => { + if (ele) ele.style.display = type === true ? 'block' : 'none'; + }, + + /** + * 移除元素 + */ + remove: (param) => { + const node = document.querySelectorAll(param); + node.forEach(ele => { + ele.remove(); + }) + }, + + removeList: (list) => { + list.forEach(param => { + DOMController.remove(param) + }) + }, + + /** + * 设置属性 + */ + setAttribute: (param, attrName, attrValue) => { + const node = document.querySelectorAll(param); + node.forEach(ele => { + ele.setAttribute(attrName, attrValue) + }) + }, + + setAttributeList: (list) => { + list.forEach(item => { + DOMController.setAttribute(item[0], item[1], item[2]) + }) + }, + + /** + * 设置样式 + */ + setStyle: (param, styleName, styleValue) => { + const node = document.querySelectorAll(param); + node.forEach(ele => { + ele.style[styleName] = styleValue; + }) + }, + + setStyleList: (list) => { + list.forEach(item => { + DOMController.setStyle(item[0], item[1], item[2]) + }) + }, + + fadeIn: (e) => { + if (!e) return; + e.style.visibility = "visible"; + e.style.opacity = 1; + e.style.display = "block"; + e.style.transition = "all 0.5s linear"; + return e + }, + + fadeOut: (e) => { + if (!e) return; + e.style.visibility = "hidden"; + e.style.opacity = 0; + e.style.display = "none"; + e.style.transition = "all 0.5s linear"; + return e + }, + + fadeToggle: (e) => { + if (!e) return; + if (e.style.visibility == "hidden") { + e = DOMController.fadeIn(e) + } else { + e = DOMController.fadeOut(e) + } + return e + }, + + fadeToggleList: (list) => { + list.forEach(param => { + DOMController.fadeToggle(param) + }) + }, + + hasClass: (e, c) => { + if (!e) return; + return e.className.match(new RegExp('(\\s|^)' + c + '(\\s|$)')); + }, + + addClass: (e, c) => { + if (!e) return; + e.classList.add(c); + return e + }, + + removeClass: (e, c) => { + if (!e) return; + e.classList.remove(c); + return e + }, + + toggleClass: (e, c) => { + if (!e) return; + if (DOMController.hasClass(e, c)) { + DOMController.removeClass(e, c) + } else { + DOMController.addClass(e, c) + } + return e + }, + + toggleClassList: (list) => { + list.forEach(item => { + DOMController.toggleClass(item[0], item[1]) + }) + } +} +Object.freeze(DOMController); + +const VolantisRequest = { + timeoutFetch: (url, ms, requestInit) => { + const controller = new AbortController() + requestInit.signal?.addEventListener('abort', () => controller.abort()) + let promise = fetch(url, { ...requestInit, signal: controller.signal }) + if (ms > 0) { + const timer = setTimeout(() => controller.abort(), ms) + promise.finally(() => { clearTimeout(timer) }) + } + promise = promise.catch((err) => { + throw ((err || {}).name === 'AbortError') ? new Error(`Fetch timeout: ${url}`) : err + }) + return promise + }, + + Fetch: async (url, requestInit, timeout = 15000) => { + const resp = await VolantisRequest.timeoutFetch(url, timeout, requestInit); + if (!resp.ok) throw new Error(`Fetch error: ${url} | ${resp.status}`); + let json = await resp.json() + if (!json.success) throw json + return json + }, + + POST: async (url, data) => { + const requestInit = { + method: 'POST', + } + if (data) { + const formData = new FormData(); + Object.keys(data).forEach(key => formData.append(key, String(data[key]))) + requestInit.body = formData; + } + const json = await VolantisRequest.Fetch(url, requestInit) + return json.data; + }, + + Get: async (url, data) => { + const json = await VolantisRequest.Fetch(url + (data ? (`?${new URLSearchParams(data)}`) : ''), { + method: 'GET' + }) + } +} +Object.freeze(VolantisRequest); diff --git a/js/plugins/aplayer.js b/js/plugins/aplayer.js new file mode 100644 index 0000000..36f6d7d --- /dev/null +++ b/js/plugins/aplayer.js @@ -0,0 +1,186 @@ +/** + * 右键音乐 + * */ +const RightMenuAplayer = (() => { + let playStatus; // 播放器状态 + const APlayer = {}; // 右键音乐所控制的播放器 + const fn = {}; + + fn.checkAPlayer = () => { + if (playStatus === undefined || APlayer.player === undefined) { + fn.setAPlayerObject(); + } else if (APlayer.observer === undefined) { + fn.setAPlayerObserver(); + } + } + + // 设置全局播放器所对应的 aplyer 对象 + fn.setAPlayerObject = () => { + let meting = document.querySelectorAll('.footer meting-js'); + if (meting.length == 0) { + meting = document.querySelectorAll('meting-js'); + } + APlayer.player = undefined; + meting.forEach((item, index) => { + if (item.meta.id == volantis.GLOBAL_CONFIG.plugins.aplayer.id && item.aplayer && APlayer.player === undefined) { + APlayer.player = item.aplayer; + fn.setAPlayerObserver(); + fn.updateTitle(); + } + }); + } + + // 事件监听 + fn.setAPlayerObserver = () => { + try { + APlayer.player.on('play', function (e) { + fn.updateAPlayerControllerStatus(e); + APlayer.status = 'play'; + }); + APlayer.player.on('pause', function (e) { + fn.updateAPlayerControllerStatus(e); + APlayer.status = 'pause'; + }); + APlayer.player.on('volumechange', function (e) { + fn.onUpdateAPlayerVolume(e); + }); + APlayer.player.on('loadstart', function (e) { + fn.updateTitle(e); + }); + + // 监听音量手势 + APlayer.volumeBarWrap = document.getElementsByClassName('nav volume')[0].children[0]; + APlayer.volumeBar = APlayer.volumeBarWrap.children[0]; + + const thumbMove = (e) => { + fn.updateAPlayerVolume(e); + }; + + const thumbUp = (e) => { + APlayer.volumeBarWrap.classList.remove('aplayer-volume-bar-wrap-active'); + document.removeEventListener('mouseup', thumbUp); + document.removeEventListener('mousemove', thumbMove); + fn.updateAPlayerVolume(e); + }; + + APlayer.volumeBarWrap.addEventListener('mousedown', (event) => { + event.stopPropagation(); + APlayer.volumeBarWrap.classList.add('aplayer-volume-bar-wrap-active'); + document.addEventListener('mousemove', thumbMove); + document.addEventListener('mouseup', thumbUp); + }); + + APlayer.volumeBarWrap.addEventListener('click', (event) => { + event.stopPropagation(); + }); + + fn.updateAPlayerControllerStatus(); + fn.onUpdateAPlayerVolume(); + APlayer.observer = true; + } catch (error) { + console.log(error); + APlayer.observer = undefined; + } + } + + fn.updateAPlayerVolume = (e) => { + let percentage = ((e.clientX || e.changedTouches[0].clientX) - + APlayer.volumeBar.getBoundingClientRect().left) / APlayer.volumeBar.clientWidth; + percentage = Math.max(percentage, 0); + percentage = Math.min(percentage, 1); + APlayer.player.volume(percentage); + } + + fn.onUpdateAPlayerVolume = () => { + try { + APlayer.volumeBar.children[0].style.width = APlayer.player.audio.volume * 100 + '%'; + } catch (error) { + console.log(error); + } + } + + // 更新控制器状态 + fn.updateAPlayerControllerStatus = () => { + try { + if (APlayer.player.audio.paused) { + playStatus = 'pause'; + document.getElementsByClassName('nav toggle')[0].children[0].classList.add('fa-play'); + document.getElementsByClassName('nav toggle')[0].children[0].classList.remove('fa-pause'); + } else { + playStatus = 'play'; + document.getElementsByClassName('nav toggle')[0].children[0].classList.remove('fa-play'); + document.getElementsByClassName('nav toggle')[0].children[0].classList.add('fa-pause'); + } + } catch (error) { + console.log(error); + } + } + + // 播放/暂停 + fn.aplayerToggle = () => { + fn.checkAPlayer(); + try { + APlayer.player.toggle(); + } catch (error) { + console.log(error); + } + } + + // 上一曲 + fn.aplayerBackward = () => { + fn.checkAPlayer(); + try { + APlayer.player.skipBack(); + APlayer.player.play(); + } catch (error) { + console.log(error); + } + } + + // 下一曲 + fn.aplayerForward = () => { + fn.checkAPlayer(); + try { + APlayer.player.skipForward(); + APlayer.player.play(); + } catch (error) { + console.log(error); + } + } + + // 调节音量 + fn.aplayerVolume = (percent) => { + fn.checkAPlayer(); + try { + APlayer.player.volume(percent); + } catch (error) { + console.log(error); + } + } + + // 更新音乐标题 + fn.updateTitle = () => { + fn.checkAPlayer(); + try { + const index = APlayer.player.list.index; + const obj = APlayer.player.list.audios[index]; + document.getElementsByClassName('nav music-title')[0].innerHTML = obj.title; + } catch (error) { + //console.log(error); + } + } + + return { + checkAPlayer: fn.checkAPlayer, + aplayerBackward: fn.aplayerBackward, + aplayerToggle: fn.aplayerToggle, + aplayerForward: fn.aplayerForward, + APlayer: APlayer + } +})() + +Object.freeze(RightMenuAplayer); + +volantis.requestAnimationFrame(() => { + RightMenuAplayer.checkAPlayer(); +}); diff --git a/js/plugins/parallax.js b/js/plugins/parallax.js new file mode 100644 index 0000000..c170b19 --- /dev/null +++ b/js/plugins/parallax.js @@ -0,0 +1,191 @@ +let Parallax = {}; +Parallax.options = {}; +Parallax.options.speed = 0.25; +Parallax.options.zIndex = -100; +Parallax.options.fade = 1500; +Parallax.slidein = () => { + let slider = Parallax.mirrors[0].slider; + if (Parallax.mirrors.length >= 2) { + slider = Parallax.mirrors[1].slider; + } + var opac = parseFloat(slider.style.opacity); + if (opac !== 1) { + if (Parallax.mirrors.length >= 2) { + opac = opac + 0.1; + slider.style.opacity = opac; + setTimeout(Parallax.slidein, Parallax.options.fade / 10); + }else{ + slider.style.opacity = 1; + } + } else { + if (Parallax.mirrors.length >= 2) { + Parallax.mirrors[0].mirror.remove(); + Parallax.mirrors.shift(); + } + } +}; +Parallax.start = () => { + let mirror = document.createElement("div"); + mirror.classList.add("parallax-mirror"); + mirror.style.visibility = "hidden"; + mirror.style.zIndex = Parallax.options.zIndex; + mirror.style.position = "fixed"; + mirror.style.top = 0; + mirror.style.left = 0; + mirror.style.overflow = "hidden"; + Parallax.window.appendChild(mirror); + let slider = document.createElement("img"); + slider.src = Parallax.options.src; + slider.alt = "parallax"; + slider.classList.add("parallax-slider"); + slider.style.opacity = 0; + mirror.appendChild(slider); + if (!Parallax.mirrors) { + Parallax.mirrors = []; + } + let mirrorItem = {}; + mirrorItem.mirror = mirror; + mirrorItem.slider = slider; + Parallax.mirrors.push(mirrorItem); + Parallax.slidein(); + slider.addEventListener( + "load", + function () { + Parallax.update(); + }, + false + ); +}; +Parallax.init = () => { + function loadDimensions() { + Parallax.wH = document.documentElement.clientHeight; + Parallax.wW = document.documentElement.clientWidth; + } + function getScrollTop() { + var scrollPos; + if (window.pageYOffset) { + scrollPos = window.pageYOffset; + } else if (document.compatMode && document.compatMode != "BackCompat") { + scrollPos = document.documentElement.scrollTop; + } else if (document.body) { + scrollPos = document.body.scrollTop; + } + return scrollPos; + } + function loadScrollPosition() { + const winScrollTop = getScrollTop(); + Parallax.sT = Math.max(0, winScrollTop); + Parallax.sL = Math.max(0, document.body.scrollLeft); + Parallax.overScroll = Math.min(winScrollTop, 0); + } + window.addEventListener( + "resize", + function () { + loadDimensions(); + Parallax.update(); + }, + false + ); + loadDimensions(); + let lastPosition = -1; + (function loop() { + const yoffset = getScrollTop(); + if (lastPosition !== yoffset) { + lastPosition = yoffset; + loadScrollPosition(); + Parallax.update(); + } + window.requestAnimationFrame = + window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame; + window.requestAnimationFrame(loop); + })(); +}; + +Parallax.refreshItem = (slider) => { + Parallax.options.aspectRatio = + slider.naturalWidth / (slider.naturalHeight || 1); + const aspect = Parallax.options.aspectRatio || 1; + Parallax.options.boxWidth = Parallax.window.clientWidth; + Parallax.options.boxHeight = Parallax.window.clientHeight; + Parallax.options.boxOffsetTop = Parallax.window.scrollTop; + Parallax.options.boxOffsetLeft = Parallax.window.scrollLeft; + Parallax.options.boxOffsetBottom = + Parallax.options.boxOffsetTop + Parallax.options.boxHeight; + const winHeight = Parallax.wH; + const maxOffset = Parallax.options.boxOffsetTop; + const minOffset = Math.max( + Parallax.options.boxOffsetTop + Parallax.options.boxHeight - winHeight, + 0 + ); + const imageHeightMin = + (Parallax.options.boxHeight + + (maxOffset - minOffset) * (1 - Parallax.options.speed)) | + 0; + const imageOffsetMin = + ((Parallax.options.boxOffsetTop - maxOffset) * + (1 - Parallax.options.speed)) | + 0; + let margin; + if (Parallax.options.boxWidth < imageHeightMin * aspect) { + Parallax.options.imageWidth = (imageHeightMin * aspect) | 0; + Parallax.options.imageHeight = imageHeightMin; + Parallax.options.offsetBaseTop = imageOffsetMin; + margin = Parallax.options.imageWidth - Parallax.options.boxWidth; + Parallax.options.offsetLeft = (-margin / 2) | 0; + } else { + Parallax.options.imageWidth = Parallax.options.boxWidth; + Parallax.options.imageHeight = (Parallax.options.boxWidth / aspect) | 0; + Parallax.options.offsetLeft = 0; + margin = Parallax.options.imageHeight - imageHeightMin; + Parallax.options.offsetBaseTop = (imageOffsetMin - margin / 2) | 0; + } +}; +Parallax.renderItem = (mirror, slider) => { + const scrollTop = Parallax.sT; + const scrollLeft = Parallax.sL; + const scrollBottom = scrollTop + Parallax.wH; + if ( + Parallax.options.boxOffsetBottom > scrollTop && + Parallax.options.boxOffsetTop <= scrollBottom + ) { + Parallax.options.visibility = "visible"; + Parallax.options.mirrorTop = Parallax.options.boxOffsetTop - scrollTop; + Parallax.options.mirrorLeft = Parallax.options.boxOffsetLeft - scrollLeft; + Parallax.options.offsetTop = + Parallax.options.offsetBaseTop - + Parallax.options.mirrorTop * (1 - Parallax.options.speed); + } else { + Parallax.options.visibility = "hidden"; + } + mirror.style.transform = + "translate3d(" + + Parallax.options.mirrorLeft + + "px, " + + Parallax.options.mirrorTop + + "px, 0px)"; + mirror.style.visibility = Parallax.options.visibility; + mirror.style.height = Parallax.options.boxHeight + "px"; + mirror.style.width = Parallax.options.boxWidth + "px"; + + slider.style.transform = + "translate3d(" + + Parallax.options.offsetLeft + + "px, " + + Parallax.options.offsetTop + + "px, 0px)"; + slider.style.position = "absolute"; + slider.style.height = Parallax.options.imageHeight + "px"; + slider.style.width = Parallax.options.imageWidth + "px"; + slider.style.maxWidth = "none"; +}; +Parallax.update = () => { + if (!Parallax.mirrors) { + return + } + Parallax.mirrors.forEach((e) => { + Parallax.refreshItem(e.slider); + Parallax.renderItem(e.mirror, e.slider); + }); +}; diff --git a/js/plugins/rightMenu.js b/js/plugins/rightMenu.js new file mode 100644 index 0000000..27d7c77 --- /dev/null +++ b/js/plugins/rightMenu.js @@ -0,0 +1,577 @@ +const RightMenu = (() => { + const + rightMenuConfig = volantis.GLOBAL_CONFIG.plugins.rightmenu, + messageRightMenu = volantis.GLOBAL_CONFIG.plugins.message.enable && volantis.GLOBAL_CONFIG.plugins.message.rightmenu.enable; + + const + fn = {}, + _rightMenuWrapper = document.getElementById('rightmenu-wrapper'), + _rightMenuContent = document.getElementById('rightmenu-content'), + _printHtml = document.getElementById('printHtml'), + _menuMusic = document.getElementById('menuMusic'), + _readingModel = document.getElementById('readingModel'), + _readBkg = document.getElementById('read_bkg'); + + const + _menuLoad = document.querySelectorAll('.menuLoad-Content'), + _menuOption = document.querySelector('.menu-Option'), + _searchWord = document.querySelector('.menu-Option[data-fn-type="searchWord"]'), + _copyText = document.querySelector('.menu-Option[data-fn-type="copyText"]'), + _copyPaste = document.querySelector('.menu-Option[data-fn-type="copyPaste"]'), + _copySelect = document.querySelector('.menu-Option[data-fn-type="copySelect"]'), + _copyCut = document.querySelector('.menu-Option[data-fn-type="copyCut"]'), + _copyHref = document.querySelector('.menu-Option[data-fn-type="copyHref"]'), + _copySrc = document.querySelector('.menu-Option[data-fn-type="copySrc"]'), + _copyImg = document.querySelector('.menu-Option[data-fn-type="copyImg"]'), + _openTab = document.querySelector('.menu-Option[data-fn-type="openTab"]'), + _backward = document.querySelector('#menuMusic .backward'), + _toggle = document.querySelector('#menuMusic .toggle'), + _forward = document.querySelector('#menuMusic .forward'); + + const urlRegx = /^((https|http)?:\/\/)+[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/; + + fn.init = () => { + DOMController.visible(_menuMusic, false); + DOMController.visible(_menuOption, false); + if (_readBkg) _readBkg.parentNode.removeChild(_readBkg); + + const readBkg = document.createElement("div"); + readBkg.className = "common_read_bkg common_read_hide"; + readBkg.id = "read_bkg"; + window.document.body.appendChild(readBkg); + } + + fn.initEvent = () => { + window.document.oncontextmenu = (event) => { + if (event.ctrlKey || document.body.offsetWidth <= 500) { + fn.hideMenu(); + return true; + } + return fn.popMenu(event); + } + + _rightMenuWrapper.oncontextmenu = (event) => { + event.stopPropagation(); + event.preventDefault(); + return false; + } + + window.removeEventListener('blur', fn.hideMenu); + window.addEventListener('blur', fn.hideMenu); + document.body.removeEventListener('click', fn.hideMenu); + document.body.addEventListener('click', fn.hideMenu); + + if (_forward && _toggle && _forward) { + _backward.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + RightMenuAplayer.aplayerBackward(); + } + _toggle.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + RightMenuAplayer.aplayerToggle(); + } + _forward.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + RightMenuAplayer.aplayerForward(); + } + } + } + + // 菜单位置设定 + fn.popMenu = (event) => { + let mouseClientX = event.clientX; + let mouseClientY = event.clientY; + let screenWidth = document.documentElement.clientWidth || document.body.clientWidth; + let screenHeight = document.documentElement.clientHeight || document.body.clientHeight; + + try { + fn.setMenuItem(event); + DOMController.visible(_rightMenuWrapper); + _rightMenuWrapper.focus(); + _rightMenuWrapper.style.zIndex = '-2147483648'; + let menuWidth = _rightMenuContent.offsetWidth; + let menuHeight = _rightMenuContent.offsetHeight; + let showLeft = mouseClientX + menuWidth > screenWidth ? mouseClientX - menuWidth + 10 : mouseClientX; + let showTop = mouseClientY + menuHeight > screenHeight ? mouseClientY - menuHeight + 10 : mouseClientY; + showTop = mouseClientY + menuHeight > screenHeight && showTop < menuHeight && mouseClientY < menuHeight ? + showTop + (screenHeight - menuHeight - showTop - 10) : showTop; + _rightMenuWrapper.style.left = showLeft + "px"; + _rightMenuWrapper.style.top = showTop + "px"; + _rightMenuWrapper.style.zIndex = '2147483648'; + if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) fn.showMessage(); + } catch (error) { + _rightMenuWrapper.blur(); + console.error(error); + return true; + } + + return false; + } + + // 消息提示 + fn.showMessage = () => { + const NoticeRightMenu = localStorage.getItem('NoticeRightMenu') === 'true'; + if (messageRightMenu && !NoticeRightMenu) + VolantisApp.message('右键菜单', '唤醒原系统菜单请使用:Ctrl + 右键', { + icon: rightMenuConfig.faicon + ' fa-exclamation-square red', + time: 9000 + }, () => { + localStorage.setItem('NoticeRightMenu', 'true') + }); + } + + // 菜单项设置 + fn.setMenuItem = (event) => { + let optionFlag = false; + const eventTarget = event.target; + const selectText = window.getSelection().toString(); + DOMController.visible(_openTab, false); // 隐藏新标签页打开 + + // 判断是否是输入框 + if (eventTarget.tagName.toLowerCase() === 'input' || eventTarget.tagName.toLowerCase() === 'textarea') { + const inputStr = eventTarget.value; + + // 全选 + if (inputStr.length > 0) { + DOMController.visible(_copySelect); + _copySelect.onclick = () => { + event.preventDefault(); + eventTarget.select(); + } + } else { + DOMController.visible(_copySelect, false); + } + + // 剪切 + if (selectText) { + DOMController.visible(_copyCut); + _copyCut.onclick = () => { + const statrPos = eventTarget.selectionStart; + const endPos = eventTarget.selectionEnd; + fn.copyString(selectText); + eventTarget.value = inputStr.substring(0, statrPos) + inputStr.substring(endPos, inputStr.length); + eventTarget.selectionStart = statrPos; + eventTarget.selectionEnd = statrPos; + eventTarget.focus(); + } + } else { + DOMController.visible(_copyCut, false); + } + + // 粘贴 + fn.readClipboard().then(text => { + // 如果剪切板存在内容 + if (!!text) { + DOMController.visible(_copyPaste); + _copyPaste.onclick = () => { + fn.insertAtCaret(eventTarget, text); + } + } else { + DOMController.visible(_copyPaste, false); + } + }).catch((err) => { + console.error(err); + DOMController.visible(_copyPaste, false); + }); + } else { + DOMController.visible(_copySelect, false); + DOMController.visible(_copyPaste, false); + DOMController.visible(_copyCut, false); + } + + // 新标签打开链接 + const eventHref = eventTarget.href; + if (!!eventHref && urlRegx.test(eventHref)) { + optionFlag = true; + DOMController.visible(_copyHref); + DOMController.visible(_openTab); + if (_copyHref) _copyHref.onclick = () => { + fn.copyString(eventHref); + } + _openTab.onclick = () => { + window.open(eventHref); + } + } else { + DOMController.visible(_copyHref, false); + } + + // 新标签打开图片 & 复制图片链接 + const eventSrc = eventTarget.currentSrc; + if (!!eventSrc && urlRegx.test(eventSrc)) { + optionFlag = true; + DOMController.visible(_copySrc); + DOMController.visible(_openTab); + + _copySrc.onclick = () => { + fn.copyString(eventSrc); + } + + _openTab.onclick = () => { + window.open(eventSrc); + } + } else { + DOMController.visible(_copySrc, false); + } + + // 复制图片 + if (!!eventSrc && urlRegx.test(eventSrc) && eventSrc.trimEnd().endsWith('.png')) { + optionFlag = true; + DOMController.visible(_copyImg); + + _copyImg.onclick = () => { + fn.writeClipImg(event, flag => { + if (flag && messageRightMenu) VolantisApp.message('系统提示', '图片复制成功!', { + icon: rightMenuConfig.faicon + ' fa-images' + }); + }, (error) => { + if (messageRightMenu) VolantisApp.message('系统提示', '复制失败:' + error, { + icon: rightMenuConfig.faicon + ' fa-exclamation-square red' + }); + }) + } + } else { + DOMController.visible(_copyImg, false); + } + + // 复制文本 + if (selectText) { + optionFlag = true; + DOMController.visible(_copyText); + DOMController.visible(_searchWord); + + _copyText.onclick = () => { + fn.copyString(selectText); + } + + !!_searchWord && (_searchWord.onclick = () => { + OpenSearch(selectText); + }) + } else { + DOMController.visible(_copyText, false); + DOMController.visible(_searchWord, false); + } + + // 打印 + const _printArticle = document.querySelector('#post.article') || null; + const pathName = window.location.pathname; + if (!!_printArticle) { + DOMController.visible(_printHtml); + DOMController.visible(_readingModel); + + if (_printHtml) { + _printHtml.onclick = () => { + if (window.location.pathname === pathName) { + const message = '是否打印当前页面?
建议打印时勾选背景图形
'; + if (messageRightMenu) VolantisApp.question('', message, {}, () => { + fn.printHtml(); + }) + } else { + fn.hideMenu(); + } + } + } + + if (_readingModel) { + _readingModel.onclick = () => { + if (window.location.pathname === pathName) { + fn.readingModel(); + } else { + fn.readingModel(); + } + } + } + + } else { + DOMController.visible(_printHtml, false); + DOMController.visible(_readingModel, false); + } + + if (volantis.GLOBAL_CONFIG.plugins.aplayer.enable + && typeof RightMenuAplayer !== 'undefined' + && RightMenuAplayer.APlayer.player !== undefined) { + if (rightMenuConfig.music_alwaysShow) { + DOMController.visible(_menuMusic); + } else if (RightMenuAplayer.APlayer.status === 'play' || RightMenuAplayer.APlayer.status === 'undefined') { + optionFlag = true; + DOMController.visible(_menuMusic); + } else { + DOMController.visible(_menuMusic, false); + } + } else { + DOMController.visible(_menuMusic, false); + } + + _menuLoad.forEach(ele => { + DOMController.visible(ele, !optionFlag); + }) + + if (volantis.GLOBAL_CONFIG.plugins.aplayer.enable + && rightMenuConfig.layout.includes('music')) { + RightMenuAplayer.checkAPlayer(); + } + } + + // 隐藏菜单 + fn.hideMenu = () => { + DOMController.visible(_rightMenuWrapper, false); + } + + // 复制字符串 + fn.copyString = (str) => { + VolantisApp.utilWriteClipText(str) + .then(() => { + if (messageRightMenu) { + VolantisApp.messageCopyright(); + } + }).catch(e => { + if (messageRightMenu) { + VolantisApp.message('系统提示', e, { + icon: rightMenuConfig.faicon + ' fa-exclamation-square red' + }); + } + }) + } + + // 写入文本到剪切板 + fn.writeClipText = (str) => { + try { + return navigator.clipboard + .writeText(str) + .then(() => { + return Promise.resolve() + }) + .catch(err => { + return Promise.reject(err) + }) + } catch (e) { + const input = document.createElement('input'); + input.setAttribute('readonly', 'readonly'); + document.body.appendChild(input); + input.setAttribute('value', str); + input.select(); + try { + let result = document.execCommand('copy') + document.body.removeChild(input); + if (!result || result === 'unsuccessful') { + return Promise.reject('复制文本失败!') + } else { + return Promise.resolve() + } + } catch (e) { + document.body.removeChild(input); + return Promise.reject( + '当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作!' + ) + } + } + } + + // 写入图片到剪切板 + fn.writeClipImg = async function (event, success, error) { + const eventSrc = rightMenuConfig.customPicUrl.enable ? + event.target.currentSrc.replace(rightMenuConfig.customPicUrl.old, rightMenuConfig.customPicUrl.new) : + event.target.currentSrc; + const parentElement = event.target.parentElement; + try { + const data = await fetch(eventSrc); + const blob = await data.blob(); + await navigator.clipboard + .write([ + new ClipboardItem({ + [blob.type]: blob + }) + ]).then(() => { + success(true); + }, (e) => { + console.error('图片复制失败:', e); + error(e); + }); + } catch (e) { + const dom = document; + try { + if (dom.body.createTextRange) { + const textRange = document.body.createTextRange(); + textRange.moveToElementText(parentElement); + textRange.select(); + } else if (window.getSelection) { + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(parentElement); + selection.removeAllRanges(); + selection.addRange(range); + } + document.execCommand('copy'); + window.getSelection().removeAllRanges(); + success(false); + } catch (e) { + console.error(e); + error('不支持复制当前图片!'); + } + } + } + + // 请求读取剪切板 + fn.readClipboard = async () => { + const result = await navigator.permissions.query({ + name: 'clipboard-read' + }); + if (result.state === 'granted' || result.state === 'prompt') { + // 修改为 .read() 可以获取剪切板中的文字/图片 + // 返回的是 ClipboardItem + return navigator.clipboard + .readText() + .then(text => text) + .catch(err => Promise.reject(err)); + } + return Promise.reject(result); + } + + // 粘贴文本 + fn.insertAtCaret = (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(); + } + } + } + + // 执行打印页面 + fn.printHtml = () => { + if (volantis.isReadModel) fn.readingModel(); + DOMController.setAttribute('details', 'open', 'true'); + DOMController.remove('.cus-article-bkg'); + DOMController.remove('.iziToast-overlay'); + DOMController.remove('.iziToast-wrapper'); + DOMController.remove('.prev-next'); + DOMController.remove('footer'); + DOMController.remove('#l_header'); + DOMController.remove('#l_cover'); + DOMController.remove('#l_side'); + DOMController.remove('#comments'); + DOMController.remove('#s-top'); + DOMController.remove('#BKG'); + DOMController.remove('#rightmenu-wrapper'); + DOMController.remove('.nav-tabs'); + DOMController.remove('.parallax-mirror'); + DOMController.remove('.new-meta-item.share'); + DOMController.remove('div.footer'); + DOMController.setStyle('body', 'backgroundColor', 'unset'); + DOMController.setStyle('#l_main', 'width', '100%'); + DOMController.setStyle('#post', 'boxShadow', 'none'); + DOMController.setStyle('#post', 'background', 'none'); + DOMController.setStyle('#post', 'padding', '0'); + DOMController.setStyle('h1', 'textAlign', 'center'); + DOMController.setStyle('h1', 'fontWeight', '600'); + DOMController.setStyle('h1', 'fontSize', '2rem'); + DOMController.setStyle('h1', 'marginBottom', '20px'); + DOMController.setStyle('.tab-pane', 'display', 'block'); + DOMController.setStyle('.tab-content', 'borderTop', 'none'); + DOMController.setStyle('.highlight>table pre', 'whiteSpace', 'pre-wrap'); + DOMController.setStyle('.highlight>table pre', 'wordBreak', 'break-all'); + DOMController.setStyle('.fancybox img', 'height', 'auto'); + DOMController.setStyle('.fancybox img', 'weight', 'auto'); + + setTimeout(() => { + window.print(); + document.body.innerHTML = ''; + window.location.reload(); + }, 50); + } + + // 阅读模式 + fn.readingModel = () => { + if (typeof ScrollReveal === 'function') ScrollReveal().clean('#comments'); + DOMController.fadeToggle(document.querySelector('#l_header')) + DOMController.fadeToggle(document.querySelector('footer')) + DOMController.fadeToggle(document.querySelector('#s-top')) + DOMController.fadeToggle(document.querySelector('.article-meta#bottom')) + DOMController.fadeToggle(document.querySelector('.prev-next')) + DOMController.fadeToggle(document.querySelector('#l_side')) + DOMController.fadeToggle(document.querySelector('#comments')) + + DOMController.toggleClass(document.querySelector('#l_main'), 'common_read') + DOMController.toggleClass(document.querySelector('#l_main'), 'common_read_main') + DOMController.toggleClass(document.querySelector('#l_body'), 'common_read') + DOMController.toggleClass(document.querySelector('#safearea'), 'common_read') + DOMController.toggleClass(document.querySelector('#pjax-container'), 'common_read') + DOMController.toggleClass(document.querySelector('#read_bkg'), 'common_read_hide') + DOMController.toggleClass(document.querySelector('h1'), 'common_read_h1') + DOMController.toggleClass(document.querySelector('#post'), 'post_read') + DOMController.toggleClass(document.querySelector('#l_cover'), 'read_cover') + DOMController.toggleClass(document.querySelector('.widget.toc-wrapper'), 'post_read') + + volantis.isReadModel = volantis.isReadModel === undefined ? true : !volantis.isReadModel; + if (volantis.isReadModel) { + const option = { + backgroundColor: 'var(--color-read-post)', + icon: rightMenuConfig.faicon + ' fa-book-reader', + time: 5000 + } + if (messageRightMenu) VolantisApp.message('系统提示', '阅读模式已开启,您可以点击屏幕空白处退出。', option); + document.querySelector('#l_body').removeEventListener('click', fn.readingModel); + document.querySelector('#l_body').addEventListener('click', (event) => { + if (DOMController.hasClass(event.target, 'common_read')) { + fn.readingModel(); + } + }); + } else { + document.querySelector('#l_body').removeEventListener('click', fn.readingModel); + document.querySelector('#post').removeEventListener('click', fn.readingModel); + } + } + + return { + init: (notice = false) => { + fn.init(); + fn.initEvent(); + if (notice && messageRightMenu) VolantisApp.message('系统提示', '自定义右键注册成功。'); + }, + destroy: (notice = false) => { + fn.hideMenu(); + window.document.oncontextmenu = () => { + return true + }; + if (notice && messageRightMenu) VolantisApp.message('系统提示', '自定义右键注销成功。'); + }, + hideMenu: fn.hideMenu, + readingModel: fn.readingModel + } +})() + +Object.freeze(RightMenu); + +volantis.requestAnimationFrame(() => { + if (document.readyState !== 'loading') { + RightMenu.init(); + + volantis.pjax.send(() => { + RightMenu.hideMenu(); + }) + } else { + document.addEventListener("DOMContentLoaded", function () { + RightMenu.init(); + + volantis.pjax.send(() => { + RightMenu.hideMenu(); + }) + }) + } +}); diff --git a/js/plugins/rightMenus.js b/js/plugins/rightMenus.js new file mode 100644 index 0000000..cdb9999 --- /dev/null +++ b/js/plugins/rightMenus.js @@ -0,0 +1,618 @@ + +const RightMenus = { + defaultEvent: ['copyText', 'copyLink', 'copyPaste', 'copyAll', 'copyCut', 'copyImg', 'printMode', 'readMode'], + defaultGroup: ['navigation', 'inputBox', 'seletctText', 'elementCheck', 'elementImage', 'articlePage'], + messageRightMenu: volantis.GLOBAL_CONFIG.plugins.message.enable && volantis.GLOBAL_CONFIG.plugins.message.rightmenu.enable, + corsAnywhere: volantis.GLOBAL_CONFIG.plugins.rightmenus.options.corsAnywhere, + urlRegx: /^((https|http)?:\/\/)+[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/, + imgRegx: /\.(jpe?g|png|webp|svg|gif|jifi)(-|_|!|\?|\/)?.*$/, + + /** + * 加载右键菜单 + */ + initialMenu: () => { + RightMenus.fun.init(); + volantis.pjax.send(() => { + RightMenus.fun.hideMenu(); + if (volantis.isReadModel) RightMenus.fun.readMode(); + }) + }, + + /** + * 读取剪切板 + * @returns text + */ + readClipboard: async () => { + let clipboardText; + const result = await navigator.permissions.query({ name: 'clipboard-read' }); + switch (result.state) { + case 'granted': + case 'prompt': + clipboardText = await navigator.clipboard.readText() + break; + default: + window.clipboardRead = false; + break; + } + return clipboardText; + }, + + /** + * 写入文本到剪切板 + * @param {String} text + */ + writeClipText: text => { + return navigator.clipboard + .writeText(text) + .then(() => { + return Promise.resolve() + }) + .catch(err => { + return Promise.reject(err) + }) + }, + + /** + * 写入图片到剪切板 + * @param {*} link + * @param {*} success + * @param {*} error + */ + writeClipImg: async (link, success, error) => { + const image = new Image; + image.crossOrigin = "Anonymous"; + image.addEventListener('load', () => { + let canvas = document.createElement("canvas"); + let context = canvas.getContext("2d"); + canvas.width = image.width; + canvas.height = image.height; + context.drawImage(image, 0, 0); + canvas.toBlob(blob => { + navigator.clipboard.write([ + new ClipboardItem({ 'image/png': blob }) + ]).then(e => { + success(e) + }).catch(e => { + error(e) + }) + }, 'image/png') + }, false) + image.src = `${link}?(lll¬ω¬)`; + }, + + /** + * 粘贴文本到剪切板 + * @param {*} elemt + * @param {*} value + */ + insertAtCaret: (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(); + } + } + } +} + +/** + * 事件处理区域 + */ +RightMenus.fun = (() => { + const rightMenuConfig = volantis.GLOBAL_CONFIG.plugins.rightmenus; + + const + fn = {}, + _rightMenuWrapper = document.getElementById('rightmenu-wrapper'), + _rightMenuContent = document.getElementById('rightmenu-content'), + _rightMenuList = document.querySelectorAll('#rightmenu-content li.menuLoad-Content'), + _rightMenuListWithHr = document.querySelectorAll('#rightmenu-content li, #rightmenu-content hr, #menuMusic'), + _readBkg = document.getElementById('read_bkg'), + _menuMusic = document.getElementById('menuMusic'), + _backward = document.querySelector('#menuMusic .backward'), + _toggle = document.querySelector('#menuMusic .toggle'), + _forward = document.querySelector('#menuMusic .forward'); + + // 公共数据 + let globalData = { + mouseEvent: null, + isInputBox: false, + selectText: '', + inputValue: '', + isLink: false, + linkUrl: '', + isMediaLink: false, + mediaLinkUrl: '', + isImage: false, + isArticle: false, + pathName: '', + isReadClipboard: true, + isShowMusic: false, + statusCheck: false + } + const globalDataBackup = Object.assign({}, globalData); + + /** + * 初始化监听事件处理 + */ + fn.initEvent = () => { + fn.elementAppend(); + fn.contextmenu(); + fn.menuEvent(); + } + + /** + * 预置元素设定 + */ + fn.elementAppend = () => { + // 阅读模式 + if (_readBkg) _readBkg.parentNode.removeChild(_readBkg); + const readBkg = document.createElement("div"); + readBkg.className = "common_read_bkg common_read_hide"; + readBkg.id = "read_bkg"; + window.document.body.appendChild(readBkg); + } + + /** + * 右键菜单位置设定 + * @param {*} event + */ + fn.menuPosition = (event) => { + try { + let mouseClientX = event.clientX; + let mouseClientY = event.clientY; + let screenWidth = document.documentElement.clientWidth || document.body.clientWidth; + let screenHeight = document.documentElement.clientHeight || document.body.clientHeight; + + _rightMenuWrapper.style.display = 'block'; + fn.menuControl(event); + + let menuWidth = _rightMenuContent.offsetWidth; + let menuHeight = _rightMenuContent.offsetHeight; + let showLeft = mouseClientX + menuWidth > screenWidth ? mouseClientX - menuWidth + 10 : mouseClientX; + let showTop = mouseClientY + menuHeight > screenHeight ? mouseClientY - menuHeight + 10 : mouseClientY; + showTop = mouseClientY + menuHeight > screenHeight && showTop < menuHeight && mouseClientY < menuHeight ? + showTop + (screenHeight - menuHeight - showTop - 10) : showTop; + _rightMenuWrapper.style.left = `${showLeft}px`; + _rightMenuWrapper.style.top = `${showTop}px`; + if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) fn.menuNotic(); + } catch (error) { + console.error(error); + fn.hideMenu(); + return true; + } + return false; + } + + /** + * 菜单项控制 + * @param {*} event + */ + fn.menuControl = (event) => { + fn.globalDataSet(event); + if (!!_menuMusic) _menuMusic.style.display = globalData.isShowMusic ? 'block' : 'none'; + _rightMenuList.forEach(item => { + item.style.display = 'none'; + const nodeName = item.firstElementChild.nodeName; + const groupName = item.firstElementChild.getAttribute('data-group'); + const itemEvent = item.firstElementChild.getAttribute('data-event'); + if (globalData.statusCheck || globalData.isArticle) { + switch (groupName) { + case 'inputBox': + if (globalData.isInputBox) { + item.style.display = 'block'; + if (itemEvent === 'copyCut' && !globalData.selectText) item.style.display = 'none'; + if (itemEvent === 'copyAll' && !globalData.inputValue) item.style.display = 'none'; + if (itemEvent === 'copyPaste' && !globalData.isReadClipboard) item.style.display = 'none'; + } + break; + case 'seletctText': + if (!!globalData.selectText) item.style.display = 'block'; + break; + case 'elementCheck': + if (globalData.isLink || globalData.isMediaLink) item.style.display = 'block'; + break; + case 'elementImage': + if (globalData.isImage) item.style.display = 'block'; + break; + case 'articlePage': + if (globalData.isArticle) item.style.display = 'block'; + break; + default: + item.style.display = nodeName === 'A' + ? globalData.isArticle && !globalData.statusCheck && rightMenuConfig.options.articleShowLink + ? 'block' + : 'none' + : 'block'; + break; + } + } else if (nodeName === 'A' || RightMenus.defaultGroup.every(item => { return groupName !== item })) { + item.style.display = 'block'; + } + }) + + // 执行外部事件 + volantis.mouseEvent = event; + volantis.rightmenu.method.handle.start() + + // 过滤 HR 元素 + let elementHrItem = { item: null, hide: true }; + _rightMenuListWithHr.forEach((item) => { + if (item.nodeName === "HR") { + item.style.display = 'block'; + if (!elementHrItem.item) { + elementHrItem.item = item; + return; + } + if (elementHrItem.hide || elementHrItem.item.nextElementSibling.nodeName === "hr") { + elementHrItem.item.style.display = 'none'; + } + elementHrItem.item = item; + elementHrItem.hide = true; + } else { + if (item.style.display === 'block' && elementHrItem.hide) { + elementHrItem.hide = false; + } + } + }) + if (!!elementHrItem.item && elementHrItem.hide) elementHrItem.item.style.display = 'none'; + } + + /** + * 元素状态判断/全局数据设置 + * @param {*} event + */ + fn.globalDataSet = (event) => { + globalData = Object.assign({}, globalDataBackup); + globalData.mouseEvent = event; + globalData.selectText = window.getSelection().toString(); + + // 判断是否为输入框 + if (event.target.tagName.toLowerCase() === 'input' || event.target.tagName.toLowerCase() === 'textarea') { + globalData.isInputBox = true; + globalData.inputValue = event.target.value; + } + + // 判断是否允许读取剪切板 + if (globalData.isInputBox && window.clipboardRead === false) { + globalData.isReadClipboard = false; + } + + // 判断是否包含链接 + if (!!event.target.href && RightMenus.urlRegx.test(event.target.href)) { + globalData.isLink = true; + globalData.linkUrl = event.target.href; + } + + // 判断是否包含媒体链接 + if (!!event.target.currentSrc && RightMenus.urlRegx.test(event.target.currentSrc)) { + globalData.isMediaLink = true; + globalData.mediaLinkUrl = event.target.currentSrc; + } + + // 判断是否为图片地址 + if (globalData.isMediaLink && RightMenus.imgRegx.test(globalData.mediaLinkUrl)) { + globalData.isImage = true; + } + + // 判断是否为文章页面 + if (!!(document.querySelector('#post.article') || null)) { + globalData.isArticle = true; + globalData.pathName = window.location.pathname; + } + + // 判断是否显示音乐控制器 + if (volantis.GLOBAL_CONFIG.plugins.aplayer?.enable + && typeof RightMenuAplayer !== 'undefined' + && RightMenuAplayer.APlayer.player !== undefined) { + if (rightMenuConfig.options.musicAlwaysShow + || RightMenuAplayer.APlayer.status === 'play' + || RightMenuAplayer.APlayer.status === 'undefined') { + globalData.isShowMusic = true; + } + } + + // 设定校验状态 + if (!!globalData.selectText || globalData.isInputBox || globalData.isLink || globalData.isMediaLink) { + globalData.statusCheck = true; + } + } + + /** + * 全局右键监听函数 + */ + fn.contextmenu = () => { + window.document.oncontextmenu = (event) => { + if (event.ctrlKey || document.body.offsetWidth <= 500) { + fn.hideMenu(); + return true; + } + return fn.menuPosition(event); + } + + _rightMenuWrapper.oncontextmenu = (event) => { + event.stopPropagation(); + event.preventDefault(); + return false; + } + + window.removeEventListener('blur', fn.hideMenu); + window.addEventListener('blur', fn.hideMenu); + document.body.removeEventListener('click', fn.hideMenu); + document.body.addEventListener('click', fn.hideMenu); + } + + /** + * 菜单项事件处理函数 + */ + fn.menuEvent = () => { + _rightMenuList.forEach(item => { + let eventName = item.firstElementChild.getAttribute('data-event'); + const id = item.firstElementChild.getAttribute('id'); + const groupName = item.firstElementChild.getAttribute('data-group'); + if (item.firstElementChild.nodeName === "A") return; + item.addEventListener('click', () => { + try { + if (RightMenus.defaultEvent.every(item => { return eventName !== item })) { + if (groupName === 'seletctText') { + RightMenusFunction[id](globalData.selectText) + } else if (groupName === 'elementCheck') { + RightMenusFunction[id](globalData.isLink ? globalData.linkUrl : globalData.mediaLinkUrl) + } else if (groupName === 'elementImage') { + RightMenusFunction[id](globalData.mediaLinkUrl) + } else { + RightMenusFunction[id]() + } + } else { + fn[eventName]() + } + } catch (error) { + if (volantis.GLOBAL_CONFIG.debug === "rightMenus") { + console.error({ + id: id, + error: error, + globalData: globalData, + groupName: groupName, + eventName: eventName + }); + } + if (RightMenus.messageRightMenu) { + VolantisApp.message('错误提示', error, { + icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red', + time: '15000' + }); + } + } + }) + }) + + if (_forward && _toggle && _forward) { + _backward.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + RightMenuAplayer.aplayerBackward(); + } + _toggle.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + RightMenuAplayer.aplayerToggle(); + } + _forward.onclick = (e) => { + e.preventDefault(); + e.stopPropagation(); + RightMenuAplayer.aplayerForward(); + } + } + } + + /** + * 隐藏菜单显示 + */ + fn.hideMenu = () => { + _rightMenuWrapper.style.display = null; + _rightMenuWrapper.style.left = null; + _rightMenuWrapper.style.top = null; + } + + /** + * 右键菜单覆盖提示 + */ + fn.menuNotic = () => { + const NoticeRightMenu = localStorage.getItem('NoticeRightMenu') === 'true'; + if (RightMenus.messageRightMenu && !NoticeRightMenu) + VolantisApp.message('右键菜单', '唤醒原系统菜单请使用:Ctrl + 右键', { + icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red', + displayMode: 1, + time: 9000 + }, () => { + localStorage.setItem('NoticeRightMenu', 'true') + }); + } + + fn.copyText = () => { + VolantisApp.utilWriteClipText(globalData.selectText) + .then(() => { + if (RightMenus.messageRightMenu) { + VolantisApp.messageCopyright(); + } + }).catch(e => { + if (RightMenus.messageRightMenu) { + VolantisApp.message('系统提示', e, { + icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red', + displayMode: 1, + time: 9000 + }); + } + }) + } + + fn.copyLink = () => { + VolantisApp.utilWriteClipText(globalData.linkUrl || globalData.mediaLinkUrl) + .then(() => { + if (RightMenus.messageRightMenu) { + VolantisApp.messageCopyright(); + } + }).catch(e => { + if (RightMenus.messageRightMenu) { + VolantisApp.message('系统提示', e, { + icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red', + displayMode: 1, + time: 9000 + }); + } + }) + } + + fn.copyAll = () => { + globalData.mouseEvent.target.select(); + } + + fn.copyPaste = async () => { + const result = await RightMenus.readClipboard() || ''; + if (RightMenus.messageRightMenu && window.clipboardRead === false) { + VolantisApp.message('系统提示', '未授予剪切板读取权限!'); + } else if (RightMenus.messageRightMenu && result === '') { + VolantisApp.message('系统提示', '仅支持复制文本内容!'); + } else { + RightMenus.insertAtCaret(globalData.mouseEvent.target, result); + } + } + + fn.copyCut = () => { + const statrPos = globalData.mouseEvent.target.selectionStart; + const endPos = globalData.mouseEvent.target.selectionEnd; + const inputStr = globalData.inputValue; + fn.copyText(globalData.selectText); + globalData.mouseEvent.target.value = inputStr.substring(0, statrPos) + inputStr.substring(endPos, inputStr.length); + globalData.mouseEvent.target.selectionStart = statrPos; + globalData.mouseEvent.target.selectionEnd = statrPos; + globalData.mouseEvent.target.focus(); + } + + fn.copyImg = () => { + if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) { + VolantisApp.message('系统提示', '复制中,请等待。', { + icon: rightMenuConfig.options.iconPrefix + ' fa-images' + }) + } + RightMenus.writeClipImg(globalData.mediaLinkUrl, e => { + if (RightMenus.messageRightMenu) { + VolantisApp.hideMessage(); + VolantisApp.message('系统提示', '图片复制成功!', { + icon: rightMenuConfig.options.iconPrefix + ' fa-images' + }); + } + }, (e) => { + console.error(e); + if (RightMenus.messageRightMenu) { + VolantisApp.hideMessage(); + VolantisApp.message('系统提示', '复制失败:' + e, { + icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red', + time: 9000 + }); + } + }) + } + + fn.printMode = () => { + if (window.location.pathname === globalData.pathName) { + if (RightMenus.messageRightMenu) { + const message = '是否打印当前页面?
建议打印时勾选背景图形
' + VolantisApp.question('', message, { time: 9000 }, () => { fn.printHtml() }) + } else { + fn.printHtml() + } + } + } + + fn.printHtml = () => { + if (volantis.isReadModel) fn.readMode(); + DOMController.setAttribute('details', 'open', 'true'); + DOMController.removeList([ + '.cus-article-bkg', '.iziToast-overlay', '.iziToast-wrapper', '.prev-next', + 'footer', '#l_header', '#l_cover', '#l_side', '#comments', '#s-top', '#BKG', + '#rightmenu-wrapper', '.nav-tabs', '.parallax-mirror', '.new-meta-item.share', 'div.footer' + ]); + DOMController.setStyleList([ + ['body', 'backgroundColor', 'unset'], ['#l_main', 'width', '100%'], ['#post', 'boxShadow', 'none'], + ['#post', 'background', 'none'], ['#post', 'padding', '0'], ['h1', 'textAlign', 'center'], + ['h1', 'fontWeight', '600'], ['h1', 'fontSize', '2rem'], ['h1', 'marginBottom', '20px'], + ['.tab-pane', 'display', 'block'], ['.tab-content', 'borderTop', 'none'], ['.highlight>table pre', 'whiteSpace', 'pre-wrap'], + ['.highlight>table pre', 'wordBreak', 'break-all'], ['.fancybox img', 'height', 'auto'], ['.fancybox img', 'weight', 'auto'] + ]); + setTimeout(() => { + window.print(); + document.body.innerHTML = ''; + window.location.reload(); + }, 50); + } + + fn.readMode = () => { + if (typeof ScrollReveal === 'function') ScrollReveal().clean('#comments'); + DOMController.fadeToggleList([ + document.querySelector('#l_header'), document.querySelector('footer'), + document.querySelector('#s-top'), document.querySelector('.article-meta#bottom'), + document.querySelector('.prev-next'), document.querySelector('#l_side'), + document.querySelector('#comments') + ]); + DOMController.toggleClassList([ + [document.querySelector('#l_main'), 'common_read'], [document.querySelector('#l_main'), 'common_read_main'], + [document.querySelector('#l_body'), 'common_read'], [document.querySelector('#safearea'), 'common_read'], + [document.querySelector('#pjax-container'), 'common_read'], [document.querySelector('#read_bkg'), 'common_read_hide'], + [document.querySelector('h1'), 'common_read_h1'], [document.querySelector('#post'), 'post_read'], + [document.querySelector('#l_cover'), 'read_cover'], [document.querySelector('.widget.toc-wrapper'), 'post_read'] + ]); + DOMController.setStyle('.copyright.license', 'margin', '15px 0'); + volantis.isReadModel = volantis.isReadModel === undefined ? true : !volantis.isReadModel; + if (volantis.isReadModel) { + if (RightMenus.messageRightMenu) VolantisApp.message('系统提示', '阅读模式已开启,您可以点击屏幕空白处退出。', { + backgroundColor: 'var(--color-read-post)', + icon: rightMenuConfig.options.iconPrefix + ' fa-book-reader', + displayMode: 1, + time: 5000 + }); + document.querySelector('#l_body').removeEventListener('click', fn.readMode); + document.querySelector('#l_body').addEventListener('click', (event) => { + if (DOMController.hasClass(event.target, 'common_read')) { + fn.readMode(); + } + }); + } else { + document.querySelector('#l_body').removeEventListener('click', fn.readMode); + document.querySelector('#post').removeEventListener('click', fn.readMode); + DOMController.setStyle('.prev-next', 'display', 'flex'); + DOMController.setStyle('.copyright.license', 'margin', '15px -40px'); + } + } + + return { + init: fn.initEvent, + hideMenu: fn.hideMenu, + readMode: fn.readMode + } +})() + +Object.freeze(RightMenus); +volantis.requestAnimationFrame(() => { + if (document.readyState !== 'loading') { + RightMenus.initialMenu(); + } else { + document.addEventListener("DOMContentLoaded", function () { + RightMenus.initialMenu(); + }) + } +}); diff --git a/js/plugins/tags/contributors.js b/js/plugins/tags/contributors.js new file mode 100644 index 0000000..f94e880 --- /dev/null +++ b/js/plugins/tags/contributors.js @@ -0,0 +1,92 @@ +const ContributorsJS = { + requestAPI: (url, callback, timeout) => { + let retryTimes = 5; + + function request() { + return new Promise((resolve, reject) => { + let status = 0; // 0 等待 1 完成 2 超时 + let timer = setTimeout(() => { + if (status === 0) { + status = 2; + timer = null; + reject('请求超时'); + if (retryTimes == 0) { + timeout(); + } + } + }, 5000); + fetch(url).then(function (response) { + if (status !== 2) { + clearTimeout(timer); + resolve(response); + timer = null; + status = 1; + } + if (response.ok) { + return response.json(); + } + throw new Error('Network response was not ok.'); + }).then(function (data) { + retryTimes = 0; + callback(data); + }).catch(function (error) { + if (retryTimes > 0) { + retryTimes -= 1; + setTimeout(() => { + request(); + }, 5000); + } else { + timeout(); + } + }); + }); + } + request(); + }, + layout: (cfg) => { + const el = cfg.el; + ContributorsJS.requestAPI(cfg.api, function (data) { + el.querySelector('.loading-wrap').remove(); + var cellALL = ""; + (data || []).forEach((item, i) => { + var user = '
'; + user += ''; + user += '' + item.login + ''; + user += '
' + item.login + '
'; + user += '
'; + user += '
'; + cellALL += user; + }); + el.querySelector('.group-body').innerHTML = cellALL; + }, function () { + try { + el.querySelector('.loading-wrap svg').remove(); + el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。'); + } catch (e) { } + }); + }, + start: () => { + const els = document.getElementsByClassName('contributorsjs-wrap'); + for (var i = 0; i < els.length; i++) { + const el = els[i]; + const api = el.getAttribute('api'); + if (api == null) { + continue; + } + var cfg = new Object(); + cfg.el = el; + cfg.api = api; + cfg.class = el.getAttribute('class'); + cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar; + ContributorsJS.layout(cfg); + } + } +} + + + +ContributorsJS.start(); +document.addEventListener('pjax:complete', function () { + ContributorsJS.start(); +}); \ No newline at end of file diff --git a/js/plugins/tags/friends.js b/js/plugins/tags/friends.js new file mode 100644 index 0000000..349595a --- /dev/null +++ b/js/plugins/tags/friends.js @@ -0,0 +1,93 @@ +const FriendsJS = { + requestAPI: (url, callback, timeout) => { + let retryTimes = 5; + + function request() { + return new Promise((resolve, reject) => { + let status = 0; // 0 等待 1 完成 2 超时 + let timer = setTimeout(() => { + if (status === 0) { + status = 2; + timer = null; + reject('请求超时'); + if (retryTimes == 0) { + timeout(); + } + } + }, 5000); + fetch(url).then(function (response) { + if (status !== 2) { + clearTimeout(timer); + resolve(response); + timer = null; + status = 1; + } + if (response.ok) { + return response.json(); + } + throw new Error('Network response was not ok.'); + }).then(function (data) { + retryTimes = 0; + callback(data); + }).catch(function (error) { + if (retryTimes > 0) { + retryTimes -= 1; + setTimeout(() => { + request(); + }, 5000); + } else { + timeout(); + } + }); + }); + } + request(); + }, + layout: (cfg) => { + const el = cfg.el; + FriendsJS.requestAPI(cfg.api, function (data) { + el.querySelector('.loading-wrap').remove(); + const arr = data.content; + var cellALL = ""; + arr.forEach((item, i) => { + var user = '
'; + user += ''; + user += '' + item.title + ''; + user += '
' + item.title + '
'; + user += '
'; + user += '
'; + cellALL += user; + }); + el.querySelector('.group-body').innerHTML = cellALL; + }, function () { + try { + el.querySelector('.loading-wrap svg').remove(); + el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。'); + } catch (e) { } + }); + }, + start: () => { + const els = document.getElementsByClassName('friendsjs-wrap'); + for (var i = 0; i < els.length; i++) { + const el = els[i]; + const api = el.getAttribute('api'); + if (api == null) { + continue; + } + var cfg = new Object(); + cfg.el = el; + cfg.api = api; + cfg.class = el.getAttribute('class'); + cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar; + FriendsJS.layout(cfg); + } + } +} + + + +FriendsJS.start(); +document.addEventListener('pjax:complete', function () { + FriendsJS.start(); +}); \ No newline at end of file diff --git a/js/plugins/tags/sites.js b/js/plugins/tags/sites.js new file mode 100644 index 0000000..6abbffa --- /dev/null +++ b/js/plugins/tags/sites.js @@ -0,0 +1,96 @@ +const SitesJS = { + requestAPI: (url, callback, timeout) => { + let retryTimes = 5; + + function request() { + return new Promise((resolve, reject) => { + let status = 0; // 0 等待 1 完成 2 超时 + let timer = setTimeout(() => { + if (status === 0) { + status = 2; + timer = null; + reject('请求超时'); + if (retryTimes == 0) { + timeout(); + } + } + }, 5000); + fetch(url).then(function (response) { + if (status !== 2) { + clearTimeout(timer); + resolve(response); + timer = null; + status = 1; + } + if (response.ok) { + return response.json(); + } + throw new Error('Network response was not ok.'); + }).then(function (data) { + retryTimes = 0; + callback(data); + }).catch(function (error) { + if (retryTimes > 0) { + retryTimes -= 1; + setTimeout(() => { + request(); + }, 5000); + } else { + timeout(); + } + }); + }); + } + request(); + }, + layout: (cfg) => { + const el = cfg.el; + SitesJS.requestAPI(cfg.api, function (data) { + el.querySelector('.loading-wrap').remove(); + const arr = data.content; + var cellALL = ""; + arr.forEach((item, i) => { + var cell = '
'; + cell += ''; + cell += '' + item.title + ''; + cell += '
'; + cell += '' + item.title + ''; + cell += '' + item.title + ''; + cell += '' + (item.description || item.url) + ''; + cell += '
'; + cell += '
'; + cell += '
'; + cellALL += cell; + }); + el.querySelector('.group-body').innerHTML = cellALL; + }, function () { + try { + el.querySelector('.loading-wrap svg').remove(); + el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。'); + } catch (e) { } + }); + }, + start: (cfg) => { + const els = document.getElementsByClassName('sitesjs-wrap'); + for (var i = 0; i < els.length; i++) { + const el = els[i]; + const api = el.getAttribute('api'); + if (api == null) { + continue; + } + var cfg = new Object(); + cfg.class = el.getAttribute('class'); + cfg.el = el; + cfg.api = api; + cfg.avatar = volantis.GLOBAL_CONFIG.default.link; + cfg.screenshot = volantis.GLOBAL_CONFIG.default.cover; + SitesJS.layout(cfg); + } + } +} + + +SitesJS.start(); +document.addEventListener('pjax:complete', function () { + SitesJS.start(); +}); \ No newline at end of file diff --git a/js/search/hexo.js b/js/search/hexo.js new file mode 100644 index 0000000..dbe2cdf --- /dev/null +++ b/js/search/hexo.js @@ -0,0 +1,192 @@ +let SearchService = (() => { + const fn = {}; + fn.queryText = null; + fn.data = null; + fn.template = ` +`; + fn.init = () => { + let div = document.createElement("div"); + div.innerHTML += fn.template; + document.body.append(div); + document.querySelectorAll(".u-search-form").forEach((e) => { + e.addEventListener("submit", fn.onSubmit, false); + }); + let uSearchModalInput = document.querySelector("#u-search-modal-input"); + uSearchModalInput.addEventListener("input", fn.onSubmit); + document + .querySelector("#u-search-btn-close") + .addEventListener("click", fn.close, false); + document + .querySelector("#modal-overlay") + .addEventListener("click", fn.close, false); + }; + fn.onSubmit = (event) => { + event.preventDefault(); + let input = event.target.querySelector(".u-search-input"); + if (input) { + fn.queryText = input.value; + } else { + fn.queryText = event.target.value; + } + + if (fn.queryText) { + fn.search(); + } + }; + fn.search = async () => { + document.querySelectorAll(".u-search-input").forEach((e) => { + e.value = fn.queryText; + }); + document.querySelector("#u-search").style.display = "block"; + if (!fn.data) { + fn.data = await fn.fetchData(); + } + let results = ""; + results += fn.buildResultList(fn.data.pages); + results += fn.buildResultList(fn.data.posts); + document.querySelector("#u-search .modal-results").innerHTML = results; + window.pjax && pjax.refresh(document.querySelector("#u-search")); + document.addEventListener("keydown", function f(event) { + if (event.code === "Escape") { + fn.close(); + document.removeEventListener("keydown", f); + } + }); + }; + fn.close = () => { + document.querySelector("#u-search").style.display = "none"; + }; + fn.fetchData = () => { + return fetch(SearchServiceDataPath) + .then((response) => response.text()) + .then((res) => { + const data = JSON.parse(res); + // console.log(data); + return data; + }); + }; + fn.buildResultList = (data) => { + let html = ""; + data.forEach((post) => { + if (post.text) { + post.text = post.text.replace(/12345\d*/g, "") // 简易移除代码行号 + } + if (!post.title && post.text) { + post.title = post.text.trim().slice(0, 15) + } + if (fn.contentSearch(post)) { + html += fn.buildResult(post.permalink, post.title, post.digest); + } + }); + return html; + }; + fn.contentSearch = (post) => { + let post_title = post.title.trim().toLowerCase(); + let post_content = post.text.trim().toLowerCase(); + let keywords = fn.queryText + .trim() + .toLowerCase() + .split(/[-\s]+/); + let foundMatch = false; + let index_title = -1; + let index_content = -1; + let first_occur = -1; + if (post_title && post_content) { + keywords.forEach((word, index) => { + index_title = post_title.indexOf(word); + index_content = post_content.indexOf(word); + if (index_title < 0 && index_content < 0) { + foundMatch = false; + } else { + foundMatch = true; + if (index_content < 0) { + index_content = 0; + } + if (index === 0) { + first_occur = index_content; + } + } + if (foundMatch) { + post_content = post.text.trim(); + let start = 0; + let end = 0; + if (first_occur >= 0) { + start = Math.max(first_occur - 40, 0); + end = + start === 0 + ? Math.min(200, post_content.length) + : Math.min(first_occur + 120, post_content.length); + let match_content = post_content.substring(start, end); + keywords.forEach(function (keyword) { + let regS = new RegExp(keyword, "gi"); + match_content = match_content.replace( + regS, + "" + keyword + "" + ); + }); + post.digest = match_content + "......"; + } else { + end = Math.min(200, post_content.length); + post.digest = post_content.trim().substring(0, end); + } + } + }); + } + return foundMatch; + }; + fn.buildResult = (url, title, digest) => { + let result = fn.getUrlRelativePath(url); + let html = ""; + html += "
  • "; + html += + ""; + html += "" + title + ""; + if (digest !== "") html += "" + digest + ""; + html += ""; + html += "
  • "; + return html; + }; + fn.getUrlRelativePath = function (url) { + let arrUrl = url.split("//"); + let start = arrUrl[1].indexOf("/"); + let relUrl = arrUrl[1].substring(start); + if (relUrl.indexOf("?") != -1) { + relUrl = relUrl.split("?")[0]; + } + return relUrl; + }; + return { + init: () => { + fn.init(); + }, + setQueryText: (queryText) => { + fn.queryText = queryText; + }, + search: () => { + fn.search(); + }, + }; +})(); +Object.freeze(SearchService); + +SearchService.init(); +document.addEventListener("pjax:success", SearchService.init); +document.addEventListener("pjax:send", function () { + document.querySelector("#u-search").style.display = "none"; +}); diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..9c3ecbc --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,3966 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + +
    + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:re1wn + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:阳仔 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:zer0_1s + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:MOUCHEN + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3eg1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白色键盘 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:彦语 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白玉京 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    + + + + + +
    + + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000..3f0a256 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,3966 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + +
    + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:mjc + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Keyboard + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Enc3l + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:F0rga1n + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:cheng_xing + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:D4wn + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:root + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    + + + + + +
    + + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/page/4/index.html b/page/4/index.html new file mode 100644 index 0000000..5e1a8a7 --- /dev/null +++ b/page/4/index.html @@ -0,0 +1,3576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + +
    + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:邓祺 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:p5ych + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    +
    + + + +

    + 4 / 4 +

    + +
    + + + + +
    + + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/placeholder b/placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/source/_data/author.yml b/source/_data/author.yml new file mode 100644 index 0000000..9057d2c --- /dev/null +++ b/source/_data/author.yml @@ -0,0 +1,17 @@ +SecureNexusLab: + name: SecureNexusLab + avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png + url: https://s11.ax1x.com/2024/02/09/pF3MDBT.jpg + +i3g1nner: + name: i3g1nner + avatar: https://s11.ax1x.com/2024/02/05/pFlxnXV.png + url: https://i3eg1nner.github.io/ + + +彦语: + name: 彦语 + avatar: https://pic.imgdb.cn/item/65c596989f345e8d03b00186.jpg + url: https://yanyusec.github.io/ + + diff --git a/source/_data/friends.yml b/source/_data/friends.yml new file mode 100644 index 0000000..34a4332 --- /dev/null +++ b/source/_data/friends.yml @@ -0,0 +1,118 @@ +- group: Web安全小组 # 分组标题 + description: # 分组描述 + items: + - title: 彦语 # 名称 + avatar: https://pic.imgdb.cn/item/65c596989f345e8d03b00186.jpg # 头像 + url: https://yanyusec.github.io/ # 链接 + description: '趁赤诚仍在,趁年华尚好' # 描述 + - title: i3eg1nner # 名称 + avatar: https://pic.imgdb.cn/item/65c596a79f345e8d03b01a39.png # 头像 + url: https://i3eg1nner.github.io/ # 链接 + description: '生命不息,折腾不止' # 描述 + - title: 【白】 # 名称 + avatar: https://pic.imgdb.cn/item/65c596999f345e8d03b001e7.png # 头像 + url: http://www.wangehacker.cn # 链接 + description: '热爱的事情,一定有所收获' # 描述 + - title: 怕踩的土豆雷 # 名称 + avatar: https://pic.imgdb.cn/item/65c596839f345e8d03afde99.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: 'Try Harder' # 描述 + - title: 安稳 # 名称 + avatar: https://pic.imgdb.cn/item/65c596849f345e8d03afdf5e.jpg # 头像 + url: https://tddddddddd.github.io # 链接 + description: '关关难过关关过' # 描述 + - title: root # 名称 + avatar: https://pic.imgdb.cn/item/65c596849f345e8d03afdf23.png # 头像 + url: https://chenchanghui.github.io # 链接 + description: '越努力,越幸运' # 描述 + - title: 浅忆 # 名称 + avatar: https://pic.imgdb.cn/item/65c596909f345e8d03aff347.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '人若无名,便可潜心练剑' # 描述 + - title: 佛系白猫 # 名称 + avatar: https://pic.imgdb.cn/item/65c596909f345e8d03aff367.png # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '拯救世界,保护地球' # 描述 + - title: whistleH # 名称 + avatar: https://pic.imgdb.cn/item/65c596909f345e8d03aff3cb.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '天青色等烟雨,而我在等你' # 描述 + +- group: 二进制小组 # 分组标题 + description: # 分组描述 + items: + - title: MOUCHEN # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + - title: Kidder1 # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://kidder1.github.io/ # 链接 + description: ' ' # 描述 + - title: unpWn4bl3 # 名称 + avatar: https://pic.imgdb.cn/item/65c596849f345e8d03afe0a1.png # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '想要一觉醒来年入百洞' # 描述 + - title: 郭小白QAQ # 名称 + avatar: https://pic.imgdb.cn/item/65c596859f345e8d03afe0fd.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '精彩不亮丽,起落是无常' # 描述 + - title: re1wn # 名称 + avatar: https://pic.imgdb.cn/item/65c596909f345e8d03aff3a3.jpg # 头像 + url: https://blog.csdn.net/weixin_45055269 # 链接 + description: '一个热爱信息安全的小白' # 描述 + + - title: 4n4gar1ka # 名称 + avatar: https://pic.imgdb.cn/item/65c596989f345e8d03b00153.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '无法驾驭自身的人,将永远是奴隶' # 描述 + - title: Jarvis # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + + - title: Arrebol # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + + +- group: 团队支持小组 # 分组标题 + description: # 分组描述 + items: + - title: rainki # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + - title: 水母 # 名称 + avatar: https://pic.imgdb.cn/item/65c596909f345e8d03aff30f.png # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: '好好学习' # 描述 + - title: Swizzer # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + - title: TBK # 名称 + avatar: https://pic.imgdb.cn/item/65c596989f345e8d03b000df.jpg # 头像 + url: https://blog.csdn.net/qq_43390703 # 链接 + description: '嘿嘿嘿,阿巴阿巴' # 描述 + - title: 安修 # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://anxiu.cloud # 链接 + description: ' ' # 描述 + - title: joker # 名称 + avatar: https://pic.imgdb.cn/item/65c596989f345e8d03b00117.jpg # 头像 + url: https://blog.csdn.net/m0_66935689 # 链接 + description: '非淡泊无以明志,非宁静无以致远' # 描述 + - title: To0of # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + - title: Ethan # 名称 + avatar: https://pic.imgdb.cn/item/65c5969e9f345e8d03b00b7f.jpg # 头像 + url: https://securenexuslab.github.io/ # 链接 + description: ' ' # 描述 + + + + diff --git a/source/_posts/bad-usb.md b/source/_posts/bad-usb.md new file mode 100644 index 0000000..78f9534 --- /dev/null +++ b/source/_posts/bad-usb.md @@ -0,0 +1,18 @@ +--- +layout: page +title: BadUSB制作教程 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-07-27 00:10:52 +tags: +- 社区分享 +- BadUSB +categories: +- 社区分享 +--- + +分享人:root + + \ No newline at end of file diff --git a/source/_posts/broken-access-control.md b/source/_posts/broken-access-control.md new file mode 100644 index 0000000..b35c4f0 --- /dev/null +++ b/source/_posts/broken-access-control.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 越权漏洞知识 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-05 10:00:00 +tags: +- 社区分享 +- Web安全 +categories: +- 社区分享 +--- + +分享人:白色键盘 + + \ No newline at end of file diff --git a/source/_posts/crypt-introduction.md b/source/_posts/crypt-introduction.md new file mode 100644 index 0000000..fc43c98 --- /dev/null +++ b/source/_posts/crypt-introduction.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Crypto入门 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-04 12:00:00 +tags: +- 社区分享 +- 密码学 +categories: +- 社区分享 +--- + +分享人:Keyboard + + \ No newline at end of file diff --git a/source/_posts/csrf.md b/source/_posts/csrf.md new file mode 100644 index 0000000..6784fcf --- /dev/null +++ b/source/_posts/csrf.md @@ -0,0 +1,18 @@ +--- +layout: page +title: csrf漏洞讲解与实战 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-04 12:00:00 +tags: +- 社区分享 +- Web安全 +categories: +- 社区分享 +--- + +分享人:Enc3l + + \ No newline at end of file diff --git a/source/_posts/datacon.md b/source/_posts/datacon.md new file mode 100644 index 0000000..3426da1 --- /dev/null +++ b/source/_posts/datacon.md @@ -0,0 +1,18 @@ +--- +layout: page +title: DataCon经验分享 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-15 00:36:28 +tags: +- 社区分享 +- DataCon +categories: +- 社区分享 +--- + +分享人:MOUCHEN + + \ No newline at end of file diff --git a/source/_posts/elf-file-format.md b/source/_posts/elf-file-format.md new file mode 100644 index 0000000..5ef1e34 --- /dev/null +++ b/source/_posts/elf-file-format.md @@ -0,0 +1,18 @@ +--- +layout: page +title: elf文件格式解析 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-07-27 00:10:52 +tags: +- 社区分享 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:antel0p3 + + \ No newline at end of file diff --git a/source/_posts/fuzz-introduction.md b/source/_posts/fuzz-introduction.md new file mode 100644 index 0000000..92591a1 --- /dev/null +++ b/source/_posts/fuzz-introduction.md @@ -0,0 +1,19 @@ +--- +layout: page +title: Fuzz模糊测试系列分享(一)模糊测试简介 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-04 12:00:00 +tags: +- 社区分享 +- FUZZ +categories: +- 社区分享 +--- + +分享人:TBK + + + \ No newline at end of file diff --git a/source/_posts/fuzz-libfuzz-introduction.md b/source/_posts/fuzz-libfuzz-introduction.md new file mode 100644 index 0000000..f2cdcf1 --- /dev/null +++ b/source/_posts/fuzz-libfuzz-introduction.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Fuzz模糊测试系列分享(三)libfuzz简介 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-10-30 21:56:32 +tags: +- 社区分享 +- FUZZ +categories: +- 社区分享 +--- + +分享人:TBK + + \ No newline at end of file diff --git a/source/_posts/fuzz-libfuzz-sourcecode.md b/source/_posts/fuzz-libfuzz-sourcecode.md new file mode 100644 index 0000000..f40feb4 --- /dev/null +++ b/source/_posts/fuzz-libfuzz-sourcecode.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Fuzz模糊测试系列分享(四)libfuzz源码解读 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-02 10:00:00 +tags: +- 社区分享 +- FUZZ +categories: +- 社区分享 +--- + +分享人:TBK + + \ No newline at end of file diff --git a/source/_posts/fuzz-tester.md b/source/_posts/fuzz-tester.md new file mode 100644 index 0000000..fbc63db --- /dev/null +++ b/source/_posts/fuzz-tester.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Fuzz模糊测试系列分享(二)手写一个模糊测试器 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-10-14 16:22:32 +tags: +- 社区分享 +- FUZZ +categories: +- 社区分享 +--- + +分享人:TBK + + \ No newline at end of file diff --git a/source/_posts/hardswap-uniswap.md b/source/_posts/hardswap-uniswap.md new file mode 100644 index 0000000..a0f374f --- /dev/null +++ b/source/_posts/hardswap-uniswap.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Hardhat框架与Uniswap交易代码 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-12-01 20:50:00 +tags: +- 社区分享 +- 智能合约 +categories: +- 社区分享 +--- + +分享人:流竹君雅 + + \ No newline at end of file diff --git a/source/_posts/hello-world.md b/source/_posts/hello-world.md new file mode 100644 index 0000000..5b7a7b3 --- /dev/null +++ b/source/_posts/hello-world.md @@ -0,0 +1,43 @@ +--- +title: Hello World +author: SecureNexusLab +readmore: true +typora-root-url: ./.. +--- +Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues). + +## Quick Start + +### Create a new post + +``` bash +$ hexo new "My New Post" +``` + +More info: [Writing](https://hexo.io/docs/writing.html) + +### Run server + +``` bash +$ hexo server +``` + +More info: [Server](https://hexo.io/docs/server.html) + +### Generate static files + +``` bash +$ hexo generate +``` + +More info: [Generating](https://hexo.io/docs/generating.html) + +### Deploy to remote sites + +``` bash +$ hexo deploy +``` + +More info: [Deployment](https://hexo.io/docs/one-command-deployment.html) + +![image-20240206015250320](/images/hello-world/image-20240206015250320.png) \ No newline at end of file diff --git a/source/_posts/iot-firmware-guide.md b/source/_posts/iot-firmware-guide.md new file mode 100644 index 0000000..24da7b4 --- /dev/null +++ b/source/_posts/iot-firmware-guide.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 物联网固件分析指南 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-12-11 11:04:19 +tags: +- 社区分享 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:gxh191 + + \ No newline at end of file diff --git a/source/_posts/iot-firmware.md b/source/_posts/iot-firmware.md new file mode 100644 index 0000000..66262df --- /dev/null +++ b/source/_posts/iot-firmware.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 物联网固件仿真与漏洞挖掘基础思路 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-23 21:00:00 +tags: +- 社区分享 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:re1wn + + \ No newline at end of file diff --git a/source/_posts/iot-re.md b/source/_posts/iot-re.md new file mode 100644 index 0000000..691cf16 --- /dev/null +++ b/source/_posts/iot-re.md @@ -0,0 +1,18 @@ +--- +layout: page +title: IoT:手把手带你复现两个漏洞 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-20 10:30:00 +tags: +- 社区分享 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:zer0_1s + + \ No newline at end of file diff --git a/source/_posts/logical-flaw.md b/source/_posts/logical-flaw.md new file mode 100644 index 0000000..b0b5a9f --- /dev/null +++ b/source/_posts/logical-flaw.md @@ -0,0 +1,19 @@ +--- +layout: page +title: 逻辑漏洞和src小技巧 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-10-27 23:12:10 +tags: +- 社区分享 +- Web安全 +- SRC +categories: +- 社区分享 +--- + +分享人:彦语 + + \ No newline at end of file diff --git a/source/_posts/mevbot.md b/source/_posts/mevbot.md new file mode 100644 index 0000000..dd84759 --- /dev/null +++ b/source/_posts/mevbot.md @@ -0,0 +1,18 @@ +--- +layout: page +title: MEVBot Exploit +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-12-05 20:50:00 +tags: +- 社区分享 +- 智能合约 +categories: +- 社区分享 +--- + +分享人:LCatro + + \ No newline at end of file diff --git a/source/_posts/nodejs.md b/source/_posts/nodejs.md new file mode 100644 index 0000000..c39bd6c --- /dev/null +++ b/source/_posts/nodejs.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Node.js原型链污染 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2024-01-18 18:08:34 +tags: +- 社区分享 +- Node.js +categories: +- 社区分享 +--- + +分享人:蒙面阿强 + + \ No newline at end of file diff --git a/source/_posts/php-unserialize.md b/source/_posts/php-unserialize.md new file mode 100644 index 0000000..a56aba0 --- /dev/null +++ b/source/_posts/php-unserialize.md @@ -0,0 +1,19 @@ +--- +layout: page +title: PHP反序列化漏洞 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-07-24 01:04:04 +tags: +- 社区分享 +- PHP +- Web安全 +categories: +- 社区分享 +--- + +分享人:p5ych + + \ No newline at end of file diff --git a/source/_posts/postgraduate-job.md b/source/_posts/postgraduate-job.md new file mode 100644 index 0000000..17a4acb --- /dev/null +++ b/source/_posts/postgraduate-job.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 科普篇——关于考研、保研和找工作 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2024-01-07 21:01:47 +tags: +- 社区分享 +- 科普 +categories: +- 社区分享 +--- + +分享人:rainki + + \ No newline at end of file diff --git a/source/_posts/robot-study.md b/source/_posts/robot-study.md new file mode 100644 index 0000000..9201432 --- /dev/null +++ b/source/_posts/robot-study.md @@ -0,0 +1,18 @@ +--- +layout: page +title: Robot学习经历分享 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-21 10:00:00 +tags: +- 社区分享 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:阳仔 + + \ No newline at end of file diff --git a/source/_posts/shell.md b/source/_posts/shell.md new file mode 100644 index 0000000..2d527d5 --- /dev/null +++ b/source/_posts/shell.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 服务器反弹shell +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-07-24 10:18:47 +tags: +- 社区分享 +- Web安全 +categories: +- 社区分享 +--- + +分享人:邓祺 + + \ No newline at end of file diff --git a/source/_posts/sql-bypass.md b/source/_posts/sql-bypass.md new file mode 100644 index 0000000..78a2708 --- /dev/null +++ b/source/_posts/sql-bypass.md @@ -0,0 +1,19 @@ +--- +layout: page +title: SQL注入防御绕过方法(SQL bypass) +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-10-26 12:10:00 +tags: +- 社区分享 +- Web安全 +- Bypass +categories: +- 社区分享 +--- + +分享人:白玉京 + + \ No newline at end of file diff --git a/source/_posts/ssrf.md b/source/_posts/ssrf.md new file mode 100644 index 0000000..bd43e96 --- /dev/null +++ b/source/_posts/ssrf.md @@ -0,0 +1,19 @@ +--- +layout: page +title: 从零开始的SSRF +author: i3g1nner +cover: true +sidebar: [] +readmore: true +date: 2024-01-31 17:10:20 +tags: +- 社区分享 +- SSRF +- Web安全 +categories: +- 社区分享 +--- + +分享人:i3g1nner + + \ No newline at end of file diff --git a/source/_posts/ssti.md b/source/_posts/ssti.md new file mode 100644 index 0000000..04e8248 --- /dev/null +++ b/source/_posts/ssti.md @@ -0,0 +1,19 @@ +--- +layout: page +title: SSTI服务端模板注入 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-11-14 17:17:02 +tags: +- 社区分享 +- Web安全 +- SSTI +categories: +- 社区分享 +--- + +分享人:i3eg1nner + + \ No newline at end of file diff --git a/source/_posts/stack-overflow.md b/source/_posts/stack-overflow.md new file mode 100644 index 0000000..5661d45 --- /dev/null +++ b/source/_posts/stack-overflow.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 安全机制与栈溢出基础 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-04 12:00:00 +tags: +- 社区分享 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:antel0p3 + + \ No newline at end of file diff --git a/source/_posts/steganography.md b/source/_posts/steganography.md new file mode 100644 index 0000000..da1b2ad --- /dev/null +++ b/source/_posts/steganography.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 文件隐写 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-04 12:00:00 +tags: +- 社区分享 +- MISC +categories: +- 社区分享 +--- + +分享人:F0rga1n + + \ No newline at end of file diff --git a/source/_posts/symbolic-execution.md b/source/_posts/symbolic-execution.md new file mode 100644 index 0000000..716180f --- /dev/null +++ b/source/_posts/symbolic-execution.md @@ -0,0 +1,19 @@ +--- +layout: page +title: 简单了解符号执行 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-12-20 16:41:46 +tags: +- 社区分享 +- 二进制安全 +- 符号执行 +categories: +- 社区分享 +--- + +分享人:Celeste_GXB + + \ No newline at end of file diff --git a/source/_posts/tools.md b/source/_posts/tools.md new file mode 100644 index 0000000..8897b00 --- /dev/null +++ b/source/_posts/tools.md @@ -0,0 +1,19 @@ +--- +layout: page +title: 二进制分析工具 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-07-26 23:17:59 +tags: +- 社区分享 +- 工具 +- 二进制安全 +categories: +- 社区分享 +--- + +分享人:antel0p3 + + \ No newline at end of file diff --git a/source/_posts/upload-file-introduvtion.md b/source/_posts/upload-file-introduvtion.md new file mode 100644 index 0000000..f2222a5 --- /dev/null +++ b/source/_posts/upload-file-introduvtion.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 文件上传漏洞基础 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-08 00:28:51 +tags: +- 社区分享 +- Web安全 +categories: +- 社区分享 +--- + +分享人:mjc + + \ No newline at end of file diff --git a/source/_posts/upload-file-sp.md b/source/_posts/upload-file-sp.md new file mode 100644 index 0000000..dfb7571 --- /dev/null +++ b/source/_posts/upload-file-sp.md @@ -0,0 +1,19 @@ +--- +layout: page +title: 文件上传另类应用 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-12-20 16:27:54 +tags: +- 社区分享 +- Web安全 +- 文件上传 +categories: +- 社区分享 +--- + +分享人:老梁 + + diff --git a/source/_posts/v2x-introduction.md b/source/_posts/v2x-introduction.md new file mode 100644 index 0000000..19f1d87 --- /dev/null +++ b/source/_posts/v2x-introduction.md @@ -0,0 +1,18 @@ +--- +layout: page +title: 车联网安全入门分享 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-12-27 15:54:23 +tags: +- 社区分享 +- 车联网安全 +categories: +- 社区分享 +--- + +分享人:风间映川 + + \ No newline at end of file diff --git a/source/_posts/windows-pe.md b/source/_posts/windows-pe.md new file mode 100644 index 0000000..7f3c0b5 --- /dev/null +++ b/source/_posts/windows-pe.md @@ -0,0 +1,18 @@ +--- +layout: page +title: windows权限提升 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-03 23:18:32 +tags: +- 社区分享 +- Windows提权 +categories: +- 社区分享 +--- + +分享人:D4wn + + \ No newline at end of file diff --git a/source/_posts/xss-introduction.md b/source/_posts/xss-introduction.md new file mode 100644 index 0000000..da40af0 --- /dev/null +++ b/source/_posts/xss-introduction.md @@ -0,0 +1,18 @@ +--- +layout: page +title: xss漏洞原理基础与实战 +author: SecureNexusLab +cover: true +sidebar: [] +readmore: true +date: 2023-08-04 12:00:00 +tags: +- 社区分享 +- Web安全 +categories: +- 社区分享 +--- + +分享人:cheng_xing + + \ No newline at end of file diff --git a/source/about/index.md b/source/about/index.md new file mode 100644 index 0000000..d9f7827 --- /dev/null +++ b/source/about/index.md @@ -0,0 +1,11 @@ +--- +layout: docs +seo_title: 关于 +bottom_meta: false +sidebar: [] +twikoo: + placeholder: 有什么想对我说的呢? +--- + + +欢迎加入我们:343380539(QQ群),一起建立一个知识分享社群~ \ No newline at end of file diff --git a/source/categories/index.md b/source/categories/index.md new file mode 100644 index 0000000..e5ab835 --- /dev/null +++ b/source/categories/index.md @@ -0,0 +1,5 @@ +--- +layout: category +index: true +title: 所有分类 +--- \ No newline at end of file diff --git a/source/contributors/index.md b/source/contributors/index.md new file mode 100644 index 0000000..8367844 --- /dev/null +++ b/source/contributors/index.md @@ -0,0 +1,12 @@ +--- +layout: friends # 必须 +title: SecureNexusLab团队 # 可选,这是友链页的标题 +author: SecureNexusLab +--- + +近期成绩: +edusrc 总提交漏洞数量: 97 | 江西财经大学、同济大学、辽宁交通学院等漏洞报送证书 | cnvd漏洞若干 | 漏洞盒子公益src月榜前15 | 百度src月榜23 | 在腾讯src、新氧src等企业安全应急响应中心提交过漏洞,目前主要精力在挖掘企业src | datacon 漏洞挖掘赛道第四名 | 多个物联网固件0day漏洞 + + + + diff --git a/source/tags/index.md b/source/tags/index.md new file mode 100644 index 0000000..5ba5487 --- /dev/null +++ b/source/tags/index.md @@ -0,0 +1,5 @@ +--- +layout: tag +index: true +title: 所有标签 +--- \ No newline at end of file diff --git a/tags/BadUSB/index.html b/tags/BadUSB/index.html new file mode 100644 index 0000000..ceca284 --- /dev/null +++ b/tags/BadUSB/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: BadUSB - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:root + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/Bypass/index.html b/tags/Bypass/index.html new file mode 100644 index 0000000..b482005 --- /dev/null +++ b/tags/Bypass/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: Bypass - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白玉京 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/DataCon/index.html b/tags/DataCon/index.html new file mode 100644 index 0000000..4aac8b0 --- /dev/null +++ b/tags/DataCon/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: DataCon - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:MOUCHEN + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/FUZZ/index.html b/tags/FUZZ/index.html new file mode 100644 index 0000000..ab7c001 --- /dev/null +++ b/tags/FUZZ/index.html @@ -0,0 +1,3577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: FUZZ - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/MISC/index.html b/tags/MISC/index.html new file mode 100644 index 0000000..04f8e73 --- /dev/null +++ b/tags/MISC/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: MISC - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:F0rga1n + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/Node-js/index.html b/tags/Node-js/index.html new file mode 100644 index 0000000..baddf1d --- /dev/null +++ b/tags/Node-js/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: Node.js - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:蒙面阿强 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/PHP/index.html b/tags/PHP/index.html new file mode 100644 index 0000000..9b72202 --- /dev/null +++ b/tags/PHP/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: PHP - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:p5ych + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/SRC/index.html b/tags/SRC/index.html new file mode 100644 index 0000000..bb20ce6 --- /dev/null +++ b/tags/SRC/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: SRC - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:彦语 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/SSRF/index.html b/tags/SSRF/index.html new file mode 100644 index 0000000..060639d --- /dev/null +++ b/tags/SSRF/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: SSRF - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3g1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/SSTI/index.html b/tags/SSTI/index.html new file mode 100644 index 0000000..d28d0a4 --- /dev/null +++ b/tags/SSTI/index.html @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: SSTI - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3eg1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/Web\345\256\211\345\205\250/index.html" "b/tags/Web\345\256\211\345\205\250/index.html" new file mode 100644 index 0000000..62cb560 --- /dev/null +++ "b/tags/Web\345\256\211\345\205\250/index.html" @@ -0,0 +1,3989 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: Web安全 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3g1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:老梁 + + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3eg1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白色键盘 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:彦语 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白玉京 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:mjc + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Enc3l + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:cheng_xing + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:邓祺 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    +
    + +

    + 1 / 2 +

    + + + +
    + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/Web\345\256\211\345\205\250/page/2/index.html" "b/tags/Web\345\256\211\345\205\250/page/2/index.html" new file mode 100644 index 0000000..c180a4b --- /dev/null +++ "b/tags/Web\345\256\211\345\205\250/page/2/index.html" @@ -0,0 +1,3388 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: Web安全 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:p5ych + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    +
    + + + +

    + 2 / 2 +

    + +
    + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/Windows\346\217\220\346\235\203/index.html" "b/tags/Windows\346\217\220\346\235\203/index.html" new file mode 100644 index 0000000..6e72111 --- /dev/null +++ "b/tags/Windows\346\217\220\346\235\203/index.html" @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: Windows提权 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:D4wn + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..25c99bd --- /dev/null +++ b/tags/index.html @@ -0,0 +1,3214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 所有标签 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + + + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\344\272\214\350\277\233\345\210\266\345\256\211\345\205\250/index.html" "b/tags/\344\272\214\350\277\233\345\210\266\345\256\211\345\205\250/index.html" new file mode 100644 index 0000000..eb82cf7 --- /dev/null +++ "b/tags/\344\272\214\350\277\233\345\210\266\345\256\211\345\205\250/index.html" @@ -0,0 +1,3841 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 二进制安全 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Celeste_GXB + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:gxh191 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:re1wn + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:阳仔 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:zer0_1s + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\345\257\206\347\240\201\345\255\246/index.html" "b/tags/\345\257\206\347\240\201\345\255\246/index.html" new file mode 100644 index 0000000..4898c36 --- /dev/null +++ "b/tags/\345\257\206\347\240\201\345\255\246/index.html" @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 密码学 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Keyboard + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\345\267\245\345\205\267/index.html" "b/tags/\345\267\245\345\205\267/index.html" new file mode 100644 index 0000000..95f50db --- /dev/null +++ "b/tags/\345\267\245\345\205\267/index.html" @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 工具 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\346\226\207\344\273\266\344\270\212\344\274\240/index.html" "b/tags/\346\226\207\344\273\266\344\270\212\344\274\240/index.html" new file mode 100644 index 0000000..e1bd4ee --- /dev/null +++ "b/tags/\346\226\207\344\273\266\344\270\212\344\274\240/index.html" @@ -0,0 +1,3380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 文件上传 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:老梁 + + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\346\231\272\350\203\275\345\220\210\347\272\246/index.html" "b/tags/\346\231\272\350\203\275\345\220\210\347\272\246/index.html" new file mode 100644 index 0000000..f2b277d --- /dev/null +++ "b/tags/\346\231\272\350\203\275\345\220\210\347\272\246/index.html" @@ -0,0 +1,3445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 智能合约 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:LCatro + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:流竹君雅 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\347\244\276\345\214\272\345\210\206\344\272\253/index.html" "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/index.html" new file mode 100644 index 0000000..28a1a0d --- /dev/null +++ "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/index.html" @@ -0,0 +1,3989 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3g1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:蒙面阿强 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:rainki + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:风间映川 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Celeste_GXB + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:老梁 + + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:gxh191 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:LCatro + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:流竹君雅 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:re1wn + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    +
    + +

    + 1 / 4 +

    + + + +
    + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/2/index.html" "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/2/index.html" new file mode 100644 index 0000000..38524bc --- /dev/null +++ "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/2/index.html" @@ -0,0 +1,3970 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:阳仔 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:zer0_1s + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:MOUCHEN + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:i3eg1nner + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白色键盘 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:彦语 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:白玉京 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/3/index.html" "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/3/index.html" new file mode 100644 index 0000000..3889574 --- /dev/null +++ "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/3/index.html" @@ -0,0 +1,3970 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:mjc + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Keyboard + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Enc3l + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:TBK + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:F0rga1n + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:cheng_xing + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:D4wn + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:root + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/4/index.html" "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/4/index.html" new file mode 100644 index 0000000..7fbb102 --- /dev/null +++ "b/tags/\347\244\276\345\214\272\345\210\206\344\272\253/page/4/index.html" @@ -0,0 +1,3516 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 社区分享 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:antel0p3 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:邓祺 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:p5ych + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + +
    +
    + + + +

    + 4 / 4 +

    + +
    + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\347\247\221\346\231\256/index.html" "b/tags/\347\247\221\346\231\256/index.html" new file mode 100644 index 0000000..06c6605 --- /dev/null +++ "b/tags/\347\247\221\346\231\256/index.html" @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 科普 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:rainki + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\347\254\246\345\217\267\346\211\247\350\241\214/index.html" "b/tags/\347\254\246\345\217\267\346\211\247\350\241\214/index.html" new file mode 100644 index 0000000..4669746 --- /dev/null +++ "b/tags/\347\254\246\345\217\267\346\211\247\350\241\214/index.html" @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 符号执行 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:Celeste_GXB + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + diff --git "a/tags/\350\275\246\350\201\224\347\275\221\345\256\211\345\205\250/index.html" "b/tags/\350\275\246\350\201\224\347\275\221\345\256\211\345\205\250/index.html" new file mode 100644 index 0000000..b24e6e2 --- /dev/null +++ "b/tags/\350\275\246\350\201\224\347\275\221\345\256\211\345\205\250/index.html" @@ -0,0 +1,3379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tag: 车联网安全 - SecureNexusLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + +

    + +

    + +
    + + + 分享人:风间映川 + + + +
    + +
    +
    + + + + + 社区分享 + + + + +
    + + + +
    + + +
    + +
    + + + +
    + + + + + + + +
    + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + +