commit 9bbf98d0b92d0eb1ea4bd1b72b2b0677e51c0694 Author: sagrrecn <142039817+sagrrecn@users.noreply.github.com> Date: Thu Feb 19 13:13:03 2026 +0800 fresh start diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ffbf31 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.zip filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.iso filter=lfs diff=lfs merge=lfs -text diff --git a/404.php b/404.php new file mode 100644 index 0000000..698e668 --- /dev/null +++ b/404.php @@ -0,0 +1,31 @@ + + + +need("header.php"); ?> + +
+
+ need("component/menu.php"); ?> +
+
+
+
+
+
+

未找到页面

+
+
+
+ +
+

不好意思,没有找不到您想要的页面,请检查链接是否正确。

+

若网页有问题麻烦联系反馈(邮件sagrre_cn@126.com),夕格会第一时间修复。

+

您可以选择:返回首页

+
+ +
+
+
+ need("footer.php"); ?> + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/assets/dist/font/HarmonyOS-Sans.woff2 b/assets/dist/font/HarmonyOS-Sans.woff2 new file mode 100644 index 0000000..a01811e Binary files /dev/null and b/assets/dist/font/HarmonyOS-Sans.woff2 differ diff --git a/assets/dist/iconfont.css b/assets/dist/iconfont.css new file mode 100644 index 0000000..28e171d --- /dev/null +++ b/assets/dist/iconfont.css @@ -0,0 +1,379 @@ +@font-face { + font-family: "iconfont"; /* Project id 4190512 */ + src: url('iconfont.woff2?t=1702611727443') format('woff2'), + url('iconfont.woff?t=1702611727443') format('woff'), + url('iconfont.ttf?t=1702611727443') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-shang:before { + content: "\e613"; +} + +.icon-shang1:before { + content: "\e614"; +} + +.icon-menzhenshoufei:before { + content: "\e612"; +} + +.icon-huwai:before { + content: "\e688"; +} + +.icon-lvhang-:before { + content: "\e9d3"; +} + +.icon-lvhang-1:before { + content: "\e9d7"; +} + +.icon-zuozhe:before { + content: "\e65c"; +} + +.icon-lvhang:before { + content: "\e615"; +} + +.icon-shu:before { + content: "\e607"; +} + +.icon-bianji:before { + content: "\e60c"; +} + +.icon-dianshizhiboguankanshipinbofangmeiti:before { + content: "\e60d"; +} + +.icon-jiankong1:before { + content: "\e69c"; +} + +.icon-banquan2:before { + content: "\10102"; +} + +.icon-suo:before { + content: "\e652"; +} + +.icon-zhucehuiyuan:before { + content: "\e636"; +} + +.icon-denglu:before { + content: "\e653"; +} + +.icon-24gl-cartFull10:before { + content: "\e87b"; +} + +.icon-zuanshi:before { + content: "\e66f"; +} + +.icon-yejing:before { + content: "\e601"; +} + +.icon-lkingboyewanyueliang:before { + content: "\e602"; +} + +.icon-taiyang:before { + content: "\e635"; +} + +.icon-huifu:before { + content: "\e611"; +} + +.icon-theme-light:before { + content: "\e662"; +} + +.icon-yueliang:before { + content: "\e65e"; +} + +.icon-fenlei1:before { + content: "\e630"; +} + +.icon-fenlei2:before { + content: "\e616"; +} + +.icon-fenlei3:before { + content: "\e623"; +} + +.icon-chakantiezihuifu:before { + content: "\e663"; +} + +.icon-kuaisuhuifu:before { + content: "\e618"; +} + +.icon-undo:before { + content: "\ea17"; +} + +.icon-tishi_o:before { + content: "\eb85"; +} + +.icon-jiantou-you:before { + content: "\e62e"; +} + +.icon-jiantou-zuo:before { + content: "\e62f"; +} + +.icon-anniu_jiantouxiangzuo_o:before { + content: "\eb89"; +} + +.icon-anniu-jiantouxiangyou_o:before { + content: "\eb8c"; +} + +.icon-jiantou_xiangyouliangci_o:before { + content: "\eb91"; +} + +.icon-jiantou_xiangzuoliangci_o:before { + content: "\eb93"; +} + +.icon-jiantou_yemian_xiangyou_o:before { + content: "\eb94"; +} + +.icon-jiantou_yemian_xiangzuo_o:before { + content: "\eb95"; +} + +.icon-lianjie1:before { + content: "\e632"; +} + +.icon-alibabacloud:before { + content: "\ea9f"; +} + +.icon-banquan:before { + content: "\e61b"; +} + +.icon-douyin:before { + content: "\e64e"; +} + +.icon-brandlogo:before { + content: "\e8b2"; +} + +.icon-TencentTCE:before { + content: "\e656"; +} + +.icon-guanyuwo:before { + content: "\e600"; +} + +.icon-lianjie:before { + content: "\e646"; +} + +.icon-email:before { + content: "\e60b"; +} + +.icon-weibo:before { + content: "\e62d"; +} + +.icon-github:before { + content: "\e691"; +} + +.icon-gantanhaozhong:before { + content: "\e8e5"; +} + +.icon-lianjie_o:before { + content: "\eb65"; +} + +.icon-weixin:before { + content: "\e647"; +} + +.icon-mg-new:before { + content: "\e661"; +} + +.icon-xin:before { + content: "\e945"; +} + +.icon-new:before { + content: "\e61c"; +} + +.icon-newsticker:before { + content: "\ebd5"; +} + +.icon-new1:before { + content: "\e629"; +} + +.icon-zuixin:before { + content: "\e64c"; +} + +.icon-a-Frame110:before { + content: "\e6d0"; +} + +.icon-zuixin1:before { + content: "\e60a"; +} + +.icon-xin1:before { + content: "\e8da"; +} + +.icon-xin2:before { + content: "\e6bb"; +} + +.icon-pinglun:before { + content: "\e7bf"; +} + +.icon-liulan:before { + content: "\e61d"; +} + +.icon-pinglun1:before { + content: "\e610"; +} + +.icon-pinglun2:before { + content: "\e60f"; +} + +.icon-jianyi:before { + content: "\e6d3"; +} + +.icon-liulanliang:before { + content: "\e7a9"; +} + +.icon-yueduliang:before { + content: "\e6e6"; +} + +.icon-ziyuan:before { + content: "\e63d"; +} + +.icon-zhiding:before { + content: "\e660"; +} + +.icon-ziyuan1:before { + content: "\e63f"; +} + +.icon-zhiding1:before { + content: "\e687"; +} + +.icon-zhiding2:before { + content: "\e60e"; +} + +.icon-zhiding3:before { + content: "\e624"; +} + +.icon-shouji:before { + content: "\e655"; +} + +.icon-shouji1:before { + content: "\e603"; +} + +.icon-iOS:before { + content: "\e63a"; +} + +.icon-didiandingwei_o:before { + content: "\ebba"; +} + +.icon-xinlangweibo:before { + content: "\e79e"; +} + +.icon-yuedu:before { + content: "\e639"; +} + +.icon-fenlei:before { + content: "\e67c"; +} + +.icon-xiugai:before { + content: "\e8cf"; +} + +.icon-tongji:before { + content: "\e63e"; +} + +.icon-shijian_o:before { + content: "\ebb1"; +} + +.icon-fabu:before { + content: "\e812"; +} + +.icon-biaoqian-:before { + content: "\e631"; +} + +.icon-browse:before { + content: "\e666"; +} + +.icon-camera:before { + content: "\e667"; +} + +.icon-map:before { + content: "\e677"; +} + diff --git a/assets/dist/jasmine.iife.js b/assets/dist/jasmine.iife.js new file mode 100644 index 0000000..274543f --- /dev/null +++ b/assets/dist/jasmine.iife.js @@ -0,0 +1,450 @@ +var jasmine = (function (P) { + "use strict"; + + const le = ""; + const ue = ""; + + /** + * Sticky Sidebar JavaScript Plugin. + * @version 3.3.2 + * @author SHITOUCUO + * @license The MIT License (MIT) + */ + const G = (() => { + const c = ".stickySidebar"; + const m = { + topSpacing: 0, + bottomSpacing: 0, + containerSelector: !1, + innerWrapperSelector: ".inner-wrapper-sticky", + stickyClass: "is-affixed", + resizeSensor: !0, + minWidth: !1 + }; + + class l { + constructor(e, r = {}) { + if (this.options = l.extend(m, r), this.sidebar = typeof e == "string" ? document.querySelector(e) : e, typeof this.sidebar > "u") throw new Error("There is no specific sidebar element."); + this.sidebarInner = !1, this.container = this.sidebar.parentElement, this.affixedType = "STATIC", this.direction = "down", this.support = { + transform: !1, + transform3d: !1 + }, this._initialized = !1, this._reStyle = !1, this._breakpoint = !1, this._resizeListeners = [], this.dimensions = { + translateY: 0, + topSpacing: 0, + lastTopSpacing: 0, + bottomSpacing: 0, + lastBottomSpacing: 0, + sidebarHeight: 0, + sidebarWidth: 0, + containerTop: 0, + containerHeight: 0, + viewportHeight: 0, + viewportTop: 0, + lastViewportTop: 0 + }, ["handleEvent"].forEach(n => { + this[n] = this[n].bind(this) + }), this.initialize() + } + + initialize() { + if (this._setSupportFeatures(), this.options.innerWrapperSelector && (this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector), this.sidebarInner === null && (this.sidebarInner = !1)), !this.sidebarInner) { + let e = document.createElement("div"); + for (e.setAttribute("class", "inner-wrapper-sticky"), this.sidebar.appendChild(e); this.sidebar.firstChild != e;) e.appendChild(this.sidebar.firstChild); + this.sidebarInner = this.sidebar.querySelector(".inner-wrapper-sticky") + } + if (this.options.containerSelector) { + let e = document.querySelectorAll(this.options.containerSelector); + if (e = Array.prototype.slice.call(e), e.forEach((r, n) => { + r.contains(this.sidebar) && (this.container = r) + }), !e.length) throw new Error("The container does not contains on the sidebar.") + } + typeof this.options.topSpacing != "function" && (this.options.topSpacing = parseInt(this.options.topSpacing) || 0), typeof this.options.bottomSpacing != "function" && (this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0), this._widthBreakpoint(), this.calcDimensions(), this.stickyPosition(), this.bindEvents(), this._initialized = !0 + } + + bindEvents() { + window.addEventListener("resize", this, { + passive: !0, + capture: !1 + }), window.addEventListener("scroll", this, { + passive: !0, + capture: !1 + }), this.sidebar.addEventListener("update" + c, this) + } + + handleEvent(e) { + this.updateSticky(e) + } + + calcDimensions() { + if (!this._breakpoint) { + var e = this.dimensions; + e.containerTop = l.offsetRelative(this.container).top, e.containerHeight = this.container.clientHeight, e.containerBottom = e.containerTop + e.containerHeight, e.sidebarHeight = this.sidebarInner.offsetHeight, e.sidebarWidth = this.sidebar.offsetWidth, e.viewportHeight = window.innerHeight, this._calcDimensionsWithScroll() + } + } + + _calcDimensionsWithScroll() { + var e = this.dimensions; + e.sidebarLeft = l.offsetRelative(this.sidebar).left, e.viewportTop = document.documentElement.scrollTop || document.body.scrollTop, e.viewportBottom = e.viewportTop + e.viewportHeight, e.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft, e.topSpacing = this.options.topSpacing, e.bottomSpacing = this.options.bottomSpacing, typeof e.topSpacing == "function" && (e.topSpacing = parseInt(e.topSpacing(this.sidebar)) || 0), typeof e.bottomSpacing == "function" && (e.bottomSpacing = parseInt(e.bottomSpacing(this.sidebar)) || 0), this.affixedType === "VIEWPORT-TOP" ? e.topSpacing < e.lastTopSpacing && (e.translateY += e.lastTopSpacing - e.topSpacing, this._reStyle = !0) : this.affixedType === "VIEWPORT-BOTTOM" && e.bottomSpacing < e.lastBottomSpacing && (e.translateY += e.lastBottomSpacing - e.bottomSpacing, this._reStyle = !0), e.lastTopSpacing = e.topSpacing, e.lastBottomSpacing = e.bottomSpacing + } + + isSidebarFitsViewport() { + return this.dimensions.sidebarHeight < this.dimensions.viewportHeight + } + + observeScrollDir() { + var e = this.dimensions; + if (e.lastViewportTop !== e.viewportTop) { + var r = this.direction === "down" ? Math.min : Math.max; + e.viewportTop === r(e.viewportTop, e.lastViewportTop) && (this.direction = this.direction === "down" ? "up" : "down") + } + } + + getAffixType() { + var e = this.dimensions, + r = !1; + this._calcDimensionsWithScroll(); + var n = e.sidebarHeight + e.containerTop, + t = e.viewportTop + e.topSpacing, + s = e.viewportBottom - e.bottomSpacing; + return this.direction === "up" ? t <= e.containerTop ? (e.translateY = 0, r = "STATIC") : t <= e.translateY + e.containerTop ? (e.translateY = t - e.containerTop, r = "VIEWPORT-TOP") : !this.isSidebarFitsViewport() && e.containerTop <= t && (r = "VIEWPORT-UNBOTTOM") : this.isSidebarFitsViewport() ? e.sidebarHeight + t >= e.containerBottom ? (e.translateY = e.containerBottom - n, r = "CONTAINER-BOTTOM") : t >= e.containerTop && (e.translateY = t - e.containerTop, r = "VIEWPORT-TOP") : e.containerBottom <= s ? (e.translateY = e.containerBottom - n, r = "CONTAINER-BOTTOM") : n + e.translateY <= s ? (e.translateY = s - n, r = "VIEWPORT-BOTTOM") : e.containerTop + e.translateY <= t && (r = "VIEWPORT-UNBOTTOM"), e.translateY = Math.max(0, e.translateY), e.translateY = Math.min(e.containerHeight, e.translateY), e.lastViewportTop = e.viewportTop, r + } + + _getStyle(e) { + if (!(typeof e > "u")) { + var r = { + inner: {}, + outer: {} + }, + n = this.dimensions; + switch (e) { + case "VIEWPORT-TOP": + r.inner = { + position: "fixed", + top: n.topSpacing, + left: n.sidebarLeft - n.viewportLeft, + width: n.sidebarWidth + }; + break; + case "VIEWPORT-BOTTOM": + r.inner = { + position: "fixed", + top: "auto", + left: n.sidebarLeft, + bottom: n.bottomSpacing, + width: n.sidebarWidth + }; + break; + case "CONTAINER-BOTTOM": + case "VIEWPORT-UNBOTTOM": + let t = this._getTranslate(0, n.translateY + "px"); + t ? r.inner = { + transform: t + } : r.inner = { + position: "absolute", + top: n.translateY, + width: n.sidebarWidth + }; + break + } + switch (e) { + case "VIEWPORT-TOP": + case "VIEWPORT-BOTTOM": + case "VIEWPORT-UNBOTTOM": + case "CONTAINER-BOTTOM": + r.outer = { + height: n.sidebarHeight, + position: "relative" + }; + break + } + return r.outer = l.extend({ + height: "", + position: "" + }, r.outer), r.inner = l.extend({ + position: "relative", + top: "", + left: "", + bottom: "", + width: "", + transform: this._getTranslate() + }, r.inner), r + } + } + + stickyPosition(e) { + if (!this._breakpoint) { + e = this._reStyle || e || !1, this.options.topSpacing, this.options.bottomSpacing; + var r = this.getAffixType(), + n = this._getStyle(r); + if ((this.affixedType != r || e) && r) { + let t = "affix." + r.toLowerCase().replace("viewport-", "") + c; + l.eventTrigger(this.sidebar, t), r === "STATIC" ? l.removeClass(this.sidebar, this.options.stickyClass) : l.addClass(this.sidebar, this.options.stickyClass); + for (let d in n.outer) n.outer[d], this.sidebar.style[d] = n.outer[d]; + for (let d in n.inner) { + let g = typeof n.inner[d] == "number" ? "px" : ""; + this.sidebarInner.style[d] = n.inner[d] + g + } + let s = "affixed." + r.toLowerCase().replace("viewport-", "") + c; + l.eventTrigger(this.sidebar, s) + } else this._initialized && (this.sidebarInner.style.left = n.inner.left); + this.affixedType = r + } + } + + _widthBreakpoint() { + window.innerWidth <= this.options.minWidth ? (this._breakpoint = !0, this.affixedType = "STATIC", this.sidebar.removeAttribute("style"), l.removeClass(this.sidebar, this.options.stickyClass), this.sidebarInner.removeAttribute("style")) : this._breakpoint = !1 + } + + updateSticky(e = {}) { + this._running || (this._running = !0, (r => { + requestAnimationFrame(() => { + switch (r) { + case "scroll": + this._calcDimensionsWithScroll(), this.observeScrollDir(), this.stickyPosition(); + break; + case "resize": + default: + this._widthBreakpoint(), this.calcDimensions(), this.stickyPosition(!0); + break + } + this._running = !1 + }) + })(e.type)) + } + + _setSupportFeatures() { + var e = this.support; + e.transform = l.supportTransform(), e.transform3d = l.supportTransform(!0) + } + + _getTranslate(e = 0, r = 0, n = 0) { + return this.support.transform3d ? "translate3d(" + e + ", " + r + ", " + n + ")" : this.support.translate ? "translate(" + e + ", " + r + ")" : !1 + } + + destroy() { + window.removeEventListener("resize", this, { + caption: !1 + }), window.removeEventListener("scroll", this, { + caption: !1 + }), this.sidebar.classList.remove(this.options.stickyClass), this.sidebar.style.minHeight = "", this.sidebar.removeEventListener("update" + c, this); + var e = { + inner: {}, + outer: {} + }; + e.inner = { + position: "", + top: "", + left: "", + bottom: "", + width: "", + transform: "" + }, e.outer = { + height: "", + position: "" + }; + for (let r in e.outer) this.sidebar.style[r] = e.outer[r]; + for (let r in e.inner) this.sidebarInner.style[r] = e.inner[r]; + } + + static supportTransform(e) { + var r = !1, + n = e ? "perspective" : "transform", + t = n.charAt(0).toUpperCase() + n.slice(1), + s = ["Webkit", "Moz", "O", "ms"], + d = document.createElement("support"), + g = d.style; + return (n + " " + s.join(t + " ") + t).split(" ").forEach(function (E, y) { + if (g[E] !== void 0) return r = E, !1 + }), r + } + + static eventTrigger(e, r, n) { + try { + var t = new CustomEvent(r, { + detail: n + }) + } catch { + var t = document.createEvent("CustomEvent"); + t.initCustomEvent(r, !0, !0, n) + } + e.dispatchEvent(t) + } + + static extend(e, r) { + var n = {}; + for (let t in e) typeof r[t] < "u" ? n[t] = r[t] : n[t] = e[t]; + return n + } + + static offsetRelative(e) { + var r = { + left: 0, + top: 0 + }; + do { + let n = e.offsetTop, + t = e.offsetLeft; + isNaN(n) || (r.top += n), isNaN(t) || (r.left += t), e = e.tagName === "BODY" ? e.parentElement : e.offsetParent + } while (e); + return r + } + + static addClass(e, r) { + l.hasClass(e, r) || (e.classList ? e.classList.add(r) : e.className += " " + r) + } + + static removeClass(e, r) { + l.hasClass(e, r) && (e.classList ? e.classList.remove(r) : e.className = e.className.replace(new RegExp("(^|\\b)" + r.split(" ").join("|") + "(\\b|$)", "gi"), " ")) + } + + static hasClass(e, r) { + return e.classList ? e.classList.contains(r) : new RegExp("(^| )" + r + "( |$)", "gi").test(e.className) + } + } + return l + })(); + + window.StickySidebar = G; + + /** + * 主题管理功能 - 修改为默认深色模式 + */ + function switchDark() { + // 切换主题并保存到localStorage + if (!localStorage.theme) { + // 首次设置,设为深色模式 + localStorage.theme = "dark"; + } else if (localStorage.theme === "light") { + localStorage.theme = "dark"; + } else if (localStorage.theme === "dark") { + localStorage.theme = "light"; + } + loadTheme(); + updateThemeIcon(); + } + + function loadTheme() { + // 移除系统主题变化监听器,不再自动跟随系统主题 + + // 应用当前主题 + if (!localStorage.theme) { + // 首次访问:默认设为深色模式 + localStorage.theme = "dark"; + document.documentElement.classList.add("dark"); + } else if (localStorage.theme === "dark") { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + + updateThemeIcon(); + } + + // 获取当前主题状态 + function getCurrentTheme() { + if (!localStorage.theme) { + // 首次访问:默认返回深色模式 + return "dark"; + } + return localStorage.theme; + } + + // 更新主题图标 + function updateThemeIcon() { + const currentTheme = getCurrentTheme(); + const iconElement = document.querySelector('[title="日夜模式"] iconify-icon'); + + if (iconElement) { + // 根据当前主题更新图标 + if (currentTheme === "dark") { + iconElement.setAttribute('icon', 'tabler:sun'); // 深色模式显示太阳图标(切换后变为浅色) + } else { + iconElement.setAttribute('icon', 'tabler:moon'); // 浅色模式显示月亮图标(切换后变为深色) + } + } + } + + /** + * 其他工具函数 + */ + function backtop() { + document.body.scrollTop = 0; + document.documentElement.scrollTop = 0; + } + + function clickSearch() { + const searchInput = document.getElementById("search-input"); + if (searchInput) { + searchInput.blur(); + } + } + + function toggleMobileMenu() { + const mobileMenusBg = document.querySelector("#mobile-menus-bg"); + const mobileMenus = document.querySelector("#mobile-menus"); + + if (mobileMenus.classList.contains("!translate-x-0")) { + if (mobileMenusBg) mobileMenusBg.classList.add("hidden"); + if (mobileMenus) mobileMenus.classList.remove("!translate-x-0"); + } else { + if (mobileMenusBg) mobileMenusBg.classList.remove("hidden"); + if (mobileMenus) mobileMenus.classList.add("!translate-x-0"); + } + } + + /** + * 初始化函数 + */ + function initializeJasmine() { + // 初始化主题 - 默认深色模式 + loadTheme(); + + // 初始化粘性侧边栏 + if (document.querySelector("#sidebar-right")) { + new G("#sidebar-right", { + innerWrapperSelector: ".sidebar__right__inner" + }); + } + + // 初始化导航项悬停效果 + Array.from(document.getElementsByClassName("nav-li")).forEach(item => { + item.addEventListener("mouseover", () => { + const span = item.getElementsByTagName("span")[0]; + if (span) span.classList.add("!block"); + }); + item.addEventListener("mouseout", () => { + const span = item.getElementsByTagName("span")[0]; + if (span) span.classList.remove("!block"); + }); + }); + + // 初始化移动菜单背景点击事件 + const mobileMenusBg = document.querySelector("#mobile-menus-bg"); + if (mobileMenusBg) { + mobileMenusBg.addEventListener("click", toggleMobileMenu); + } + + // 初始化主题图标 + updateThemeIcon(); + + console.log("%c Jasmine ", "background:#000;color:#fff", "https://www.shitoucuo.com"); + } + + // 页面加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initializeJasmine); + } else { + initializeJasmine(); + } + + // 导出函数到全局对象 + return { + backtop: backtop, + clickSearch: clickSearch, + loadTheme: loadTheme, + switchDark: switchDark, + toggleMobileMenu: toggleMobileMenu, + getCurrentTheme: getCurrentTheme, + updateThemeIcon: updateThemeIcon + }; +})({}); \ No newline at end of file diff --git a/assets/dist/style.css b/assets/dist/style.css new file mode 100644 index 0000000..90dde82 --- /dev/null +++ b/assets/dist/style.css @@ -0,0 +1,4169 @@ +@charset "UTF-8"; + *,:before,:after { + box-sizing:border-box; + border-width:0; + border-style:solid; + border-color:#faf8f1; +} +:before,:after { + --tw-content:"" +} +html { + line-height:1.5; + -webkit-text-size-adjust:100%; + -moz-tab-size:4; + -o-tab-size:4; + tab-size:4; + font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"; + font-feature-settings:normal; + font-variation-settings:normal +} +body { + margin:0; + line-height:inherit; +} + +hr { + height:0; + color:inherit; + border-top-width:1px +} +abbr:where([title]) { + -webkit-text-decoration:underline dotted; + text-decoration:underline dotted +} +h1,h2,h3,h4,h5,h6 { + font-size:inherit; + font-weight:inherit +} +a { + color:inherit; + text-decoration:inherit +} +b,strong { + font-weight:bolder +} +code,kbd,samp,pre { + font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace; + font-size:1em +} +small { + font-size:80% +} +sub,sup { + font-size:75%; + line-height:0; + position:relative; + vertical-align:baseline +} +sub { + bottom:-.25em +} +sup { + top:-.5em +} +table { + text-indent:0; + border-color:inherit; + border-collapse:collapse +} +button,input,optgroup,select,textarea { + font-family:inherit; + font-size:100%; + font-weight:inherit; + line-height:inherit; + color:inherit; + margin:0; + padding:0 +} +button,select { + text-transform:none +} +button,[type=button],[type=reset],[type=submit] { + -webkit-appearance:button; + background-color:transparent; + background-image:none +} +:-moz-focusring { + outline:auto +} +:-moz-ui-invalid { + box-shadow:none +} +progress { + vertical-align:baseline +} +::-webkit-inner-spin-button,::-webkit-outer-spin-button { + height:auto +} +[type=search] { + -webkit-appearance:textfield; + outline-offset:-2px +} +::-webkit-search-decoration { + -webkit-appearance:none +} +::-webkit-file-upload-button { + -webkit-appearance:button; + font:inherit +} +summary { + display:list-item +} +blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre { + margin:0 +} +fieldset { + margin:0; + padding:0 +} +legend { + padding:0 +} +ol,ul,menu { + list-style:none; + margin:0; + padding:0 +} +textarea { + resize:vertical +} + +.dark input::-moz-placeholder,textarea::-moz-placeholder { + opacity:1; + color:#dc2626; +} +.dark input::placeholder,textarea::placeholder { + opacity:1; + color:#dc2626; +} + + +input::-moz-placeholder,textarea::-moz-placeholder { + opacity:1; + color:#dc2626!important; +} +input::placeholder,textarea::placeholder { + opacity:1; + color:#dc2626 !important; +} +button,[role=button] { + cursor:pointer +} +:disabled { + cursor:default +} +img,svg,video,canvas,audio,iframe,embed,object { + display:block; + vertical-align:middle +} +img,video { + max-width:100%; + height:auto +} +[hidden] { + display:none +} +@font-face { + font-display:swap; + font-family:HarmonyOS-Sans; + src:url(./font/HarmonyOS-Sans.woff2) format("truetype") +} +html { + -webkit-tap-highlight-color:transparent +} +*,:before,:after { + --tw-border-spacing-x:0; + --tw-border-spacing-y:0; + --tw-translate-x:0; + --tw-translate-y:0; + --tw-rotate:0; + --tw-skew-x:0; + --tw-skew-y:0; + --tw-scale-x:1; + --tw-scale-y:1; + --tw-pan-x:; + --tw-pan-y:; + --tw-pinch-zoom:; + --tw-scroll-snap-strictness:proximity; + --tw-gradient-from-position:; + --tw-gradient-via-position:; + --tw-gradient-to-position:; + --tw-ordinal:; + --tw-slashed-zero:; + --tw-numeric-figure:; + --tw-numeric-spacing:; + --tw-numeric-fraction:; + --tw-ring-inset:; + --tw-ring-offset-width:0px; + --tw-ring-offset-color:#faf8f1; + --tw-ring-color:rgb(59 130 246 / .5); + --tw-ring-offset-shadow:0 0 #333; + --tw-ring-shadow:0 0 #333; + --tw-shadow:0 0 #333; + --tw-shadow-colored:0 0 #333; + --tw-blur:; + --tw-brightness:; + --tw-contrast:; + --tw-grayscale:; + --tw-hue-rotate:; + --tw-invert:; + --tw-saturate:; + --tw-sepia:; + --tw-drop-shadow:; + --tw-backdrop-blur:; + --tw-backdrop-brightness:; + --tw-backdrop-contrast:; + --tw-backdrop-grayscale:; + --tw-backdrop-hue-rotate:; + --tw-backdrop-invert:; + --tw-backdrop-opacity:; + --tw-backdrop-saturate:; + --tw-backdrop-sepia: +} +::backdrop { + --tw-border-spacing-x:0; + --tw-border-spacing-y:0; + --tw-translate-x:0; + --tw-translate-y:0; + --tw-rotate:0; + --tw-skew-x:0; + --tw-skew-y:0; + --tw-scale-x:1; + --tw-scale-y:1; + --tw-pan-x:; + --tw-pan-y:; + --tw-pinch-zoom:; + --tw-scroll-snap-strictness:proximity; + --tw-gradient-from-position:; + --tw-gradient-via-position:; + --tw-gradient-to-position:; + --tw-ordinal:; + --tw-slashed-zero:; + --tw-numeric-figure:; + --tw-numeric-spacing:; + --tw-numeric-fraction:; + --tw-ring-inset:; + --tw-ring-offset-width:0px; + --tw-ring-offset-color:#faf8f1; + --tw-ring-color:rgb(59 130 246 / .5); + --tw-ring-offset-shadow:0 0 #333; + --tw-ring-shadow:0 0 #333; + --tw-shadow:0 0 #333; + --tw-shadow-colored:0 0 #333; + --tw-blur:; + --tw-brightness:; + --tw-contrast:; + --tw-grayscale:; + --tw-hue-rotate:; + --tw-invert:; + --tw-saturate:; + --tw-sepia:; + --tw-drop-shadow:; + --tw-backdrop-blur:; + --tw-backdrop-brightness:; + --tw-backdrop-contrast:; + --tw-backdrop-grayscale:; + --tw-backdrop-hue-rotate:; + --tw-backdrop-invert:; + --tw-backdrop-opacity:; + --tw-backdrop-saturate:; + --tw-backdrop-sepia: +} +.container { + width:100% +} +@media (min-width:640px) { + .container { + max-width:640px +} +}@media (min-width:768px) { + .container { + max-width:768px +} +}@media (min-width:1024px) { + .container { + max-width:1024px +} +}@media (min-width:1280px) { + .container { + max-width:1280px +} +}@media (min-width:1536px) { + .container { + max-width:1536px +} +} +.jasmine-body { + font-family:HarmonyOS-Sans,sans-serif; + margin:.5rem; + --tw-bg-opacity:1; + background-color:#eee; + --tw-text-opacity:1; + color:rgb(115 115 115 / var(--tw-text-opacity)); +} +:is(.dark .jasmine-body) { + --tw-bg-opacity:1; +background-color:rgb(10 12 25 / var(--tw-bg-opacity)); + --tw-text-opacity:1; + color:rgb(156 163 175 / var(--tw-text-opacity)) +} +@media (min-width:768px) { + .jasmine-body {max-width:800px} + } + +@media (min-width:1024px) { + .jasmine-body { + margin-left:auto; + margin-right:auto; + margin-top:2rem; + margin-bottom:2rem; +} +} + +.py-13 { + padding-bottom: 0rem !important; + padding-top: 1rem !important; +}/* 2023.7.28 新增css开始*/ +.wz { + padding:1.25rem; + background-color:#eee; + border: 1px solid rgba(0, 0, 0, 0); +} +:is(.dark .wz) { + background-color:rgb(13 17 23 / var(--tw-bg-opacity)) !important; + !important; + padding:1.25rem; +} + +.dark .shuoshuo-link-color a { + color:#faf8f1!important;} + +:is(.dark .shuoshuo-link-color a) { + color:rgb(156 163 175 / var(--tw-text-opacity)) ;} + +.jasmine-container { + border-radius:20px; + overflow: hidden; + --tw-bg-opacity:1; + box-shadow: 0 0 0px #dc2626; + border: 1px solid #dc2626; + background-color:#faf8f1; + border-bottom:1px solid #dc2626; + border-top:1px solid #dc2626; +} +:is(.dark .jasmine-container) { + background-color:#1d1d1e; + + box-shadow: 0 0 0 #dc2626; +} +.jasmine-primary-color { + --tw-text-opacity:1; + color:rgb(3 3 3 / var(--tw-text-opacity)) +} +:is(.dark .jasmine-primary-color) { + --tw-text-opacity:1; + color:rgb(156 163 175 / var(--tw-text-opacity)) !important; +} +.jasmine-primary-bg { + background-color:var(--primary-bg) +} +:is(.dark .jasmine-primary-bg) { + --tw-bg-opacity:1;javascript:; + background-color:rgb(0 0 0 / var(--tw-bg-opacity)) +} +.jasmine-primary-bg-hover:hover { + background-color:var(--primary-bg) +} +:is(.dark .jasmine-primary-bg-hover:hover:hover) { + --tw-bg-opacity:1; + background-color:rgb(0 0 0 / var(--tw-bg-opacity)) +} +.jasmine-link-color { + color:var(--link-color) +} +:is(.dark .jasmine-link-color) { + --tw-text-opacity:1; + color:#fff; +} +.jasmine-link-color-hover:hover { + color:var(--link-hover-color) +} +:is(.dark .jasmine-link-color-hover:hover) { + --tw-text-opacity:1; + color:rgb(229 229 229 / var(--tw-text-opacity)) +} +.fixed { + position:fixed +} +.absolute { + position:absolute +} +.relative { + position:relative +} +.sticky { + position:sticky +} +.left-0 { + left:0px +} +.left-\[53px\] { + left:53px +} +.left-\[60px\] { + left:60px +} +.left-\[90px\] { + left:90px +} +.top-0 { + top:0px +} +.top-16 { + top:4rem +} +.top-\[5px\] { + top:5px +} +.z-50 { + z-index:50 +} +.z-\[1000\] { + z-index:1000 +} +.z-\[999\] { + z-index:999 +} +.col-span-1 { + grid-column:span 1 / span 1 +} +.col-span-12 { + grid-column:span 12 / span 12 +} +.col-span-3 { + grid-column:span 3 / span 3 +} +.float-left { + float:left +} +.mx-1 { + margin-top:25PX; + margin-left:0rem; + margin-right:0rem +} +.my-2 { + margin-top:.5rem; + margin-bottom:.5rem +} +.me-1 { + -webkit-margin-end:.25rem; + margin-inline-end:.25rem +} +.ml-2 { + margin-left:.5rem +} +.mr-1 { + margin-right:.25rem +} +.mr-3 { + margin-right:.75rem +} +/*右侧边栏top边距调整2023.7.25,html标签多加了1*/ +.mt1-4 { + margin-top:1rem +} +.line-clamp-1 { + overflow:hidden; + display:-webkit-box; + -webkit-box-orient:vertical; + -webkit-line-clamp:1 +} +.line-clamp-2 { + overflow:hidden; + display:-webkit-box; + -webkit-box-orient:vertical; + -webkit-line-clamp:2/* 摘要字数*/ +} +.\!block { + display:block!important +} +.block { + display:block +} +.flex { + display:flex +} +.table { + display:table +} +.grid { + display:grid +} +.contents { + display:contents +} +.hidden { + display:none +} +.h-14 { + height:3.5rem +} +.h1-14 { + height:3.9rem +} +.h-\[130px\] { + height:130px +} +.h-\[260px\] { + height:260px +} +.h-\[42px\] { + height:42px +} +.h-\[50px\] { + height:50px +} +.h-\[90px\] { + height:90px +} +.min-h-fit { + min-height:-moz-fit-content; + min-height:fit-content +} +.min-h-screen { + min-height:100vh +} +.w-0 { + width:0px +} +.w-1\/2 { + width:50% +} +.w1-14 { + width:3.5rem +} +.w1-14 { + width:3.9rem +} +.w-4\/5 { + width:80% +} +.w-\[130px\] { + width:130px +} +.w-\[170px\] { + width:170px +} +.w-\[42px\] { + width:42px +} +.w-\[50px\] { + width:50px +} +.w-full { + width:100% +} +.w-max { + width:-moz-max-content; + width:max-content +} +.min-w-fit { + min-width:-moz-fit-content; + min-width:fit-content +} +.flex-1 { + flex:1 1 0% +} +.grow { + flex-grow:1 +} +.basis-full { + flex-basis:100% +} +.\!translate-x-0 { + --tw-translate-x:0px !important; + transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important +} +.translate-x-\[-1000px\] { + --tw-translate-x:-1000px; + transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) +} +.grid-cols-1 { + grid-template-columns:repeat(1,minmax(0,1fr)) +} +.grid-cols-12 { + grid-template-columns:repeat(12,minmax(0,1fr)) +} +.grid-cols-3 { + grid-template-columns:repeat(3,minmax(0,1fr)) +} +.flex-row { + flex-direction:row +} +.flex-col { + flex-direction:column +} +.flex-wrap { + flex-wrap:wrap +} +.content-center { + align-content:center +} +.items-center { + align-items:center +} +.justify-start { + justify-content:flex-start +} +.justify-center { + justify-content:center +} +.justify-between { + justify-content:space-between +} +.gap-4 { + gap:1rem +} +.gap-x-1 { + -moz-column-gap:.25rem; + column-gap:.25rem +} +.gap-x-2 { + -moz-column-gap:.5rem; + column-gap:.5rem +} +.gap-x-3 { + -moz-column-gap:.75rem; + column-gap:.75rem +} +.gap-x-5 { + -moz-column-gap:1.25rem; + column-gap:1.25rem +} +.gap-x-8 { + -moz-column-gap:1.6rem; + column-gap:1.6rem +} +.gap-y-12 { + row-gap:1rem +} +.gap-y-14 { + row-gap:3.5rem +} +.gap-y-2 { + row-gap:.5rem +} +.gap-y-3 { + row-gap:.45rem +} +.gap-y-4 { + row-gap:1rem +} +.gap-y-5 { + row-gap:1.25rem +} +.gap-y-6 { + row-gap:1.25rem +} +.gap-y-8 { + row-gap:2rem +} +.overflow-hidden { + overflow:hidden +} +.whitespace-nowrap { + white-space:nowrap +} +.break-words { + overflow-wrap:break-word +} +.break-all { + word-break:break-all +} +.rounded { + border-radius:1rem +} +.rounded-full { + border-radius:9999px +} +.rounded-lg { + border-radius:10000px; +} +.border { + border-width:1px +} +.border-x-2 { + +} +.border-b { + border-bottom-width:1px +} +.border-b-2 { + border-bottom-width:1px; + border-style:dashed; +} +.border-\[\#ced4da\] { + --tw-border-opacity:1; + border-color:#dc2626; +} +.border-stone-100 { + --tw-border-opacity:1; + border-color:#dc2626; +} +.\!bg-stone-100 { + --tw-bg-opacity:1 !important; + background-color:#faf8f1; +} +.bg-\[\#faf8f1fffe6\] { + background-color:#faf8f1; +} +.bg-black { + --tw-bg-opacity:1; + background-color:#dc2626; +} +.bg-gray-500\/50 { + background-color:#6b728080 +} +.bg-stone-100 { + --tw-bg-opacity:1; + background-color:rgb(245 245 244 / var(--tw-bg-opacity)) +} +.bg-stone-200 { + --tw-bg-opacity:1; + background-color:rgb(231 229 228 / var(--tw-bg-opacity)) +} +.bg-transparent { + background-color:transparent +} +.bg-white { + --tw-bg-opacity:1; + background-color:#faf8f1 +} +.object-cover { + -o-object-fit:cover; + object-fit:cover; + margin-bottom:1.125rem; +} +.p-4 { + padding:1rem +} +.p-5 { + padding:1.25rem +} +.px-1 { + padding-left:.25rem; + padding-right:.25rem +} +.px-2 { + padding-left:.5rem; + padding-right:.5rem +} +.px-3 { + padding-left:.25rem; + padding-right:.25rem +} +.px-4 { + padding-left:1rem; + padding-right:1rem +} +.px-5 { + padding-left:1.25rem; + padding-right:1.25rem +} +.px-\[0\.65em\] { + padding-left:.65em; + padding-right:.65em +} +.py-1 { + padding-top:.25rem; + padding-bottom:.25rem +} +.py-10 { + padding-top:2.5rem; + padding-bottom:2.5rem +} +.py-2 { + padding-top:.5rem; + padding-bottom:.5rem +} +.py-3 { + padding-top:.75rem; + padding-bottom:.75rem +} +.py-7 { + padding-top:1.75rem; + padding-bottom:1.75rem +} +.py-\[0\.35em\] { + padding-top:.35em; + padding-bottom:.35em +} +.pb-10 { + padding-bottom:2rem +} +.pb-12 { + padding-bottom:2rem +} + +.pb-12:last-child{padding-bottom:1rem;} +.pr-1 { + padding-right:.25rem +} +.pt-14 { + padding-top:3.5rem +} +.pt-2 { + padding-top:.5rem +} +.text-2xl { + font-size:1.5rem; + line-height:2rem +} + +.text-3xl { + font-size:1.275rem; + line-height:1.65rem +} +.text-\[0\.75em\] { + font-size:.75em +} +.text-lg { + font-size:1.125rem; + line-height:1.75rem +} +.text-sm { + font-size:16px; + line-height:1.25rem +} +.text-xl { + font-size:1.25rem; + line-height:1.75rem +} +.font-medium { + font-weight:600 +} +.font-semibold { + font-weight:600 +} +.\!text-neutral-900 { + --tw-text-opacity:1 !important; + color:rgb(23 23 23 / var(--tw-text-opacity))!important +} +.\!text-white { + --tw-text-opacity:1 !important; + color:rgb(255 255 255 / var(--tw-text-opacity))!important +} +.text-black { + --tw-text-opacity:1; + color:rgb(0 0 0 / var(--tw-text-opacity)) +} +.text-gray-800 { + --tw-text-opacity:1; + color:rgb(31 41 55 / var(--tw-text-opacity)) +} +.text-neutral-500 { + --tw-text-opacity:1; + color:rgb(115 115 115 / var(--tw-text-opacity)) +} +.text-orange-400 { + --tw-text-opacity:1; + color:rgb(251 146 60 / var(--tw-text-opacity)) +} +.text-white { + --tw-text-opacity:1; + color:rgb(255 255 255 / var(--tw-text-opacity)) +} +.shadow { + --tw-shadow:0 1px 3px 0 rgb(0 0 0 / .1),0 1px 2px -1px rgb(0 0 0 / .1); + --tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color); + box-shadow:var(--tw-ring-offset-shadow,0 0 #333),var(--tw-ring-shadow,0 0 #333),var(--tw-shadow) +} +.shadow-lg { + --tw-shadow:0 10px 15px -3px rgb(0 0 0 / .1),0 4px 6px -4px rgb(0 0 0 / .1); + --tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color); + box-shadow:var(--tw-ring-offset-shadow,0 0 #333),var(--tw-ring-shadow,0 0 #333),var(--tw-shadow) +} +.blur { + --tw-blur:blur(8px); + filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) +} +.filter { + filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) +} +.backdrop-blur { + --tw-backdrop-blur:blur(8px); + -webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia) +} +.duration-300 { + transition-duration:.3s +} +.min-h-screen-jasmine { + min-height:calc(100vh - 5rem) +} +.jasmine-letter-spacing { + letter-spacing:.03em +} +.hover\:border-stone-300:hover { + --tw-border-opacity:1; + border-color:rgb(214 211 209 / var(--tw-border-opacity)) +} +.hover\:text-white:hover { + --tw-text-opacity:1; + color:#faf8f1; + background-color: #dc2626; +} +.hover\:shadow-lg:hover { + --tw-shadow:0 10px 15px -3px rgb(0 0 0 / .1),0 4px 6px -4px rgb(0 0 0 / .1); + --tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color); + box-shadow:var(--tw-ring-offset-shadow,0 0 #333),var(--tw-ring-shadow,0 0 #333),var(--tw-shadow) +} +.focus\:w-32:focus { + width:8rem +} +:is(.dark .dark\:border-black) { + --tw-border-opacity:1; + border-color:rgb(0 0 0 / var(--tw-border-opacity)) +} +:is(.dark .dark\:border-neutral-600) { + --tw-border-opacity:1; + border-width: 0px; + border-color:#dc2626; +} +:is(.dark .dark\:\!bg-\[\#0d1117\]) { + --tw-bg-opacity:1 !important; + background-color:#1d1d1e!important +} +:is(.dark .dark\:\!bg-\[\#1d1d1e\]) { + --tw-bg-opacity:1 !important; + background-color:rgb(22 24 41 / var(--tw-bg-opacity))!important +} +:is(.dark .dark\:bg-\[\#0a0c19\]\/50) { + background-color:#0a0c1980 +} +:is(.dark .dark\:bg-\[\#1d1d1e\]) { + --tw-bg-opacity:1; + background-color:rgb(22 24 41 / var(--tw-bg-opacity)) +} +:is(.dark .dark\:bg-\[rgba\(22\,24\,41\,0\.9\)\]) { + background-color:#1d1d1e; +} +:is(.dark .dark\:bg-black) { + --tw-bg-opacity:1; + background-color:rgb(0 0 0 / var(--tw-bg-opacity)) +} +:is(.dark .dark\:bg-gray-700) { + --tw-bg-opacity:1; + background-color:rgb(55 65 81 / var(--tw-bg-opacity)) +} +:is(.dark .dark\:\!text-gray-400) { + --tw-text-opacity:1 !important; + color:rgb(156 163 175 / var(--tw-text-opacity))!important +} +:is(.dark .dark\:\!text-neutral-200) { + --tw-text-opacity:1 !important; + color:rgb(156 163 175 / var(--tw-text-opacity))!important; +} +:is(.dark:is(.dark .dark\:dark\:text-gray-400)) { + --tw-text-opacity:1; + color:rgb(156 163 175 / var(--tw-text-opacity)); +} +:is(.dark:is(.dark .dark\:dark\:text-gray-500)) { + --tw-text-opacity:1; + color:rgb(107 114 128 / var(--tw-text-opacity)) +} +:is(.dark .dark\:text-gray-300) { + --tw-text-opacity:1; + color:rgb(209 213 219 / var(--tw-text-opacity)) +} +:is(.dark .dark\:text-gray-400) { + --tw-text-opacity:1; + color:rgb(156 163 175 / var(--tw-text-opacity)) +} +:is(.dark .dark\:text-neutral-200) { + --tw-text-opacity:1; + color:rgb(156 163 175 / var(--tw-text-opacity)) +} +:is(.dark .dark\:text-neutral-300) { + --tw-text-opacity:1; + color:rgb(212 212 212 / var(--tw-text-opacity)) +} +:is(.dark .dark\:text-neutral-400) { + --tw-text-opacity:1; + color:rgb(163 163 163 / var(--tw-text-opacity)) +} +:is(.dark .dark\:text-white) { + --tw-text-opacity:1; + color:rgb(255 255 255 / var(--tw-text-opacity)) +} +@media (min-width:640px) { + .sm\:w-\[150px\] { + width:150px +} +.sm\:w-\[160px\] { + width:160px +} +}@media (min-width:768px) { + .md\:col-span-1 { + grid-column:span 1 / span 1 +} +.md\:w-\[170px\] { + width:170px +} +.md\:grid-cols-2 { + grid-template-columns:repeat(2,minmax(0,1fr)) +} +.md\:flex-nowrap { + flex-wrap:nowrap +} +}@media (min-width:1024px) { + #post-tag { + margin:0 auto; +} +/*2023.7.31新增 内容页标签居中*/ + .lg\:col-span-3 { + grid-column:span 3 / span 3 +} +.lg\:col-span-8 { + grid-column:span 12 / span 11 +} +.lg\:mb-16 { + margin-bottom:1rem +} +.lg\:block { + display:block +} +.lg\:flex { + display:flex +} +.lg\:hidden { + display:none +} +.lg\:w-1\/2 { + width:100% +} +.lg\:grid-cols-3 { + grid-template-columns:repeat(3,minmax(0,1fr)) +} +.lg\:flex-row { + flex-direction:row +} +.lg\:border-x-2 { + border-left-width:0px; +} +.lg\:px-6 { + padding-left:2rem; + padding-right:2rem; +} + +/*.dark .lg\:px-6{ border:1px solid #faf8f1; }*/ +.lg\:py-5 { + padding-top:2rem; + padding-bottom:2rem +} +.lg\:pt-0 { + padding-top:0 +} + +#search-input:focus-visible { + outline:none; + border-radius:9999px; + border:1px solid #dc2626; + margin-left:10px; + padding:0 10px; +} +.middotDivider { + content:"·" +} +#page-nav li { + border-radius:1000rem +} +#page-nav li a { + background-color: #eee!important; + border-radius:50px; + color:#333; + width: 40px; + height: 40px; + text-decoration: none; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} +#page-nav .active a { +background: linear-gradient(#dc2626, #dc2626) center bottom / 100% 6px no-repeat;} + color:##dc2626; +} + +.dark #page-nav li a { + background-color:rgb(13 17 23 / var(--tw-bg-opacity)) !important; + color: #faf8f1; +} +.markdown-body { + font-family:HarmonyOS-Sans,sans-serif +} +.markdown-body h2,.markdown-body h1 { + border-bottom:0 +} +#post-tag a { + display:block; + padding:7px .6rem; + background-color:#dc2626; + border-radius:1rem; + font-size: 12px!important; + color: #faf8f1; + border: 1px solid rgb(0,0,0,0); +} +.post-history {margin:0 auto;} +.post-history a { + display:block; + padding:7px .6rem; + background-color:#dc2626; + border-radius:1rem; + font-size: 12px!important; + color: #faf8f1; + border: 1px solid rgb(0,0,0,0); +} + +/* 2023.7.28 干掉说说头像下的倒三角 +#moment:after { + border:15px solid transparent; + border-bottom-color:#f2f2f2; + content:""; + left:5px; + position:absolute; + top:-23px +} +*/ +#moment{border: 1px solid rgba(0, 0, 0, 0);padding:0 0 25px !important;background-color:transparent!important;overflow:hidden;border-radius:0PX !important;border-bottom:1px dashed #dc2626;} + +.comment-children li { + padding-bottom:0!important; + padding-top:0!important; + border:0!important +} +.comment-list li:last-child { + border:0!important +} +.comment-parent>.comment-children { + padding-left:60px +} +.markdown-body { + -ms-text-size-adjust:100%; + -webkit-text-size-adjust:100%; + margin:15px 0 0; + color:#24292f; + background-color:#faf8f1; + font-size:16px; + line-height:1.5; + word-wrap:break-word; + border-radius:1.25rem; +} +.markdown-body .octicon { + display:inline-block; + fill:currentColor; + vertical-align:text-bottom +} +.markdown-body h1:hover .anchor .octicon-link:before,.markdown-body h2:hover .anchor .octicon-link:before,.markdown-body h3:hover .anchor .octicon-link:before,.markdown-body h4:hover .anchor .octicon-link:before,.markdown-body h5:hover .anchor .octicon-link:before,.markdown-body h6:hover .anchor .octicon-link:before { + width:16px; + height:16px; + content:" "; + display:inline-block; + background-color:currentColor; + -webkit-mask-image:url("data:image/svg+xml,"); + mask-image:url("data:image/svg+xml,") +} +.markdown-body details,.markdown-body figcaption,.markdown-body figure { + display:block +} +.markdown-body summary { + display:list-item +} +.markdown-body [hidden] { + display:none!important +} +.markdown-body a { + background-color:transparent; + color:#dc2626; + text-decoration:none +} +.markdown-body abbr[title] { + border-bottom:none; + -webkit-text-decoration:underline dotted; + text-decoration:underline dotted +} +.markdown-body b,.markdown-body strong { + font-weight:600; +} + +.markdown-body dfn { + font-style:italic +} +.markdown-body h1 { + margin:.67em 0; + font-weight:600; + padding-bottom:.3em; + font-size:2em; + border-bottom:1px solid hsla(210,18%,87%,1) +} +.dark .markdown-body h1{border-bottom:1px solid #333!important;} +.markdown-body mark { + background-color:#faf8f18c5; + color:#24292f +} +.markdown-body small { + font-size:90% +} +.markdown-body sub,.markdown-body sup { + font-size:75%; + line-height:0; + position:relative; + vertical-align:baseline +} +.markdown-body sub { + bottom:-.25em +} +.markdown-body sup { + top:-.5em +} + +.markdown-body img { + border-radius: 10px; + max-width:100%; + margin: 0 auto; + box-sizing:content-box; + background-color:#faf8f1; +} +.markdown-body code,.markdown-body kbd,.markdown-body pre,.markdown-body samp { + font-family:monospace; + font-size:1em +} +.markdown-body figure { + margin:1em 40px +} +.markdown-body hr { + box-sizing:content-box; + overflow:hidden; + background:transparent; + border-bottom:1px dashed #dc2626!important; + height: .1rem; + padding:0; + margin:24px 0; + border:0 +} +.markdown-body input { + font:inherit; + margin:0; + overflow:visible; + font-family:inherit; + font-size:inherit; + line-height:inherit +} +.markdown-body [type=button],.markdown-body [type=reset],.markdown-body [type=submit] { + -webkit-appearance:button +} +.markdown-body [type=checkbox],.markdown-body [type=radio] { + box-sizing:border-box; + padding:0 +} +.markdown-body [type=number]::-webkit-inner-spin-button,.markdown-body [type=number]::-webkit-outer-spin-button { + height:auto +} +.markdown-body [type=search]::-webkit-search-cancel-button,.markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance:none +} +.markdown-body::-webkit-input-placeholder { + color:inherit; + opacity:.54 +} +.markdown-body::-webkit-file-upload-button { + -webkit-appearance:button; + font:inherit +} +.markdown-body a:hover { + text-decoration:none; +} +.markdown-body::-moz-placeholder { + color:#6e7781; + opacity:1 +} +.markdown-body::placeholder { + color:#6e7781; + opacity:1 +} +.markdown-body hr:before { + display:table; + content:"" +} +.markdown-body hr:after { + display:table; + clear:both; + content:"" +} +.markdown-body table { + border-spacing:0; + border-collapse:collapse; + display:block; + width:-moz-max-content; + width:max-content; + max-width:100%; + overflow:auto +} +.markdown-body td,.markdown-body th { + padding:0 +} +.markdown-body details summary { + cursor:pointer +} +.markdown-body details:not([open])>*:not(summary) { + display:none!important +} +.markdown-body a:focus,.markdown-body [role=button]:focus,.markdown-body input[type=radio]:focus,.markdown-body input[type=checkbox]:focus { + outline:2px solid #faf8f1; + outline-offset:-2px; + box-shadow:none +} +.markdown-body a:focus:not(:focus-visible),.markdown-body [role=button]:focus:not(:focus-visible),.markdown-body input[type=radio]:focus:not(:focus-visible),.markdown-body input[type=checkbox]:focus:not(:focus-visible) { + outline:solid 1px transparent +} +.markdown-body a:focus-visible,.markdown-body [role=button]:focus-visible,.markdown-body input[type=radio]:focus-visible,.markdown-body input[type=checkbox]:focus-visible { + outline:2px solid #faf8f1; + outline-offset:-2px; + box-shadow:none +} +.markdown-body a:not([class]):focus,.markdown-body a:not([class]):focus-visible,.markdown-body input[type=radio]:focus,.markdown-body input[type=radio]:focus-visible,.markdown-body input[type=checkbox]:focus,.markdown-body input[type=checkbox]:focus-visible { + outline-offset:0 +} +.markdown-body kbd { + display:inline-block; + padding:3px 5px; + font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height:10px; + color:#24292f; + vertical-align:middle; + background-color:#f6f8fa; + border:solid 1px rgba(175,184,193,.2); + border-bottom-color:#afb8c133; + border-radius:6px; + box-shadow:inset 0 -1px #afb8c133 +} +.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6 { + margin-top:24px; + margin-bottom:16px; + font-weight:600; + line-height:1.25 +} +.markdown-body h2 { + font-weight:600; + padding-bottom:.3em; + font-size:1.5em; + border-bottom:1px solid hsla(210,18%,87%,1) +} +.markdown-body h3 { + font-weight:600; + font-size:1.25em +} + + +.markdown-body h3::before{ + content: '|'; + margin-right: 10px; + color: #dc2626; + background: #dc2626; + border-radius: 5px; +} + +.markdown-body h4 { + font-weight:600; + font-size:1em +} +.markdown-body h5 { + font-weight:600; + font-size:.875em +} +.markdown-body h6 { + font-weight:600; + font-size:.85em; + color:#57606a +} +.markdown-body p { + margin-top:0; + margin-bottom:10px; + line-height:1.8em +} +.markdown-body blockquote { + margin:0 0 5px; + padding:1em 10px; + line-height: 1; + background-color:#eee; + color:inherit; + border-top:1px solid #dc2626; + border-radius:10px; + overflow:hidden; +} +.markdown-body ul,.markdown-body ol { + margin-top:0; + margin-bottom:0; + padding-left:2em +} +.markdown-body ol ol,.markdown-body ul ol { + list-style-type:lower-roman +} +.markdown-body ul ul ol,.markdown-body ul ol ol,.markdown-body ol ul ol,.markdown-body ol ol ol { + list-style-type:lower-alpha +} +.markdown-body ul li { + list-style-type:disc +} +.markdown-body ol li { + list-style-type:decimal +} +.markdown-body dd { + margin-left:0 +} +.markdown-body tt,.markdown-body code,.markdown-body samp { + font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size:12px +} +.markdown-body pre { + margin-top:0; + margin-bottom:0; + font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size:12px; + word-wrap:normal +} +.markdown-body .octicon { + display:inline-block; + overflow:visible!important; + vertical-align:text-bottom; + fill:currentColor +} +.markdown-body input::-webkit-outer-spin-button,.markdown-body input::-webkit-inner-spin-button { + margin:0; + -webkit-appearance:none; + appearance:none +} +.markdown-body:before { + display:table; + content:"" +} +.markdown-body:after { + display:table; + clear:both; + content:"" +} +.markdown-body>*:first-child { + margin-top:0!important +} +.markdown-body>*:last-child { + margin-bottom:0!important +} +.markdown-body a:not([href]) { + color:inherit; + text-decoration:none +} +.markdown-body .absent { + color:#cf222e +} +.markdown-body .anchor { + float:left; + padding-right:4px; + margin-left:-20px; + line-height:1 +} +.markdown-body .anchor:focus { + outline:none +} +.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre,.markdown-body details { + margin-top:0; + margin-bottom:16px +} +.markdown-body blockquote>:first-child { + margin-top:0 +} +.markdown-body blockquote>:last-child { + margin-bottom:0 +} +.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link { + color:#24292f; + vertical-align:middle; + visibility:hidden +} +.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor { + text-decoration:none +} +.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link { + visibility:visible +} +.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code { + padding:0 .2em; + font-size:inherit +} +.markdown-body summary h1,.markdown-body summary h2,.markdown-body summary h3,.markdown-body summary h4,.markdown-body summary h5,.markdown-body summary h6 { + display:inline-block +} +.markdown-body summary h1 .anchor,.markdown-body summary h2 .anchor,.markdown-body summary h3 .anchor,.markdown-body summary h4 .anchor,.markdown-body summary h5 .anchor,.markdown-body summary h6 .anchor { + margin-left:-40px +} +.markdown-body summary h1,.markdown-body summary h2 { + padding-bottom:0; + border-bottom:0 +} +.markdown-body ul.no-list,.markdown-body ol.no-list { + padding:0; + list-style-type:none +} +.markdown-body ol[type=a] { + list-style-type:lower-alpha +} +.markdown-body ol[type=A] { + list-style-type:upper-alpha +} +.markdown-body ol[type=i] { + list-style-type:lower-roman +} +.markdown-body ol[type=I] { + list-style-type:upper-roman +} +.markdown-body ol[type="1"] { + list-style-type:decimal +} +.markdown-body div>ol:not([type]) { + list-style-type:decimal +} +.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul { + margin-top:0; + margin-bottom:0 +} +.markdown-body li>p { + margin-top:16px +} +.markdown-body li+li { + margin-top:.25em +} +.markdown-body dl { + padding:0 +} +.markdown-body dl dt { + padding:0; + margin-top:16px; + font-size:1em; + font-style:italic; + font-weight:600 +} +.markdown-body dl dd { + padding:0 16px; + margin-bottom:16px +} +.markdown-body table th { + font-weight:600 +} +.markdown-body table th,.markdown-body table td { + padding:6px 13px; + border:1px solid #d0d7de +} +.markdown-body table tr { + background-color:#faf8f1; + border-top:1px solid hsla(210,18%,87%,1) +} +.markdown-body table tr:nth-child(2n) { + background-color:#f6f8fa +} +.markdown-body table img { + background-color:transparent +} +.markdown-body img[align=right] { + padding-left:20px +} +.markdown-body img[align=left] { + padding-right:20px +} +.markdown-body .emoji { + max-width:none; + vertical-align:text-top; + background-color:transparent +} +.markdown-body span.frame { + display:block; + overflow:hidden +} +.markdown-body span.frame>span { + display:block; + float:left; + width:auto; + padding:7px; + margin:13px 0 0; + overflow:hidden; + border:1px solid #d0d7de +} +.markdown-body span.frame span img { + display:block; + float:left +} +.markdown-body span.frame span span { + display:block; + padding:5px 0 0; + clear:both; + color:#24292f +} +.markdown-body span.align-center { + display:block; + overflow:hidden; + clear:both +} +.markdown-body span.align-center>span { + display:block; + margin:13px auto 0; + overflow:hidden; + text-align:center +} +.markdown-body span.align-center span img { + margin:0 auto; + text-align:center +} +.markdown-body span.align-right { + display:block; + overflow:hidden; + clear:both +} +.markdown-body span.align-right>span { + display:block; + margin:13px 0 0; + overflow:hidden; + text-align:right +} +.markdown-body span.align-right span img { + margin:0; + text-align:right +} +.markdown-body span.float-left { + display:block; + float:left; + margin-right:13px; + overflow:hidden +} +.markdown-body span.float-left span { + margin:13px 0 0 +} +.markdown-body span.float-right { + display:block; + float:right; + margin-left:13px; + overflow:hidden +} +.markdown-body span.float-right>span { + display:block; + margin:13px auto 0; + overflow:hidden; + text-align:right +} +.markdown-body code,.markdown-body tt { + padding:.2em .4em; + margin:0; + font-size:85%; + white-space:break-spaces; + background-color:#afb8c133; + border-radius:6px +} +.markdown-body code br,.markdown-body tt br { + display:none +} +.markdown-body del code { + text-decoration:inherit +} +.markdown-body samp { + font-size:85% +} +.markdown-body pre code { + font-size:100% +} +.markdown-body pre>code { + padding:0; + margin:0; + word-break:break-all; + white-space:pre; + background:transparent; + border:0 +} +.markdown-body .highlight { + margin-bottom:16px +} +.markdown-body .highlight pre { + margin-bottom:0; + word-break:normal +} +.markdown-body .highlight pre,.markdown-body pre { + padding:16px; + overflow:auto; + font-size:85%; + line-height:1.45; + background-color:#eee!important; + border-radius:6px +} +.markdown-body pre code,.markdown-body pre tt { + display:inline; + max-width:auto; + padding:0; + margin:0; + overflow:visible; + line-height:inherit; + word-wrap:break-all; + background-color:transparent; + border:0 +} +.markdown-body .csv-data td,.markdown-body .csv-data th { + padding:5px; + overflow:hidden; + font-size:12px; + line-height:1; + text-align:left; + white-space:nowrap +} +.markdown-body .csv-data .blob-num { + padding:10px 8px 9px; + text-align:right; + background:#faf8f1fff; + border:0 +} +.markdown-body [data-footnote-ref]:before { + content:"[" +} +.markdown-body [data-footnote-ref]:after { + content:"]" +} +.markdown-body .footnotes { + font-size:12px; + color:#57606a; + border-top:1px solid #d0d7de +} +.markdown-body .footnotes ol { + padding-left:16px +} +.markdown-body .footnotes ol ul { + display:inline-block; + padding-left:16px; + margin-top:16px +} +.markdown-body .footnotes li { + position:relative +} +.markdown-body .footnotes li:target:before { + position:absolute; + top:-8px; + right:-8px; + bottom:-8px; + left:-24px; + pointer-events:none; + content:""; + border:2px solid #0969da; + border-radius:6px +} +.markdown-body .footnotes li:target { + color:#24292f +} +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family:monospace +} +.markdown-body .pl-c { + color:#6e7781 +} +.markdown-body .pl-c1,.markdown-body .pl-s .pl-v { + color:#0550ae +} +.markdown-body .pl-e,.markdown-body .pl-en { + color:#8250df +} +.markdown-body .pl-smi,.markdown-body .pl-s .pl-s1 { + color:#24292f +} +.markdown-body .pl-ent { + color:#116329 +} +.markdown-body .pl-k { + color:#cf222e +} +.markdown-body .pl-s,.markdown-body .pl-pds,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sre,.markdown-body .pl-sr .pl-sra { + color:#0a3069 +} +.markdown-body .pl-v,.markdown-body .pl-smw { + color:#953800 +} +.markdown-body .pl-bu { + color:#82071e +} +.markdown-body .pl-ii { + color:#f6f8fa; + background-color:#82071e +} +.markdown-body .pl-c2 { + color:#f6f8fa; + background-color:#cf222e +} +.markdown-body .pl-sr .pl-cce { + font-weight:700; + color:#116329 +} +.markdown-body .pl-ml { + color:#3b2300 +} +.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms { + font-weight:700; + color:#0550ae +} +.markdown-body .pl-mi { + font-style:italic; + color:#24292f +} +.markdown-body .pl-mb { + font-weight:700; + color:#24292f +} +.markdown-body .pl-md { + color:#82071e; + background-color:#ffebe9 +} +.markdown-body .pl-mi1 { + color:#116329; + background-color:#dafbe1 +} +.markdown-body .pl-mc { + color:#953800; + background-color:#ffd8b5 +} +.markdown-body .pl-mi2 { + color:#eaeef2; + background-color:#0550ae +} +.markdown-body .pl-mdr { + font-weight:700; + color:#8250df +} +.markdown-body .pl-ba { + color:#57606a +} +.markdown-body .pl-sg { + color:#8c959f +} +.markdown-body .pl-corl { + text-decoration:underline; + color:#0a3069 +} +.markdown-body g-emoji { + display:inline-block; + min-width:1ch; + font-family:"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol; + font-size:1em; + font-style:normal!important; + font-weight:400; + line-height:1; + vertical-align:-.075em +} +.markdown-body g-emoji img { + width:1em; + height:1em +} +.markdown-body .task-list-item { + list-style-type:none +} +.markdown-body .task-list-item label { + font-weight:400 +} +.markdown-body .task-list-item.enabled label { + cursor:pointer +} +.markdown-body .task-list-item+.task-list-item { + margin-top:4px +} +.markdown-body .task-list-item .handle { + display:none +} +.markdown-body .task-list-item-checkbox { + margin:0 .2em .25em -1.4em; + vertical-align:middle +} +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin:0 -1.6em .25em .2em +} +.markdown-body .contains-task-list { + position:relative +} +.markdown-body .contains-task-list:hover .task-list-item-convert-container,.markdown-body .contains-task-list:focus-within .task-list-item-convert-container { + display:block; + width:auto; + height:24px; + overflow:visible; + clip:auto +} +.markdown-body::-webkit-calendar-picker-indicator { + filter:invert(50%) +} +.dark .markdown-body { + color-scheme:dark; + -ms-text-size-adjust:100%; + -webkit-text-size-adjust:100%; + margin:15px 0 0; + color:#c9d1d9; + background-color:#0d1117; + font-size:16px; + word-wrap:break-word +} +.dark .markdown-body .octicon { + display:inline-block; + fill:currentColor; + vertical-align:text-bottom +} +.dark .markdown-body h1:hover .anchor .octicon-link:before,.dark .markdown-body h2:hover .anchor .octicon-link:before,.dark .markdown-body h3:hover .anchor .octicon-link:before,.dark .markdown-body h4:hover .anchor .octicon-link:before,.dark .markdown-body h5:hover .anchor .octicon-link:before,.dark .markdown-body h6:hover .anchor .octicon-link:before { + width:16px; + height:16px; + content:" "; + display:inline-block; + background-color:currentColor; + -webkit-mask-image:url("data:image/svg+xml,"); + mask-image:url("data:image/svg+xml,") +} +.dark .markdown-body details,.dark .markdown-body figcaption,.dark .markdown-body figure { + display:block +} +.dark .markdown-body summary { + display:list-item +} +.dark .markdown-body [hidden] { + display:none!important +} +.dark .markdown-body a { + background-color:transparent; + color:#dc2626; + text-decoration:none +} +.dark .markdown-body abbr[title] { + border-bottom:none; + -webkit-text-decoration:underline dotted; + text-decoration:underline dotted +} +.dark .markdown-body b,.dark .markdown-body strong { + font-weight:600 +} +.dark .markdown-body dfn { + font-style:italic +} +.dark .markdown-body h1 { + margin:.67em 0; + font-weight:600; + padding-bottom:.3em; + font-size:2em; +} +.dark .markdown-body mark { + background-color:#bb800926; + color:#c9d1d9 +} +.dark .markdown-body small { + font-size:90% +} +.dark .markdown-body sub,.dark .markdown-body sup { + font-size:75%; + line-height:0; + position:relative; + vertical-align:baseline +} +.dark .markdown-body sub { + bottom:-.25em +} +.dark .markdown-body sup { + top:-.5em +} +.dark .markdown-body img { + border-radius: 10px; + max-width:100%; + margin: 0 auto; + background-color:inherit; +} +.dark .markdown-body code,.dark .markdown-body kbd,.dark .markdown-body pre,.dark .markdown-body samp { + font-family:monospace; + font-size:1em +} +.dark .markdown-body figure { + margin:1em 40px +} +.dark .markdown-body hr { + box-sizing:content-box; + overflow:hidden; + background:transparent; + border-bottom:1px dashed #dc2626!important; + height:.1em; + padding:0; + margin:24px 0; + border:0 +} +.dark .markdown-body input { + font:inherit; + margin:0; + overflow:visible; + font-family:inherit; + font-size:inherit; + line-height:inherit; + background-color: ; +} +.dark .markdown-body [type=button],.dark .markdown-body [type=reset],.dark .markdown-body [type=submit] { + -webkit-appearance:button +} +.dark .markdown-body [type=checkbox],.dark .markdown-body [type=radio] { + box-sizing:border-box; + padding:0 +} +.dark .markdown-body [type=number]::-webkit-inner-spin-button,.dark .markdown-body [type=number]::-webkit-outer-spin-button { + height:auto +} +.dark .markdown-body [type=search]::-webkit-search-cancel-button,.dark .markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance:none +} +.dark .markdown-body::-webkit-input-placeholder { + color:inherit; + opacity:.54 +} +.dark .markdown-body::-webkit-file-upload-button { + -webkit-appearance:button; + font:inherit +} +.dark .markdown-body a:hover { + text-decoration:none; +} +.dark .markdown-body::-moz-placeholder { + color:#6e7681; + opacity:1 +} +.dark .markdown-body::placeholder { + color:#6e7681; + opacity:1 +} +.dark .markdown-body hr:before { + display:table; + content:"" +} +.dark .markdown-body hr:after { + display:table; + clear:both; + content:"" +} +.dark .markdown-body table { + border-spacing:0; + border-collapse:collapse; + display:block; + width:-moz-max-content; + width:max-content; + max-width:100%; + overflow:auto +} +.dark .markdown-body td,.dark .markdown-body th { + padding:0 +} +.dark .markdown-body details summary { + cursor:pointer +} +.dark .markdown-body details:not([open])>*:not(summary) { + display:none!important +} +.dark .markdown-body a:focus,.dark .markdown-body [role=button]:focus,.dark .markdown-body input[type=radio]:focus,.dark .markdown-body input[type=checkbox]:focus { + outline:2px solid #dc2626; + outline-offset:-2px; + box-shadow:none +} +.dark .markdown-body a:focus:not(:focus-visible),.dark .markdown-body [role=button]:focus:not(:focus-visible),.dark .markdown-body input[type=radio]:focus:not(:focus-visible),.dark .markdown-body input[type=checkbox]:focus:not(:focus-visible) { + outline:solid 1px transparent +} +.dark .markdown-body a:focus-visible,.dark .markdown-body [role=button]:focus-visible,.dark .markdown-body input[type=radio]:focus-visible,.dark .markdown-body input[type=checkbox]:focus-visible { + outline:2px solid #dc2626; + outline-offset:-2px; + box-shadow:none +} +.dark .markdown-body a:not([class]):focus,.dark .markdown-body a:not([class]):focus-visible,.dark .markdown-body input[type=radio]:focus,.dark .markdown-body input[type=radio]:focus-visible,.dark .markdown-body input[type=checkbox]:focus,.dark .markdown-body input[type=checkbox]:focus-visible { + outline-offset:0 +} +.dark .markdown-body kbd { + display:inline-block; + padding:3px 5px; + font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height:10px; + color:#c9d1d9; + vertical-align:middle; + background-color:#161b22; + border:solid 1px rgba(110,118,129,.4); + border-bottom-color:#6e768166; + border-radius:6px; + box-shadow:inset 0 -1px #6e768166 +} +.dark .markdown-body h1,.dark .markdown-body h2,.dark .markdown-body h3,.dark .markdown-body h4,.dark .markdown-body h5,.dark .markdown-body h6 { + margin-top:24px; + margin-bottom:16px; + font-weight:600; + line-height:1.25 +} +.dark .markdown-body h2 { + font-weight:600; + padding-bottom:.3em; + font-size:1.5em; + border-bottom:1px solid #21262d +} +.dark .markdown-body h3 { + font-weight:600; + font-size:1.25em +} +.dark .markdown-body h4 { + font-weight:600; + font-size:1em +} +.dark .markdown-body h5 { + font-weight:600; + font-size:.875em +} +.dark .markdown-body h6 { + font-weight:600; + font-size:.85em; + color:#8b949e +} +.dark .markdown-body p { + margin-top:0; + margin-bottom:10px +} +.dark .markdown-body blockquote { + margin:0 0 5px; + padding:1em 10px; + line-height: 1; + background-color: rgb(10 12 25 / var(--tw-bg-opacity)); + color:inherit; +} +.dark .markdown-body ul,.dark .markdown-body ol { + margin-top:0; + margin-bottom:0; + padding-left:2em +} +.dark .markdown-body ol ol,.dark .markdown-body ul ol { + list-style-type:lower-roman +} +.dark .markdown-body ul ul ol,.dark .markdown-body ul ol ol,.dark .markdown-body ol ul ol,.dark .markdown-body ol ol ol { + list-style-type:lower-alpha +} +.dark .markdown-body dd { + margin-left:0 +} +.dark .markdown-body tt,.dark .markdown-body code,.dark .markdown-body samp { + font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size:12px +} +.dark .markdown-body pre { + margin-top:0; + margin-bottom:0; + font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size:12px; + word-wrap:normal +} +.dark .markdown-body .octicon { + display:inline-block; + overflow:visible!important; + vertical-align:text-bottom; + fill:currentColor +} +.dark .markdown-body input::-webkit-outer-spin-button,.dark .markdown-body input::-webkit-inner-spin-button { + margin:0; + -webkit-appearance:none; + appearance:none +} +.dark .markdown-body:before { + display:table; + content:"" +} +.dark .markdown-body:after { + display:table; + clear:both; + content:"" +} +.dark .markdown-body>*:first-child { + margin-top:0!important +} +.dark .markdown-body>*:last-child { + margin-bottom:0!important +} +.dark .markdown-body a:not([href]) { + color:inherit; + text-decoration:none +} +.dark .markdown-body .absent { + color:#f85149 +} +.dark .markdown-body .anchor { + float:left; + padding-right:4px; + margin-left:-20px; + line-height:1 +} +.dark .markdown-body .anchor:focus { + outline:none +} +.dark .markdown-body p,.dark .markdown-body blockquote,.dark .markdown-body ul,.dark .markdown-body ol,.dark .markdown-body dl,.dark .markdown-body table,.dark .markdown-body pre,.dark .markdown-body details { + margin-top:0; + margin-bottom:16px +} +.dark .markdown-body blockquote>:first-child { + margin-top:0 +} +.dark .markdown-body blockquote>:last-child { + margin-bottom:0 +} +.dark .markdown-body h1 .octicon-link,.dark .markdown-body h2 .octicon-link,.dark .markdown-body h3 .octicon-link,.dark .markdown-body h4 .octicon-link,.dark .markdown-body h5 .octicon-link,.dark .markdown-body h6 .octicon-link { + color:#c9d1d9; + vertical-align:middle; + visibility:hidden +} +.dark .markdown-body h1:hover .anchor,.dark .markdown-body h2:hover .anchor,.dark .markdown-body h3:hover .anchor,.dark .markdown-body h4:hover .anchor,.dark .markdown-body h5:hover .anchor,.dark .markdown-body h6:hover .anchor { + text-decoration:none +} +.dark .markdown-body h1:hover .anchor .octicon-link,.dark .markdown-body h2:hover .anchor .octicon-link,.dark .markdown-body h3:hover .anchor .octicon-link,.dark .markdown-body h4:hover .anchor .octicon-link,.dark .markdown-body h5:hover .anchor .octicon-link,.dark .markdown-body h6:hover .anchor .octicon-link { + visibility:visible +} +.dark .markdown-body h1 tt,.dark .markdown-body h1 code,.dark .markdown-body h2 tt,.dark .markdown-body h2 code,.dark .markdown-body h3 tt,.dark .markdown-body h3 code,.dark .markdown-body h4 tt,.dark .markdown-body h4 code,.dark .markdown-body h5 tt,.dark .markdown-body h5 code,.dark .markdown-body h6 tt,.dark .markdown-body h6 code { + padding:0 .2em; + font-size:inherit +} +.dark .markdown-body summary h1,.dark .markdown-body summary h2,.dark .markdown-body summary h3,.dark .markdown-body summary h4,.dark .markdown-body summary h5,.dark .markdown-body summary h6 { + display:inline-block +} +.dark .markdown-body summary h1 .anchor,.dark .markdown-body summary h2 .anchor,.dark .markdown-body summary h3 .anchor,.dark .markdown-body summary h4 .anchor,.dark .markdown-body summary h5 .anchor,.dark .markdown-body summary h6 .anchor { + margin-left:-40px +} +.dark .markdown-body summary h1,.dark .markdown-body summary h2 { + padding-bottom:0; + border-bottom:0 +} +.dark .markdown-body ul.no-list,.dark .markdown-body ol.no-list { + padding:0; + list-style-type:none +} +.dark .markdown-body ol[type=a] { + list-style-type:lower-alpha +} +.dark .markdown-body ol[type=A] { + list-style-type:upper-alpha +} +.dark .markdown-body ol[type=i] { + list-style-type:lower-roman +} +.dark .markdown-body ol[type=I] { + list-style-type:upper-roman +} +.dark .markdown-body ol[type="1"] { + list-style-type:decimal +} +.dark .markdown-body div>ol:not([type]) { + list-style-type:decimal +} +.dark .markdown-body ul ul,.dark .markdown-body ul ol,.dark .markdown-body ol ol,.dark .markdown-body ol ul { + margin-top:0; + margin-bottom:0 +} +.dark .markdown-body li>p { + margin-top:16px +} +.dark .markdown-body li+li { + margin-top:.25em +} +.dark .markdown-body dl { + padding:0 +} +.dark .markdown-body dl dt { + padding:0; + margin-top:16px; + font-size:1em; + font-style:italic; + font-weight:600 +} +.dark .markdown-body dl dd { + padding:0 16px; + margin-bottom:16px +} +.dark .markdown-body table th { + font-weight:600 +} +.dark .markdown-body table th,.dark .markdown-body table td { + padding:6px 13px; + border:1px solid #30363d +} +.dark .markdown-body table tr { + background-color:#0d1117; + border-top:1px solid #21262d +} +.dark .markdown-body table tr:nth-child(2n) { + background-color:#161b22 +} +.dark .markdown-body table img { + background-color:transparent +} +.dark .markdown-body img[align=right] { + padding-left:20px +} +.dark .markdown-body img[align=left] { + padding-right:20px +} +.dark .markdown-body .emoji { + max-width:none; + vertical-align:text-top; + background-color:transparent +} +.dark .markdown-body span.frame { + display:block; + overflow:hidden +} +.dark .markdown-body span.frame>span { + display:block; + float:left; + width:auto; + padding:7px; + margin:13px 0 0; + overflow:hidden; + border:1px solid #30363d +} +.dark .markdown-body span.frame span img { + display:block; + float:left +} +.dark .markdown-body span.frame span span { + display:block; + padding:5px 0 0; + clear:both; + color:#c9d1d9 +} +.dark .markdown-body span.align-center { + display:block; + overflow:hidden; + clear:both +} +.dark .markdown-body span.align-center>span { + display:block; + margin:13px auto 0; + overflow:hidden; + text-align:center +} +.dark .markdown-body span.align-center span img { + margin:0 auto; + text-align:center +} +.dark .markdown-body span.align-right { + display:block; + overflow:hidden; + clear:both +} +.dark .markdown-body span.align-right>span { + display:block; + margin:13px 0 0; + overflow:hidden; + text-align:right +} +.dark .markdown-body span.align-right span img { + margin:0; + text-align:right +} +.dark .markdown-body span.float-left { + display:block; + float:left; + margin-right:13px; + overflow:hidden +} +.dark .markdown-body span.float-left span { + margin:13px 0 0 +} +.dark .markdown-body span.float-right { + display:block; + float:right; + margin-left:13px; + overflow:hidden +} +.dark .markdown-body span.float-right>span { + display:block; + margin:13px auto 0; + overflow:hidden; + text-align:right +} +.dark .markdown-body code,.dark .markdown-body tt { + padding:.2em .4em; + margin:0; + font-size:85%; + white-space:break-spaces; + background-color:#6e768166; + border-radius:6px +} +.dark .markdown-body code br,.dark .markdown-body tt br { + display:none +} +.dark .markdown-body del code { + text-decoration:inherit +} +.dark .markdown-body samp { + font-size:85% +} +.dark .markdown-body pre code { + font-size:100% +} +.dark .markdown-body pre>code { + padding:0; + margin:0; + word-break:normal; + white-space:pre; + background:transparent; + border:0 +} +.dark .markdown-body .highlight { + margin-bottom:16px +} +.dark .markdown-body .highlight pre { + margin-bottom:0; + word-break:normal +} +.dark .markdown-body .highlight pre,.dark .markdown-body pre { + padding:16px; + overflow:auto; + font-size:100%; + line-height:1.45; + background-color:rgb(13 17 23 /1) !important; + border-radius:6px +} +.dark .markdown-body pre code,.dark .markdown-body pre tt { + display:inline; + max-width:auto; + padding:0; + margin:0; + overflow:visible; + line-height:inherit; + word-wrap:normal; + background-color:transparent; + border:0 +} +.dark .markdown-body .csv-data td,.dark .markdown-body .csv-data th { + padding:5px; + overflow:hidden; + font-size:12px; + line-height:1; + text-align:left; + white-space:nowrap +} +.dark .markdown-body .csv-data .blob-num { + padding:10px 8px 9px; + text-align:right; + background:#0d1117; + border:0 +} +.dark .markdown-body .csv-data tr { + border-top:0 +} +.dark .markdown-body .csv-data th { + font-weight:600; + background:#161b22; + border-top:0 +} +.dark .markdown-body [data-footnote-ref]:before { + content:"[" +} +.dark .markdown-body [data-footnote-ref]:after { + content:"]" +} +.dark .markdown-body .footnotes { + font-size:12px; + color:#8b949e; + border-top:1px solid #30363d +} +.dark .markdown-body .footnotes ol { + padding-left:16px +} +.dark .markdown-body .footnotes ol ul { + display:inline-block; + padding-left:16px; + margin-top:16px +} +.dark .markdown-body .footnotes li { + position:relative +} +.dark .markdown-body .footnotes li:target:before { + position:absolute; + top:-8px; + right:-8px; + bottom:-8px; + left:-24px; + pointer-events:none; + content:""; + border:2px solid #1f6feb; + border-radius:6px +} +.dark .markdown-body .footnotes li:target { + color:#c9d1d9 +} +.dark .markdown-body .footnotes .data-footnote-backref g-emoji { + font-family:monospace +} +.dark .markdown-body .pl-c { + color:#8b949e +} +.dark .markdown-body .pl-c1,.dark .markdown-body .pl-s .pl-v { + color:#79c0ff +} +.dark .markdown-body .pl-e,.dark .markdown-body .pl-en { + color:#d2a8ff +} +.dark .markdown-body .pl-smi,.dark .markdown-body .pl-s .pl-s1 { + color:#c9d1d9 +} +.dark .markdown-body .pl-ent { + color:#7ee787 +} +.dark .markdown-body .pl-k { + color:#ff7b72 +} +.dark .markdown-body .pl-s,.dark .markdown-body .pl-pds,.dark .markdown-body .pl-s .pl-pse .pl-s1,.dark .markdown-body .pl-sr,.dark .markdown-body .pl-sr .pl-cce,.dark .markdown-body .pl-sr .pl-sre,.dark .markdown-body .pl-sr .pl-sra { + color:#a5d6ff +} +.dark .markdown-body .pl-v,.dark .markdown-body .pl-smw { + color:#ffa657 +} +.dark .markdown-body .pl-bu { + color:#f85149 +} +.dark .markdown-body .pl-ii { + color:#f0f6fc; + background-color:#8e1519 +} +.dark .markdown-body .pl-c2 { + color:#f0f6fc; + background-color:#b62324 +} +.dark .markdown-body .pl-sr .pl-cce { + font-weight:700; + color:#7ee787 +} +.dark .markdown-body .pl-ml { + color:#f2cc60 +} +.dark .markdown-body .pl-mh,.dark .markdown-body .pl-mh .pl-en,.dark .markdown-body .pl-ms { + font-weight:700; + color:#1f6feb +} +.dark .markdown-body .pl-mi { + font-style:italic; + color:#c9d1d9 +} +.dark .markdown-body .pl-mb { + font-weight:700; + color:#c9d1d9 +} +.dark .markdown-body .pl-md { + color:#ffdcd7; + background-color:#67060c +} +.dark .markdown-body .pl-mi1 { + color:#aff5b4; + background-color:#033a16 +} +.dark .markdown-body .pl-mc { + color:#ffdfb6; + background-color:#5a1e02 +} +.dark .markdown-body .pl-mi2 { + color:#c9d1d9; + background-color:#1158c7 +} +.dark .markdown-body .pl-mdr { + font-weight:700; + color:#d2a8ff +} +.dark .markdown-body .pl-ba { + color:#8b949e +} +.dark .markdown-body .pl-sg { + color:#484f58 +} +.dark .markdown-body .pl-corl { + text-decoration:underline; + color:#a5d6ff +} +.dark .markdown-body g-emoji { + display:inline-block; + min-width:1ch; + font-family:"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol; + font-size:1em; + font-style:normal!important; + font-weight:400; + line-height:1; + vertical-align:-.075em +} +.dark .markdown-body g-emoji img { + width:1em; + height:1em +} +.dark .markdown-body .task-list-item { + list-style-type:none +} +.dark .markdown-body .task-list-item label { + font-weight:400 +} +.dark .markdown-body .task-list-item.enabled label { + cursor:pointer +} +.dark .markdown-body .task-list-item+.task-list-item { + margin-top:4px +} +.dark .markdown-body .task-list-item .handle { + display:none +} +.dark .markdown-body .task-list-item-checkbox { + margin:0 .2em .25em -1.4em; + vertical-align:middle +} +.dark .markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin:0 -1.6em .25em .2em +} +.dark .markdown-body .contains-task-list { + position:relative +} +.dark .markdown-body .contains-task-list:hover .task-list-item-convert-container,.dark .markdown-body .contains-task-list:focus-within .task-list-item-convert-container { + display:block; + width:auto; + height:24px; + overflow:visible; + clip:auto +} +.dark .markdown-body::-webkit-calendar-picker-indicator { + filter:invert(50%) +} +code[class*=language-],pre[class*=language-] { + text-shadow:none!important; + color:inherit!important +} +.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string { + background:hsla(0,0%,100%,0)!important +} +pre[class*=language-].line-numbers { + position:relative; + padding-left:3.8em; + counter-reset:linenumber +} +pre[class*=language-].line-numbers>code { + position:relative; + white-space:inherit +} +.line-numbers .line-numbers-rows { + position:absolute; + pointer-events:none; + top:0; + font-size:100%; + left:-3.8em; + width:3em; + letter-spacing:-1px; + border-right:1px solid #999; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none +} +.line-numbers-rows>span { + display:block; + counter-increment:linenumber +} +.line-numbers-rows>span:before { + content:counter(linenumber); + color:#999; + display:block; + padding-right:.8em; + text-align:right +} +div.code-toolbar { + position:relative +} +div.code-toolbar>.toolbar { + position:absolute; + z-index:10; + top:.3em; + right:.2em; + transition:opacity .3s ease-in-out; + opacity:0 +} +div.code-toolbar:hover>.toolbar { + opacity:1 +} +div.code-toolbar:focus-within>.toolbar { + opacity:1 +} +div.code-toolbar>.toolbar>.toolbar-item { + display:inline-block +} +div.code-toolbar>.toolbar>.toolbar-item>a { + cursor:pointer +} +div.code-toolbar>.toolbar>.toolbar-item>button { + background:none; + border:0; + color:inherit; + font:inherit; + line-height:normal; + overflow:visible; + padding:0; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none +} +div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span { + color:#bbb; + font-size:.8em; + padding:0 .5em; + background:#f5f2f0; + background:rgba(224,224,224,.2); + box-shadow:0 2px #3333; + border-radius:.5em +} +div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus { + color:inherit; + text-decoration:none +} +code[class*=language-],pre[class*=language-] { + color:#333; + background:none; + text-shadow:0 1px white; + font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace; + font-size:1em; + text-align:left; + white-space:pre; + word-spacing:normal; + word-break:normal; + word-wrap:normal; + line-height:1.5; + -moz-tab-size:4; + -o-tab-size:4; + tab-size:4; + -webkit-hyphens:none; + hyphens:none +} +pre[class*=language-]::-moz-selection,pre[class*=language-]::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-]::-moz-selection { + text-shadow:none; + background:#b3d4fc +} +pre[class*=language-]::selection,pre[class*=language-]::selection,code[class*=language-]::selection,code[class*=language-]::selection { + text-shadow:none; + background:#b3d4fc +} +@media print { + code[class*=language-],pre[class*=language-] { + text-shadow:none +} +}pre[class*=language-] { + padding:1em; + margin:.5em 0; + overflow:auto +} +:not(pre)>code[class*=language-],pre[class*=language-] { + background:#f5f2f0 +} +:not(pre)>code[class*=language-] { + padding:.1em; + border-radius:.3em; + white-space:normal +} +.token.comment,.token.prolog,.token.doctype,.token.cdata { + color:#708090 +} +.token.punctuation { + color:#999 +} +.token.namespace { + opacity:.7 +} +.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted { + color:#905 +} +.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted { + color:#690 +} +.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string { + color:#9a6e3a; + background:hsla(0,0%,100%,.5) +} +.token.atrule,.token.attr-value,.token.keyword { + color:#07a +} +.token.function,.token.class-name { + color:#dd4a68 +} +.token.regex,.token.important,.token.variable { + color:#e90 +} +.token.important,.token.bold { + font-weight:700 +} +.token.italic { + font-style:italic +} +.token.entity { + cursor:help +} +/*2023.7.29 文章列表新增标签调用*/ +.kw a { + text-decoration:underline; + color:#faf8f1; +} +/*2023.7.30 面包屑导航*/ +.crumbs_patch { + text-align:center; + margin-top:20px; +} +/* 2023.7.30 评论作者昵称css优化*/ +.dark .author-name a { + background-color:transparent; + color:#dc2626 !important; + text-decoration:none; +} + +.author-name a { + color:#dc2626; +} +.author-name a:hover { + text-decoration:underline; + color:#dc2626; +} +.dark .markdown-body-list:hover { + border-width:0.5px; + border-style:solid; + border-color:#e5e7eb; +} +.markdown-body-list:hover { + border-width:0.5px; + border-style:solid; + border-color:#33300;} + + +.dark .wz:hover { + border-width:0.5px; + border-style:solid; + border-color:#dc2626; +} + +.wz:hover{ + border-width:0.5px; + border-style:solid; + border-color: #dc2626; + border-radius: 15px!important; +} +/*2023.7.31 新增the end*/ +.the-end { + display:flex; + flex-wrap:nowrap; + color:#dc2626; + text-align:center; + align-items:center; +} +.the-end::after,.the-end::before { + display:block; + content:''; + height:1px; + background-color:#dc2626; + width:25%; + opacity: 0.8; +} +.the-end::after { + margin:0 auto 0 20px; +} +.the-end::before { + margin:0 20px 0 auto; +} +.wx { + margin:-40px auto 0px; +} +}.iconfont { + padding:0 1px; +} +/* 2023.8.3 友情链接页面*/ +#Links-mian { + }.main_element { + margin:0 0; + animation:show 0.3s linear; + border-radius:0.25rem; +} +.Links-content { + margin:-10px auto 0; + height:auto; + margin-bottom:1rem; +} +.Total { + padding:0 .6em 0 0; + background-color:; + border-radius:5px; + overflow:hidden; + will-change:width; + transition:all .1s; + max-width:fit-content; + margin-bottom:1rem; +} +.Total i { + display:inline-block; + width:2em; + text-align:center; + margin-right:.309rem; + background-color:#e3e7ed; + transition:background-color .1s; +} +.links-list-item { + margin:0.5rem 0.5rem; + -webkit-transition:.3s; + -webkit-transition:.3s; + transition:.3s; + -moz-transition:.3s; + border-radius:10px; + transition-timing-function:ease-in-out; + position:relative; + white-space:nowrap; + text-overflow:ellipsis; + overflow:hidden; + border:0.5px solid rgb(82 82 82 / var(--tw-border-opacity)); +} +.links-list-item a { + display:flex; + border:none; + align-items:center; + font-color:#faf8f1; + background:; +} +.links-list-item a:hover { + background:transparent; + background-color:#faf8f1; + color:#494949; +} +.links-list-item:hover .links-avatar { + }.links-list-item:hover .links-item-info span { + color:#494949; +} +.links-avatar { + margin:10px 20px 10px 10px; + border-radius:10px; + -webkit-transition:.3s !important; + -webkit-transition:.3s !important; + transition:.3s !important; + -moz-transition:.3s !important; + background:#f5f5f5; + max-width:60px; + max-height:60px +} +.links-item-name { + text-align:left; + font-size:14px; + display:block; + font-weight:700; + align-items:center; + -webkit-transition:.3s; + -webkit-transition:.3s; + transition:.3s; + -moz-transition:.3s +} +.links-item-desc { + white-space:normal; + text-align:left; + text-overflow:ellipsis; + opacity:.7; + font-weight:700; + font-size:12px; + -webkit-transition:.3s; + -webkit-transition:.3s; + transition:.3s; + -moz-transition:.3s +} +.flexbox { + display:-ms-flexbox; + display:flex; + -ms-flex-wrap:wrap; + flex-wrap:wrap; +} +.flex-50 { + -ms-flex:0 0 50%; + flex:0 0 50%; + max-width:50%; +} +.flex-20 { + -ms-flex:0 0 20%; + flex:0 0 20%; + max-width:20%; +} +.text-ell { + display:-webkit-box; + overflow:hidden; + text-overflow:ellipsis; + -webkit-line-clamp:1; + -webkit-box-orient:vertical; + flex-shrink:1; +} +/*读者墙 2023.8.4*/ +#reader-wall>.readers-list { + margin:unset; + padding-bottom:15px; + display:flex; + flex-direction:row; + flex-wrap:wrap; + justify-content:flex-start; +} +#reader-wall>.readers-list li { + width:25%; + height:fit-content; + list-style:none; +} +#reader-wall>.readers-list a::after { + content:unset +} +#reader-wall>.readers-list a { + margin:4px; + border-radius:5px; + font-size:10px; + position:relative; + line-height:30px; + display:block; + padding:10px 0 10px 10px;} + + +#reader-wall>.readers-list a:hover { + }#reader-wall img,#reader-wall strong { + position:absolute; + top:60%; + transform:translateY(-60%); +} +#reader-wall>.readers-list a>img { + border-radius:999px; + left:.2rem; + margin:unset; + border: 2px solid #dc2626; + padding:5px; + -webkit-transition:0.4s;-webkit-transition:-webkit-transform 0.4s ease-out;transition:transform 0.4s ease-out;-moz-transition:-moz-transform 0.4s ease-out;} + +#reader-wall>.readers-list a>img:hover{transform:rotateZ(360deg);-webkit-transform:rotateZ(360deg);-moz-transform:rotateZ(360deg);} +} +@keyframes img-light { + 0% { + box-shadow:0 0 4px #f00; +} +25% { + box-shadow:0 0 16px #0f0; +} +50% { + box-shadow:0 0 4px #00f; +} +75% { + box-shadow:0 0 16px #0f0; +} +100% { + box-shadow:0 0 4px #f00; +} +}#reader-wall>.readers-list a>em { + font-size:1rem; + font-family:fangsong; + max-width:58%; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + margin:0 auto; + display:block; + text-align:center; +} +#reader-wall>.readers-list a:hover>em { + font-size:250%; +} +#reader-wall>.readers-list a>strong { + right:.4rem; + color: #dc2626; +} +@media screen and (max-width:767px) { + #reader-wall>.readers-list li { + width:50%; +} + +}body.theme-dark #reader-wall>.readers-list a { + background-color:rgba(230,230,255,.03); +} +.readers-list * { + -webkit-transition:all .2s ease-out; + -moz-transition:all .2s ease-out; + transition:all .2s ease-out; +} +/* 友人页面css 2023.8.5*/ +.commen { + list-style-type:none; +} +.commen li { + padding:10px 0; +} +.dark .p { + padding:10px 0; + border-bottom:1px solid rgb(82 82 82 / var(--tw-border-opacity)); + text-align:center; +} + +.p { + padding:10px 0; + border-bottom:1px solid #33300; + text-align:center; +} +.p1 { + padding:10px 0; +} +.ct { + margin-top:30px; + border:rgb(82 82 82 / var(--tw-border-opacity)) 1px solid; + border-radius:5px; + padding:15px; +} +.dark .b { + color:rgb(229 229 229 / var(--tw-text-opacity)); +} + +.b{color:#33300;} + +.au { + text-decoration:underline; + color:#dc2626; +} +.links a { + text-decoration:underline; + color:#dc2626; +} +.links { + margin-top:30px; +} +/*404页面 文章调用 2023.8.6*/ +.ct404 { + margin-top:-15px; + !important +} +.ct404 li { + padding:10px 0; +} +.ct404 li a:hover { + text-decoration:underline; + color:#dc2626; +} + +.p404 { + padding:10px 0; + border-bottom:1px solid rgb(82 82 82 / var(--tw-border-opacity)); +} + +/*新主题标识 2023.8.8*/ +.nwe{ + background-color: #dc2626; + border: 1px solid #dc2626; + color: #faf8f1 !important; + border-radius: 4px; + font-weight: 400; + padding: 2px 4px; + font-size: 12px; + margin: 0 .40rem 0 0; + position: relative; + top: -1px;} + +.comment-at{ + display:none; + color: #dc2626 !important; + background-color:transparent!important; +} + + +/*归档页面优化 2023.8.10*/ + +.no-line:hover{text-decoration:underline;} +.archive-date{background-color: #dc2626; + padding: 3px 7px;border-radius:10px;color:#fff;font-size:.75rem} +.gd-3{padding-bottom:15px} + +/*标题hover 原为4B9131 2024.1.7修改*/ +.ptitle:hover{ + color: #dc2626 !important; + text-decoration: underline; +} +/*标签hover*/ +#post-tag a:hover{color: #faf8f1 !important; + background-color:#dc2626!important; + border: 1px solid #dc2626!important; + border-radius: 1rem; +} + +/*评论内容背景 2023.8.23调整*/ +.dark .cm{ + background-color:rgb(13 17 23 / var(--tw-bg-opacity)) !important; + padding:10px; + border-radius: 15px; + margin-top:10px; +} +.cm { + padding:0px 0px; + border-radius: 15px;} + +/*评论区作者头像*/ +.aumg{ + border-radius: 999px; + border: 2px solid #dc2626; + padding:5px; + -webkit-transition:0.4s;-webkit-transition:-webkit-transform 0.4s ease-out;transition:transform 0.4s ease-out;-moz-transition:-moz-transform 0.4s ease-out; +} + +.aumg:hover{transform:rotateZ(360deg);-webkit-transform:rotateZ(360deg);-moz-transform:rotateZ(360deg);} + +/*上一篇下一篇 2023.8.14*/ + +.shangxia{ +padding: 1.5rem; +border-radius: 30px; +margin-top: 30px; +clear: both; +overflow: hidden; +background-color: #faf8f1; +border:1px solid #dc2626; +} + +.dark .shangxia{ + background-color: #1d1d1e; + +} +.shang{ + float: left; + width: 50%; + border-right-width: 2px; + border-color: rgb(82 82 82 / var(--tw-border-opacity)); + text-align: left; +} +.shangxia a:hover{ + text-decoration: underline; + color: #dc2626; +} +.xia{float:right; + width: 50%; + text-align: right; +} + +/*评论区顶部优化*/ +.comment_ding{ +text-align: center; +margin-top: -40px; +padding: 0; +-webkit-box-sizing: border-box; +box-sizing: border-box; +outline: 0; +} + +.comment_ding h2 { + display: inline-block; +padding: 20px 110px 30px; +font-size: 18px; +color: var(--routine); +background: url(https://qcm.xgsd.cc/pic/left.png) 0/90px auto,url(https://qcm.xgsd.cc/pic/right.png) 100%/90px auto; + background-repeat: repeat, repeat; +background-repeat: no-repeat; +-webkit-filter: grayscale(1); +filter: grayscale(1);} + +/*评论区回复字样优化 2023.8.15*/ + +.huifu{ + background-color: transparent !important; + color: #dc2626 !important; +} + +/*隐私评论 2023.8 18*/ +span.yspl { background: repeating-linear-gradient(145deg,#f2f2f2,#f2f2f2 15px,#faf8f1 0,#faf8f1 30px) !important; display: block; padding: 8px; color: #777; border-radius: 5px; margin: 5px 0 0; text-align: center;} + +.dark span.yspl{background: repeating-linear-gradient(145deg,#1c1c1c,#1c1c1c 15px,#333 0,#333 30px) !important;color: rgb(156 163 175 / var(--tw-text-opacity)) !important;} + + + +/*区域和设备显示css*/ +.xq{color:#999999;} +.dark .xq{color:#faf8f1;opacity:0.5;} +.dark .pl{opacity:1 !important;color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +.pl{color:#333;opacity:1 !important;} +.nav{margin: 0 auto;} +.tx{ + border-radius:999rem !important; + border: 2px solid #dc2626; + padding: 5px; +} + +.tm{color:#dc2626 !important;} +.tm-ca{color:#dc2626 !important;} +.dark .tm-ca{color:#dc2626!important;} +.shuoshuo-link-color a{color:#333 !important;} + +/*评论区上方登录提示 2023.8.28*/ +.tipspl .btn{ + margin: 15px 7.5px 0; + position: relative; + display: inline-block; + color: #faf8f1 !important; + background-color: #dc2626 !important; + text-decoration: none !important; + border-radius: 1rem; + padding: 10px 20px; + font-size: 12px; +} +.tppl{padding:15px;} +.tipspl {text-align: center;display: block;} +.tipspl img{margin:0 auto;} + +.tipspl img{-webkit-transition:0.4s;-webkit-transition:-webkit-transform 0.4s ease-out;transition:transform 0.4s ease-out;-moz-transition:-moz-transform 0.4s ease-out;} +.tipspl img:hover{transform:rotateZ(360deg);-webkit-transform:rotateZ(360deg);-moz-transform:rotateZ(360deg);} + + +.tepasspostpl { + padding: 10px; + position: relative; + margin-bottom: 40px; + border-radius: 30px; + min-height: 65px; + background-color:#faf8f1; +} +.dark .tepasspostpl {background-color: inherit;} + +/*nav css优化 2023.8.29日*/ +.nav a:hover{background-color:#dc2626 !important;} + /*首页二字hover设定 2023.9.3*/ +/*评论表情 2023.8.29 https://fantao.me/7.html#comment-367*/ + +.OwO{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;} +.OwO.OwO-open .OwO-body{display:block} +.OwO.OwO-up .OwO-body{top:inherit;bottom:21px;border-radius:4px 4px 4px 0} +.OwO.OwO-up .OwO-body .OwO-bar .OwO-packages li:nth-child(1){border-radius:0} +.OwO.OwO-up.OwO-open .OwO-logo{border:1px solid #ddd;border-radius:0 0 4px 4px;border-top:none;} +.OwO .OwO-logo{position:relative;display:inline-block;cursor:pointer;box-sizing:border-box;z-index:2;} +.OwO .OwO-logo:hover span{display:inline-block;-webkit-animation:a 5s infinite ease-in-out;animation:a 5s infinite ease-in-out} +.OwO .OwO-body{display:none;position:relative;;max-width:400px;background:#faf8f1;border:1px solid #ddd;z-index:10000;border-radius:0 4px 4px 4px;-webkit-box-shadow: 0 2px 6px 0 rgba(114,124,245,.5);box-shadow: 0 2px 6px 0 rgba(114,124,245,.5);} +.OwO .OwO-body .OwO-items{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:none;padding:10px;margin:0;overflow-y:scroll;font-size:0} +.OwO .OwO-body .OwO-items .OwO-item{list-style-type:none;background:#f7f7f7;padding:5px 10px;border-radius:5px;display:inline-block;font-size:12px;line-height:14px;margin:0 10px 12px 0;cursor:pointer;-webkit-transition:.3s;transition:.3s} +.OwO .OwO-body .OwO-items .OwO-item:hover{background:#eee;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-animation:a 5s infinite ease-in-out;animation:a 5s infinite ease-in-out} +.OwO .OwO-body .OwO-items-emoji .OwO-item{font-size:20px;line-height:19px} +.OwO .OwO-body .OwO-items-image .OwO-item{max-width:calc(25% - 10px);box-sizing:border-box} +.OwO .OwO-body .OwO-items-image .OwO-item img{max-width:100%} +.OwO .OwO-body .OwO-items-show{display:block} +.OwO .OwO-body .OwO-bar{width:100%;height:30px;border-top:1px solid #ddd;background:#faf8f1;border-radius:0 0 4px 4px;color:#444} +.OwO .OwO-body .OwO-bar .OwO-packages{margin:0;padding:0;font-size:0} +.OwO .OwO-body .OwO-bar .OwO-packages li{list-style-type:none;display:inline-block;line-height:30px;font-size:14px;padding:0 10px;cursor:pointer;margin:0} +.OwO .OwO-body .OwO-bar .OwO-packages li:nth-child(1){border-radius:0 0 0 3px} +.OwO .OwO-body .OwO-bar .OwO-packages li:hover{background:#eee} +.OwO .OwO-body .OwO-bar .OwO-packages .OwO-package-active{background:#eee;-webkit-transition:.3s;transition:.3s} +.OwO-jio{position: absolute;top: -10px;left: 10px;width: 0;height: 0;border-left: 10px solid transparent;border-right: 10px solid transparent;border-bottom: 10px solid #ddd;} +.OwO-jio:before{content: '';display: block;width: 0;height: 0;border-left: 8px solid transparent;border-right: 8px solid transparent;border-bottom: 8px solid #faf8f1;position: absolute;left: -8px;top: 2px;} +img.biaoqing {display: inline-block;height: 3em;vertical-align: center;margin-top: -2px;} +.OwO.OwO-open {margin-top: .5rem;} + +.pltj{float:left;clear:both;} +/*评论区输入状态下css边框css优化*/ +input:focus {outline: 0px solid #333!important;} +textarea:focus {outline: 0px solid #333!important;} +input,textarea{background-color:#faf8f1!important;} +.pltz input::placeholder,textarea::placeholder { + opacity:1; + color:rgb(156 163 175 / var(--tw-text-opacity)) !important; +} +.ICON{COLOR:#dc2626;} +.ptitle{font-weight:600;}/** 原无 2024.1.7新增color*/ +.dark .line-clamp-2{COLOR:rgb(156 163 175 / var(--tw-text-opacity))!important;} +.line-clamp-2{COLOR:#333 !important;} + +.dark.pl:hover{color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +.ft{color:#333!important;} +.dark .ft{color:rgb(156 163 175 / var(--tw-text-opacity))!important;} + +/*付费可见区域*/ +#tepassPost, #tepassVip, #tepassReward { + text-align: center; +} + +.tepasspost img{ + border-radius: 30px; + max-width: 100%; + margin: 0 auto; + background-color: #0d1117; + border: 0px dashed #dc2626!important; + padding: 0px!important; +} +.tepasspost { + padding: 30px 0px 5px; + margin: 15px 0; + position: relative; + border-radius: 15px; + min-height: 65px; + background-color: inherit!important; +} + +.tepass_top_left { + position: absolute; + top: 25px; + left: 10px; + font-size: 14px; + color: #dc2626; +} +.tepass_top_right { + position: absolute; + top: 25px; + color: #dc2626; + right: 10px; +} +.tepass_top_right img { + height: 15px; + margin: 0 !important; + border: 0px solid #333 !important; + padding: 0px !important; +} +.tepass_top_right a{ + float: left; + line-height: 20px; + margin: 0 7px 0 0; + font-size: 14px; + text-decoration: none; +} +.tepass_content { + word-break: break-all; + text-align:left; + font-size:16px; + color:inherit; + overflow: hidden; + white-space:pre-line; + opacity:1 !important; +} +.tepass_content blockquote {margin: 0 0 20px; + padding: 1em 10px;} + +.dark .tepass_content blockquote {margin: 0 0 20px; + padding: 1em 10px; + line-height: 1;} + +.tepass_content p{ + margin-bottom: 16px !important; +} +/* 付款方式选择 */ +.feetype{ + width: 250px; + height: 50px; + display: flex; + justify-content: space-around; + margin: 5px auto 5px; +} +.feetype input[type="radio"]{ + display: none; +} +.feetype label{ + cursor: pointer; +} +.feetype label img{ + width: 60px; + float: left; + margin: 0 !important; + box-shadow: none !important; +} +.feetype label span{ + line-height: 50px; + float: left; +} +.cl {clear:left;} +/* 价格 */ +.tepass_price { + display: table; + margin: 5px auto 5px !important; + font-size: 14px !important; + line-height: 20px !important; + color: #6d6d6d; + border: 1px dashed #bfbfbf; + padding: 3px 9px; + border-radius: 5px; +} +.tepass_price_for_vip { + font-size: 14px !important; + line-height: 20px !important; + color: #dc2626; +} +.tepass_price_for_eternal { + margin: 0 0 0 10px !important; + font-size: 16px !important; + line-height: 20px !important; + color: #dc2626; + display: inline-block; +} +/* 按钮 */ +#verifybtn { + border-style: none; + outline: none; + border-radius: 5px; + width: 80px; + height: 30px; + background-color: #dc2626; + line-height: 30px; + text-align: center; + color: #faf8f1; + font-size: 14px; + padding: 0 5px; + margin: 10px 0 10px 0!important; + cursor: pointer; +} +#verifybtn:active{ + background-image: linear-gradient(#ea584d,#ea584d); +} +/* 提示 */ +.pay_tips{ + font-size: 12px; + color: #90949C; +} +/*弹出二维码*/ +#qrcode_box { + z-index: 10000; + position: absolute; + left: 50%; + top: -75px; + width: 240px; + margin-left: -120px; + display: none; + min-height: 320px; + background-color: #F5F5F5; + box-shadow: 0 0 12px 4px rgba(0,0,0,.04); + border-radius: 5px; + text-align: center; + box-sizing: border-box; +} +#qrcode_box dtt img.qr-logo { + display: inline-block; + margin: 0; + padding-top: 15px; + width: 120px; + text-align: center; + background-color: transparent; +} + +#qrcode_box img{ + opacity: 1; + border-radius: 0px; + background-color: transparent; + margin:0 auto; + vertical-align:baseline; + border:0PX solid #fff; +} +#qrcode_box dll { + width: 240px; + border-radius: 8px; + overflow: hidden; +} +#qrcode_box dtt { + text-align: center; + line-height: 42px; + font-weight: bold; + font-size: 15px; + display: block; +} +.qrcode_tips{ + font-size: 14px; + line-height: 21px; +} +.qrcode_text { + position: absolute; + top: 250px; + left: 0; + width: 240px; + height: 40px; + border-radius: 5px; + border-style: none; + line-height: 40px; + background-color: #faf8f1fff; + text-align: center; + color: #333; + font-size: 14px; +} +.qrcode_money { + font-size: 14px; + padding-top: 10px; +} +.qrcode_money span { + color: red; + font-weight: bold; +} +.alipay_but{ + cursor: pointer; +} +#qrcode_box ddd { + padding: 6px; + margin: 0; + font-size: 12px; +} +#bgdiv { + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; + visibility: hidden; + background: #333; + z-index: 9999; +} + +/* 打赏样式 */ +#reward_from { + max-width: 100px; + height: 28px; + text-align: center; +} +#reward_money { + color: #999; + height: 28px; +} +#div_reward { + display: none; +} +.btn_reward { + padding: 15px 15px; + cursor: pointer; + text-align: center; + white-space: nowrap; + border-radius: 2px; + font-size: 30px; + font-weight: 400; + background-color: #f1787f; + color: #faf8f1; + display: block; +} + +.btn_reward:hover{color:#faf8f1;background-color:#dc2626!important;} +.reward_list { + text-align: center; + -ms-flex-flow: wrap; + flex-flow: wrap; + margin: 15px auto; +} +.reward_more{ + width: 35px; + height: 35px; + font-size: 12px; + line-height: 35px; + text-align: center; + border-radius: 50%; + cursor: pointer; + background: #ffe300; +} + +.reward_clusr { + padding-right: 0; +} +.reward_clusr img{ + display: inline-block; + border-radius: 50%; + width: 35px; + height: 35px; + margin: 0 10px 10px 0; +} +.tips { + text-align: center; + display: block; +} +.tips a{ + text-decoration:none; +} +nocompress{width: 100%;} +/*打赏结束*/ + +.qrcode_bottom { + border-radius: 0 0 .3125em .3125em; + width: 100%; + background: #33465a; + color: #f2f2f2; + padding: 15px 0px; + text-align: center; + font-size: 14px; + margin-top: 10px; +} +.qrcode_bottom.alipay { + background: #1977ff; +} +.qrcode_bottom.wxpay { + background: #08bb21; +} +select { + max-width: 100px; + height: 28px; + float: initial; + padding-left:15px; +} +#expire_time { + font-size: 20px; + color: white; +} +#expire_time span { + padding:0 10px; + background-color: black; +} + +.tips .btn{ + margin: 15px 7.5px 0; + position: relative; + display: inline-block; + color: #faf8f1 !important; + background-color: #dc2626 !important; + text-decoration: none !important; + border-radius: 1rem; + padding: 10px 20px; + font-size: 12px; +} +.btn a{transition: color .25s,background-color .25s,border-color .25s;} +.tp{ + padding: 30px 15px; +} + +/*归档*/ +.gdbq{margin:0 auto;color:#333;} +.gdfl{padding: 1rem 0px;border-radius: 10px;margin-top:-10px;color: #333!important; + background-color: #faf8f1;border: 1px solid rgba(0, 0, 0, 0)!important;} +.dark .gdfl{ background-color: inherit !important;} +.gdwz a:hover{color:#dc2626!important;} + +/*评论区作者昵称*/ +.author-name{color:#333!important;} +.dark .author-name{color:rgb(156 163 175 / var(--tw-text-opacity)) !important;} + +/*隐私评论勾选框css*/ +.ypk{color:#333!important;} +.dark .ypk{color:rgb(156 163 175 / var(--tw-text-opacity)) !important;} +.line-clamp-21{COLOR: #333 !important;} + +/*置顶*/ +.zd {margin-top:40px;border-radius: 1.25rem;padding:1.25rem;border: 1px solid rgba(0, 0, 0, 0); + background-color: #eee;} +.zw{padding:1.25rem;} +.dark .zd{border: 0px solid #dc2626!important;background-color: rgb(13 17 23 / var(--tw-bg-opacity)) !important;} +.zdtitle{font-weight:700;text-align:center;font-size: 1.3rem;margin: 10px 0;overflow: hidden;line-height: 1.75rem;} +.left{float:left;} +.right{float:right;} +.inhui{overflow:hidden;border: 1px solid rgba(0, 0, 0, 0);max-width:1410px;} +.zr{font-size: 1.3rem;line-height: 1.75rem;display: inline-block;overflow:hidden;border-width: 0 0 2px;color:#005eeb; + border-style: solid;border-image: linear-gradient(90deg,#dc2626,rgba(255,73,44,0)) 1;} + .jasmine-primary-color{color:#333!important;} +.zk{position:relative;display:block;width:50%;border: 1px solid rgba(0, 0, 0, 0);background-color: #faf8f1;padding: 1.3rem;border-radius:1.25rem;margin:10px 0 0 ;} +.dark .zk{border: 1px solid rgba(0, 0, 0, 0);background-color:#1d1d1e;margin:10px auto 0!important;border: 0px solid #dc2626!important;} +.duo{font-size: 1rem;display:inline-block;line-height: 1.75rem;font-weight:600;position:absolute;right:15px;} +.inhui a:hover{COLOR:#dc2626!important;} +.dark .zd:hover{background-color: rgb(13 17 23 / var(--tw-bg-opacity)) !important;} +.inhui li a {word-break: normal;overflow:hidden;display:block;text-overflow: ellipsis;white-space: nowrap;} +.inhui li {width:100%;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;} +.dark .inhui{overflow:hidden;} +.mbh{border-radius:30PX!important;overflow:hidden;} /*手机导航菜单边框*/ +.zk:hover{background-color:#eee;} +.dark .zk:hover{background-color: rgb(13 17 23 / var(--tw-bg-opacity)) !important;border: 0px solid #dc2626 !important;} +.zd:hover{background-color:#eee;} +.line-clamp-2:hover{COLOR:#dc2626!important;} +.sy{background-color:transparent;COLOR:inherit;} +.tb{COLOR:#dc2626;} +.top{position: fixed; bottom: 18em; left: 50%; margin-left: 400px;} +.btop{COLOR:#dc2626;} +.btop:hover{COLOR:#dc2626;background-color:transparent!important;} +.dark .btop{COLOR:#dc2626;} +@media screen and (max-width:767px) { +#bber-talk{display:none!important;} +.top{position:fixed;bottom:19rem;right:1rem;} /**返回顶部手机端**/ +.zk{width:100%;word-break: normal;overflow:hidden;display:block;text-overflow: ellipsis;white-space: nowrap;} +.markdown-body img {border: 0px dashed #dc2626;padding: 0px;} +.markdown-body{background-color:#eee;} +.dark.jasmine-body{background-color:rgb(10 12 25 / var(--tw-bg-opacity));padding:10px; +} +.jasmine-container{border:0px solid #fff;background-color:#eee;} +.dark .jasmine-container{background-color:rgb(10 12 25 / var(--tw-bg-opacity));} +.mb{display:none;} +.zd,.zk{background-color:#eee;} +.border-stone-100{border-color: #dc2626;} +.rounded:hover{background-color:#eee!important;padding:0;overflow:hidden;} +.ft{padding-top:5px;margin:0 50px;} +.pb-10 {padding-bottom: 0rem;} +.comment_ding{display:none;} +.pl{padding-top:0rem; display: flex; + justify-content: center; + align-items: center;} +.revis{display:none;} +.btn_reward{display:none!important;} +.dark .jasmine-body{margin:.5rem;} +.yc{display:none;} +.dark .yj{background-color:rgb(10 12 25 / var(--tw-bg-opacity))!important;} +.d-icon{display:none;} +} +.jlq{margin-top:30px;} +/*mb为手机页面CSS专用 2023.12.26*/ +/*注册会员标识 2023.10.28*/ +.aue{ + line-height: 9px; + font-size: 9px; + background-color: #dc2626; + border: 1px solid #dc2626; + color: #faf8f1 !important; + border-radius: 4px; + padding: .3px 3px .5px; + font-weight: 400; + position: relative; + top: -1px;} + + /*首页标题hover 2023.11.10*/ +.font-medium:hover{COLOR:#dc2626;} + +/*底部自定义内容*/ +.about { + display:block; + padding:14px 0 14px; + border-top:1px dashed #dc2626; + margin-top:25px; + max-width:100%; + margin-bottom:-32px; + font-size:15px; + color: #333; +} +.about-avatar { + float:left +} +.about-nav-links { + float:right +} +.avatar { + display:inline; + width:23px; + height:23px +} +.about-saying { + vertical-align:top +} +.about [class*=" icon-"], +.about [class^=icon-] { + margin-right:2px +} +.about .nav-icons { + margin:8px auto; + text-align:center +} + +/*图说CSS 2023.12.17*/ +.ts{border: 1px solid rgba(0, 0, 0, 0);} +.ts-box {position: relative;overflow: hidden;} +.ts-box:hover{opacity:0.8;} +.ts-box a:hover{text-decoration:none;color:#fff!important;} +.ts-box span.ts-title,.ts-box span.ts-time{padding:0px 8px;display:none;color:#fff;animation: fadeIn 1s;font-size: 1.8rem;font-weight: 700;}/* COLOR原为#fff,2024.17修改为4B9131*/ +.ts-box .ts-info {position:absolute;left:4rem;right:4rem;top:6.5rem;bottom:7rem;text-align:center;transition:all .3s ease-in-out;transform:translateY(1rem);} +.ts-box:hover span.ts-title,.ts-box:hover span.ts-time{display:block !important;} + +/*最近访客 2023.12.17*/ + +.revis{margin:0 auto;} +.revis li{list-style:none;border-radius:9999px;} +.revis li img{border-radius:9999px;padding:5px;border: 2px solid #dc2626;-webkit-transition:0.4s;-webkit-transition:-webkit-transform 0.4s ease-out;transition:transform 0.4s ease-out;-moz-transition:-moz-transform 0.4s ease-out;} +.revis li img:hover{transform:rotateZ(360deg);-webkit-transform:rotateZ(360deg);-moz-transform:rotateZ(360deg);} + +/*rss页面 2023.12.22*/ + +.rss{margin-top:10px;} +.rss h4:hover{COLOR:#dc2626!important;} +.rss-entry { + position:relative; + margin-bottom:24px; + padding:12px; + background:rgb(255.255.255); + border-radius:1.25rem; + transition:transform .1s; + border: 1px solid rgba(0, 0, 0, 0); +} +.rss-entry:hover{border:1px solid #dc2626;background-color:#eee;} +.dark .rss-entry{background-color: rgb(13 17 23 / var(--tw-bg-opacity)) !important;border:0px solid #fff;COLOR: rgb(156 163 175 / var(--tw-text-opacity)) !important;} +.rss-entry a{border-bottom-width:0px!important;padding-top:0px!important;} +.rss-entry h4{margin-top:0px!important;color:rgb(3 3 3 / var(--tw-text-opacity));font-weight:600;font-size:1.25rem;} +.dark .rss-entry h4{COLOR: rgb(156 163 175 / var(--tw-text-opacity)) !important;} +.dark .rss-entry a{COLOR: rgb(156 163 175 / var(--tw-text-opacity)) !important;} +.rss-entry .rss-header { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + overflow: hidden; +} + +.rss-content { + margin: 8px 0; + color: #333 !important; + font-size: 14px; + line-height: 1.6; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +.dark .rss-content{COLOR: rgb(156 163 175 / var(--tw-text-opacity)) !important;} + +.rss-footer { + COLOR: #333 !important; + font-size: 14px; + display: flex; +} +.dark .rss-footer{COLOR: rgb(156 163 175 / var(--tw-text-opacity)) !important;} +.rss-footer .flex-item { + margin: 0 5px; +} +.rss-footer img { + width: 16px; + height: 16px; + border-radius: 50%; + padding:0px; + margin-top:2px; + border: 0px solid #fff!important; +} +.f{border-bottom: 1px dashed #dc2626 !important;} +.btt a{border-bottom:none!important;padding:-10px 0;font-weight:700;} + +#post-tag a::before { + content: '#'; + margin-right: 2px; + color: #FFF; +} + +/**.markdown-body a:before { + content: "\e683"; + width: 18px; + font-family: "iconfont"; + height: 18px; + background-size: 18px 18px; + display:inline-block!important; + margin-bottom:-3px; + justify-content: center; + align-items: center; + }**/ + +.tepasspost a::before { + content: ""; + width: 18px; + height: 18px; + background: url(https://www.xigeshudong.com/link.png) no-repeat; + background-size: auto; + background-size: 18px 18px; + display: inline-block !important; + margin-bottom: -3px; + justify-content: center; + align-items: center; +} + +.tepasspost .tips a::before { + content: ""; + width: 0px; + height: 0px; + background: url(https://www.xigeshudong.com/link.png) no-repeat; + background-size: auto; + background-size: 0px 0px; + display: inline-block !important; + margin-bottom: -3px; + justify-content: center; + align-items: center; +} +.vc{color:#dc2626;height:12px;} +.pltz{border-bottom:1px dashed #dc2626;padding-bottom:15px;} +.author a::before { + content: ""; + width: 0px; + height: 0px; + background: url(https://www.xigeshudong.com/link.png) no-repeat; + background-size: auto; + background-size: 0px 0px; + display: inline-block !important; + margin-bottom: -3px; + justify-content: center; + align-items: center; +} +.author ul li {list-style:none!important;} +.author li {list-style:none!important;} +.author .icon .iconfont{font-size:30px!important;padding-top:15px;} +.author .tipspl {margin:10px auto;} +.author .icon {margin:10px auto;} +.author-post-list{margin-bottom:10px;} +.author h3::before {margin-left:5px;} +.vc a{color:#dc2626!important;} +.dark .vc a{text-decoration:none;color:#dc2626!important;} +.markdown-body p em{box-shadow: 0 -1rem 0 rgba(255, 255, 0, 0.3) inset; +} + +/* memo专用css */ + +article.memo-wrapper { + padding: 15px; + border: 1px solid darkgray; + margin: 20px 0px; +} + +.memo-content-wrapper { + line-height: 1.6; + font-size: 17px; + word-wrap: break-word; +} + +.memo-resource img { + width: auto; + max-width: 100%; +} + +span.memo_tag { + color: cornflowerblue; +} + +.memo-bottom { + margin: 50px 0px; + text-align: center; +} + +.memo-top-wrapper { + color: gray; +} +.d-icon{color:#dc2626!important;} +.dark .d-icon{color:#dc2626 !important;} + +/* memos首页调用专用css */ +#bber-talk { + display: flex; + height: 45px; + line-height: 35px; + padding: 5px 15px; + margin:15px 0px 5px; + border-radius: 1rem; + box-sizing: border-box; + background-color: #eee; + color:#333; + font-size:.875rem; +} +#bber-talk .iconfont{font-size:12px!important;} +.dark #bber-talk { background-color: rgb(13 17 23 /1) ;color:#fff;opacity:0.6;} +.talk-list { + list-style: none; + margin: 0; + padding-left: 5px; + height: 35px; + flex: 1 1 auto; + overflow: hidden; + cursor: pointer; +} +.talk-list li { + width: 100%; + margin-bottom: 10px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.talk-list li .datetime { + color: #333; + margin-left: 1px; +} + +.dark .talk-list li .datetime {color:#fff;} + +/*编辑器插件文章卡片css调整 2024.2.4*/ +.x-post .media-content{margin-top:-20px;margin-bottom:25px;} +.x-post{background:#eee!important;border-top:1px solid #dc2626;} +.dark .x-post{background: rgb(13 17 23 /1)!important;} +.x-post .text-content .content{font-size:16px!important;} +.x-title-text{color:#333!important;font-weight:600!important;font-size:16px!important;} +.dark .x-title-text{color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +.x-title-text::before, .x-title-text::after{background-color:#dc2626!important;} + + /* AI摘要 CSS优化 2024.2.17*/ + .post-TianliGPT{background-color:#eee!important;border-width:0px!important;} + .tianliGPT-explanation{background-color:#faf8f1!important;border-width:0px;} +.x-post .text-content .content{margin:10px auto!important;} +.dark .post-TianliGPT{background-color:rgb(13 17 23 / var(--tw-bg-opacity)) !important;border-width:0px!important;} +.dark .tianliGPT-explanation{background-color:#1d1d1e!important;border-width:0px;} +.tianliGPT-title-icon svg path { + fill: #dc2626; +} + + /* 首页登录判断 2024.3.3*/ + + .dl a{color:#dc2626;} + + /* 积分下载 CSS 2024.3.6*/ + .jfdn{width:100%;display:block;margin:10px auto 30px;text-align:center;} + .dn{background-color:#dc2626;padding:10px 30px;border-radius:12px;color:#fff;} +.tp {background-color: #eee;border-radius: 20px;margin-bottom: 20px;} +.dark .tp {background-color:rgb(13 17 23 / var(--tw-bg-opacity)) !important;} + + /* AI搜索 CSS 2024.4.2*/ + + #postChat_button{ + background-color:#dc2626!important;border-radius:996px!important; + } + .search_logo{display:none!important;} + .chat_logo_text{display:none!important;} + + + /* 图片横排CSS优化 CSS 2024.4.18*/ + + .dark .flexphoto { + display: flex; + margin: 0 0px 5px; + border-radius: 10px; + overflow:hidden;} + +.dark .flexphoto figure { + margin: 0.5px!important; + flex: 1!important; +} + +.dark .flexphoto figure img{ + border-radius:0px!important; +} + + /* 导航下横线CSS优化 CSS 2024.6.25*/ +.divline { + background: #ddd; + background: -webkit-gradient(linear, left top, right top, from(rgba(255,255,255,0)), color-stop(#dc2626), to(rgba(255,255,255,0))); + background: -webkit-linear-gradient(left, rgba(255,255,255,0), #dc2626, rgba(255,255,255,0)); + background: linear-gradient(to right, rgba(255,255,255,0),#dc2626, rgba(255,255,255,0)); + height: 1.5px; + margin: 0 0; +} + +.dark .divline { + background: #ddd; + background: -webkit-gradient(linear, left top, right top, from(rgba(255,255,255,0)), color-stop(#dc2626), to(rgba(255,255,255,0))); + background: -webkit-linear-gradient(left, rgba(255,255,255,0), #dc2626, rgba(255,255,255,0)); + background: linear-gradient(to right, rgba(255,255,255,0),#dc2626, rgba(255,255,255,0)); + height: 1.5px; + margin: 0 0; +} + +.nav-item a:hover{color:#dc2626;} +.archive-item a:hover{text-decoration:none;} +#reader-wall h2 {text-align:center;padding:10px;background-color:#dc2626;color:#fff;max-width:400px;margin:10px auto ;border-radius:999px;} +#history-t h2 {text-align:center;padding:10px;background-color:#dc2626;color:#fff;max-width:200px;margin:10px auto 0px;border-radius:999px;} + +.cat-hover{background-color:#dc2626;color:#fff!important;} +.cat-search{padding:.7rem 1rem .3rem;border-radius: 9999px;} +.cat-search-input{border-radius:9999px;border:1px solid #dc2626;} + +.archive-year-title::before{ + content: '|'; + margin-right: 10px; + color: #dc2626; + background: #dc2626; + border-radius: 5px; +} +.year-list h2{ + font-size: 1.2rem!important; + line-height: 1.7rem!important; + background-color: #dc2626; + padding: 3px 7px; + border-radius: 999px; + color: #fff!important; + width:150PX; + text-align: center; +cursor: s-resize; +} + +.dark .year-list h2{ + color: #fff!important; +} +/* 视频底栏 2024.11.24*/ +.control-bar-bottom{display:none!important;} +/**夜间模式下天气背景***/ +.dark .article-weather-compact {background:rgb(10 12 25 / var(--tw-bg-opacity))!important;color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +/**夜间模式下编辑历史 2025.12.06**/ +.dark .edit-history-header{color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +/**编辑历史 方向图标;***/ +.dark .edit-history-toggle .icon{color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +/**回想夜间模式***/ +.dark .thoughts-header{color:rgb(156 163 175 / var(--tw-text-opacity))!important;} +/**文章短代码第一个图书上边距 2025.12.09**/ +.book-card:first-child{margin-top:-15px;} diff --git a/assets/dist/tianli_gpt.css b/assets/dist/tianli_gpt.css new file mode 100644 index 0000000..0461958 --- /dev/null +++ b/assets/dist/tianli_gpt.css @@ -0,0 +1,346 @@ +:root { + --heo-white: #fff; + --heo-white-op: rgba(255, 255, 255, 0.2); + --heo-black: #000; + --heo-black-op: rgba(0, 0, 0, 0.2); + --heo-none: #00000000; + --heo-gray: #999999; + --heo-gray-op: #9999992b; + --heo-vip: #e5a80d; + --heo-main: var(--heo-theme); + --heo-main-op: var(--heo-theme-op); + --heo-main-op-deep: var(--heo-theme-op-deep); + --heo-main-none: var(--heo-theme-none); + --heo-shadow-theme: 0 8px 12px -3px var(--heo-theme-op); + --heo-shadow-blackdeep: 0 2px 16px -3px rgba(0, 0, 0, .15); + --heo-shadow-main: 0 8px 12px -3px var(--heo-main-op); + --heo-shadow-blue: 0 8px 12px -3px rgba(40, 109, 234, .20); + --heo-shadow-white: 0 8px 12px -3px rgba(255, 255, 255, .20); + --heo-shadow-black: 0 0 12px 4px rgba(0, 0, 0, .05); + --heo-shadow-yellow: 0px 38px 77px -26px rgba(255, 201, 62, .12); + --heo-shadow-red: 0 8px 12px -3px #ee7d7936; + --heo-shadow-green: 0 8px 12px -3px #87ee7936; + --heo-logo-color: linear-gradient(215deg, #4584ff 0%, #cf0db9 100%); + --heo-snackbar-time: 5s; + --heo-theme: #f15a22 + --heo-theme-op: #4259ef23; + --heo-theme-op-deep: #4259efdd; + --heo-theme-none: #4259ef01; + --heo-blue: #425AEF; + --heo-red: #f04a63; + --heo-pink: #FF7C7C; + --heo-green: #57bd6a; + --heo-yellow: #c28b00; + --heo-yellow-op: #d99c001a; + --heo-orange: #e38100; + --heo-fontcolor: #363636; + --heo-background: #f7f9fe; + --heo-reverse: #000; + --heo-maskbg: rgba(255, 255, 255, 0.6); + --heo-maskbgdeep: rgba(255, 255, 255, 0.85); + --heo-hovertext: var(--heo-main); + --heo-ahoverbg: #F7F7FA; + --heo-lighttext: var(--heo-main); + --heo-secondtext: rgba(60, 60, 67, 0.8); + --heo-scrollbar: rgba(60, 60, 67, 0.4); + --heo-card-btn-bg: #edf0f7; + --heo-post-blockquote-bg: #fafcff; + --heo-post-tabs-bg: #f2f5f8; + --heo-secondbg: #f1f3f8; + --heo-shadow-nav: 0 5px 12px -5px rgba(102, 68, 68, 0.05); + --heo-card-bg: #fff; + --heo-card-bg-op: var(--heo-black-op); + --heo-card-bg-none: rgba(255, 255, 255, 0); + --heo-shadow-lightblack: 0 5px 12px -5px rgba(102, 68, 68, 0.00); + --heo-shadow-light2black: 0 5px 12px -5px rgba(102, 68, 68, 0.00); + --heo-card-border: #e3e8f7; + --heo-shadow-border: 0 8px 16px -4px #2c2d300c; + --style-border: 1px solid var(--heo-card-border); + --style-border-always: 1px solid var(--heo-card-border); + --style-border-hover: 1px solid var(--heo-main); + --style-border-hover-always: 1px solid var(--heo-main); + --style-border-dashed: 1px dashed var(--heo-theme-op); + --style-border-forever: 2px solid var(--heo-main); +} + +[data-theme=light] { + --heo-theme: #425AEF; + --heo-theme-op: #4259ef23; + --heo-theme-op-deep: #4259efdd; + --heo-theme-none: #4259ef01; + --heo-blue: #425AEF; + --heo-red: #f04a63; + --heo-pink: #FF7C7C; + --heo-green: #57bd6a; + --heo-yellow: #c28b00; + --heo-yellow-op: #d99c001a; + --heo-orange: #e38100; + --heo-fontcolor: #363636; + --heo-background: #f7f9fe; + --heo-reverse: #000; + --heo-maskbg: rgba(255, 255, 255, 0.6); + --heo-maskbgdeep: rgba(255, 255, 255, 0.85); + --heo-hovertext: var(--heo-main); + --heo-ahoverbg: #F7F7FA; + --heo-lighttext: var(--heo-main); + --heo-secondtext: rgba(60, 60, 67, 0.8); + --heo-scrollbar: rgba(60, 60, 67, 0.4); + --heo-card-btn-bg: #edf0f7; + --heo-post-blockquote-bg: #fafcff; + --heo-post-tabs-bg: #f2f5f8; + --heo-secondbg: #f1f3f8; + --heo-shadow-nav: 0 5px 12px -5px rgba(102, 68, 68, 0.05); + --heo-card-bg: #fff; + --heo-card-bg-op: var(--heo-black-op); + --heo-card-bg-none: rgba(255, 255, 255, 0); + --heo-shadow-lightblack: 0 5px 12px -5px rgba(102, 68, 68, 0.00); + --heo-shadow-light2black: 0 5px 12px -5px rgba(102, 68, 68, 0.00); + --heo-card-border: #e3e8f7; + --heo-shadow-border: 0 8px 16px -4px #2c2d300c; + --style-border: 1px solid var(--heo-card-border); + --style-border-always: 1px solid var(--heo-card-border); + --style-border-hover: 1px solid var(--heo-main); + --style-border-hover-always: 1px solid var(--heo-main); + --style-border-dashed: 1px dashed var(--heo-theme-op); + --style-border-forever: 2px solid var(--heo-main); +} + +[data-theme=dark], body.dark, body.dark-theme { + --heo-theme: #f2b94b; + --heo-theme-op: #f2b94b23; + --heo-theme-op-deep: #f2b94bdd; + --heo-theme-none: #f2b94b00; + --heo-blue: #0084FF; + --heo-red: #FF3842; + --heo-pink: #d44040; + --heo-green: #3e9f50; + --heo-yellow: #ffc93e; + --heo-yellow-op: #ffc93e30; + --heo-orange: #ff953e; + --heo-fontcolor: #F7F7FA; + --heo-background: #18171d; + --heo-reverse: #fff; + --heo-maskbg: rgba(0, 0, 0, 0.6); + --heo-maskbgdeep: rgba(0, 0, 0, 0.85); + --heo-hovertext: #0A84FF; + --heo-ahoverbg: #fff; + --heo-lighttext: var(--heo-theme); + --heo-secondtext: #a1a2b8; + --heo-scrollbar: rgba(200, 200, 223, 0.4); + --heo-card-btn-bg: #30343f; + --heo-post-blockquote-bg: #000; + --heo-post-tabs-bg: #121212; + --heo-secondbg: #30343f; + --heo-shadow-nav: 0 5px 20px 0px rgba(28, 28, 28, 0.4); + --heo-card-bg: #1d1e22; + --heo-card-bg-op: var(--heo-white-op); + --heo-card-bg-none: #1d1b2600; + --heo-shadow-lightblack: 0 5px 12px -5px rgba(102, 68, 68, 0.0); + --heo-shadow-light2black: 0 5px 12px -5px rgba(102, 68, 68, 0.0); + --heo-card-border: #3d3d3f; + --heo-shadow-border: 0 8px 16px -4px #00000050; + --style-border: 1px solid var(--heo-card-border); + --style-border-always: 1px solid var(--heo-card-border); + --style-border-hover: 1px solid var(--heo-theme); + --style-border-hover-always: 1px solid var(--heo-theme); + --style-border-dashed: 1px dashed var(--heo-theme-op); + --style-border-forever: 2px solid var(--heo-lighttext); +} + +/* AI */ +.post-TianliGPT { + background: var(--heo-secondbg); + border-radius: 12px; + padding: 12px; + line-height: 1.3; + border: var(--style-border-always); + margin: 16px 0; +} + +.dark .post-TianliGPT{background:#f15a22;border:none;} +.dark .tianliGPT-explanation{background:#f15a22;border:none;} +@media screen and (max-width: 768px) { + .post-TianliGPT { + margin-top: 22px; + } +} + +.tianliGPT-title { + display: flex; + color: #f15a22; + border-radius: 8px; + align-items: center; + padding: 0 12px; + cursor: default; + user-select: none; + position: relative; +} + +.tianliGPT-title-text { + font-weight: bold; + margin-left: 8px; + line-height: 1; +} + +.tianliGPT-explanation { + margin-top: 12px; + padding: 8px 12px; + background:#f15a22; + border-radius: 8px; + border: var(--style-border-always); + font-size: 15px; + line-height: 1.4; + display: flex; +} + +.tianliGPT-suggestions { + display: flex; + flex-wrap: wrap; +} + +.tianliGPT-suggestions .tianliGPT-suggestions-item { + margin-top: 12px; + padding: 8px 12px; + background: var(--heo-card-bg); + border-radius: 8px 8px 8px 0; + border: var(--style-border-always); + font-size: 15px; + line-height: 1.4; + display: flex; + width: fit-content; + margin-right: 12px; + cursor: pointer; + transition: 0.3s; +} + +.tianliGPT-suggestions .tianliGPT-suggestions-item:hover { + background: var(--heo-main); + color: var(--heo-white); +} + +.blinking-cursor { + background-color: var(--heo-main); + width: 10px; + height: 16px; + display: inline-block; + vertical-align: middle; + animation: blinking-cursor 0.5s infinite; + -webkit-animation: blinking-cursor 0.5s infinite; + margin-left: 4px; +} + +@keyframes blinking-cursor { + 0% { + opacity: 1; + } + + 40% { + opacity: 1; + } + + 50% { + opacity: 0; + } + + 90% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.tianliGPT-tag { + font-size: 16px; + color: #f15a22; + font-weight: bold; + border-radius: 4px; + margin-left: auto; + line-height: 1; + padding: 4px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s, background-color 0s; + position: absolute; + right: 12px; +} + +ins.adsbygoogle { + margin: 16px 0; + background: var(--heo-card-bg); + border-radius: 12px; + overflow: hidden; + border: var(--style-border-always); +} + +#tianliGPT-Toggle { + font-size: 12px; + background: var(--heo-lighttext); + color: var(--heo-card-bg); + padding: 4px; + border-radius: 4px; + margin-left: 6px; + transform: scale(0.8); + cursor: pointer; + transition: 0.3s; + font-weight: bold; +} + +#tianliGPT-Toggle:hover { + background: var(--heo-fontcolor); + color: var(--heo-card-bg); +} + +.tianliGPT-title-icon { + width: 20px; + height: 20px; +} + +.tianliGPT-title-icon svg { + width: 20px; + height: 20px; + fill: #f15a22; +} + +.tianliGPT-title-icon svg path { + fill: #f15a22; +} + +.tianliGPT-tag svg { + fill:#f15a22; +} + +@keyframes breathe { + 0% { + -webkit-transform: scale(.97); + -moz-transform: scale(.97); + -o-transform: scale(.97); + -ms-transform: scale(.97); + transform: scale(.97) + } + + 50% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1) + } + + 100% { + -webkit-transform: scale(.97); + -moz-transform: scale(.97); + -o-transform: scale(.97); + -ms-transform: scale(.97); + transform: scale(.97) + } +} + +.tianliGPT-tag.playing svg { + animation: 0.5s linear 0s infinite normal none running breathe; + transform-origin: center; + width: 20px; + height: 20px; +} \ No newline at end of file diff --git a/assets/dist/tianli_gpt.js b/assets/dist/tianli_gpt.js new file mode 100644 index 0000000..a75863e --- /dev/null +++ b/assets/dist/tianli_gpt.js @@ -0,0 +1,362 @@ +console.log("\n %c Post-Abstract-AI 开源博客文章摘要AI生成工具 %c https://github.com/zhheo/Post-Abstract-AI \n", "color: #fadfa3; background: #030307; padding:5px 0;", "background: #fadfa3; padding:5px 0;") + +function tianliGPT(usePjax) { + var tianliGPTIsRunning = false; + + function insertAIDiv(selector) { + // 首先移除现有的 "post-TianliGPT" 类元素(如果有的话) + removeExistingAIDiv(); + + // 获取目标元素 + const targetElement = document.querySelector(selector); + + // 如果没有找到目标元素,不执行任何操作 + if (!targetElement) { + return; + } + + // 创建要插入的HTML元素 + const aiDiv = document.createElement('div'); + aiDiv.className = 'post-TianliGPT'; + + const aiTitleDiv = document.createElement('div'); + aiTitleDiv.className = 'tianliGPT-title'; + aiDiv.appendChild(aiTitleDiv); + + const aiIcon = document.createElement('i'); + aiIcon.className = 'tianliGPT-title-icon'; + aiTitleDiv.appendChild(aiIcon); + + // 插入 SVG 图标 + aiIcon.innerHTML = ` + 机器人 + + + + `; + + const aiTitleTextDiv = document.createElement('div'); + aiTitleTextDiv.className = 'tianliGPT-title-text'; + aiTitleTextDiv.textContent = '简而言之'; + aiTitleDiv.appendChild(aiTitleTextDiv); + + const aiTagDiv = document.createElement('div'); + aiTagDiv.className = 'tianliGPT-tag'; + aiTagDiv.id = 'tianliGPT-tag'; + aiTagDiv.textContent = 'XIGE-GPT'; + aiTitleDiv.appendChild(aiTagDiv); + + const aiExplanationDiv = document.createElement('div'); + aiExplanationDiv.className = 'tianliGPT-explanation'; + aiExplanationDiv.innerHTML = '夕格AI摘要正在生成,请稍等...' + ''; + aiDiv.appendChild(aiExplanationDiv); // 将 tianliGPT-explanation 插入到 aiDiv,而不是 aiTitleDiv + + // 将创建的元素插入到目标元素的顶部 + targetElement.insertBefore(aiDiv, targetElement.firstChild); + } + + function removeExistingAIDiv() { + // 查找具有 "post-TianliGPT" 类的元素 + const existingAIDiv = document.querySelector(".post-TianliGPT"); + + // 如果找到了这个元素,就从其父元素中删除它 + if (existingAIDiv) { + existingAIDiv.parentElement.removeChild(existingAIDiv); + } + } + + var tianliGPT = { + //读取文章中的所有文本 + getTitleAndContent: function() { + try { + const title = document.title; + const container = document.querySelector(tianliGPT_postSelector); + if (!container) { + console.warn('TianliGPT:找不到文章容器。请尝试将引入的代码放入到文章容器之后。如果本身没有打算使用摘要功能可以忽略此提示。'); + return ''; + } + const paragraphs = container.getElementsByTagName('p'); + const headings = container.querySelectorAll('h1, h2, h3, h4, h5'); + let content = ''; + + for (let h of headings) { + content += h.innerText + ' '; + } + + for (let p of paragraphs) { + // 移除包含'http'的链接 + const filteredText = p.innerText.replace(/https?:\/\/[^\s]+/g, ''); + content += filteredText; + } + + const combinedText = title + ' ' + content; + let wordLimit = 1000; + if (typeof tianliGPT_wordLimit !== "undefined") { + wordLimit = tianliGPT_wordLimit; + } + const truncatedText = combinedText.slice(0, wordLimit); + return truncatedText; + } catch (e) { + console.error('TianliGPT错误:可能由于一个或多个错误导致没有正常运行,原因出在获取文章容器中的内容失败,或者可能是在文章转换过程中失败。', e); + return ''; + } + }, + + fetchTianliGPT: async function(content) { + if (!tianliGPT_key) { + return "没有获取到key,代码可能没有安装正确。如果你需要在tianli_gpt文件引用前定义tianliGPT_key变量。详细请查看文档。"; + } + + if (tianliGPT_key === "5Q5mpqRK5DkwT1X9Gi5e") { + return "请购买 key 使用,如果你能看到此条内容,则说明代码安装正确。"; + } + var url = window.location.href; + const title = document.title; + const apiUrl = `https://summary.tianli0.top/?content=${encodeURIComponent(content)}&key=${encodeURIComponent(tianliGPT_key)}&url=${encodeURIComponent(url)}&title=${encodeURIComponent(title)}`; + const timeout = 20000; // 设置超时时间(毫秒) + + try { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeout); + const response = await fetch(apiUrl, { signal: controller.signal }); + if (response.ok) { + const data = await response.json(); + return { + summary: data.summary, + audioId: data.id // 获取音频的 ID + }; + } else { + if (response.status === 402) { + document.querySelectorAll('.post-TianliGPT').forEach(el => { + el.style.display = 'none'; + }); + } + throw new Error('TianliGPT:余额不足,请充值后请求新的文章'); + } + } catch (error) { + if (error.name === 'AbortError') { + if (window.location.hostname === 'localhost') { + console.warn('警告:请勿在本地主机上测试 API 密钥。'); + return '获取文章摘要超时。请勿在本地主机上测试 API 密钥。'; + } else { + console.error('请求超时'); + return '获取文章摘要超时。当你出现这个问题时,可能是key或者绑定的域名不正确。也可能是因为文章过长导致的 AI 运算量过大,您可以稍等一下然后刷新页面重试。'; + } + } else { + console.error('请求失败:', error); + return '获取文章摘要失败,请稍后再试。'; + } + } + }, + + aiShowAnimation: function (text) { + const element = document.querySelector(".tianliGPT-explanation"); + if (!element) { + return; + } + + if (tianliGPTIsRunning) { + return; + } + + // 检查用户是否已定义tianliGPT_typingAnimate并且其值为false + if (typeof tianliGPT_typingAnimate !== "undefined" && !tianliGPT_typingAnimate) { + // 如果用户已定义tianliGPT_typingAnimate并且其值为false,则立即显示完整文本 + element.innerHTML = text; + return; + } + + tianliGPTIsRunning = true; + const typingDelay = 25; + const waitingTime = 1000; + const punctuationDelayMultiplier = 6; + + element.style.display = "block"; + element.innerHTML = "生成中..." + ''; + + let animationRunning = true; + let currentIndex = 0; + let initialAnimation = true; + let lastUpdateTime = performance.now(); + + const animate = () => { + if (currentIndex < text.length && animationRunning) { + const currentTime = performance.now(); + const timeDiff = currentTime - lastUpdateTime; + + const letter = text.slice(currentIndex, currentIndex + 1); + const isPunctuation = /[,。!、?,.!?]/.test(letter); + const delay = isPunctuation ? typingDelay * punctuationDelayMultiplier : typingDelay; + + if (timeDiff >= delay) { + element.innerText = text.slice(0, currentIndex + 1); + lastUpdateTime = currentTime; + currentIndex++; + + if (currentIndex < text.length) { + element.innerHTML = + text.slice(0, currentIndex) + + ''; + } else { + element.innerHTML = text; + element.style.display = "block"; + tianliGPTIsRunning = false; + observer.disconnect(); // 暂停监听 + } + } + requestAnimationFrame(animate); + } + } + + // 使用IntersectionObserver对象优化ai离开视口后暂停的业务逻辑,提高性能 + const observer = new IntersectionObserver((entries) => { + let isVisible = entries[0].isIntersecting; + animationRunning = isVisible; // 标志变量更新 + if (animationRunning && initialAnimation) { + setTimeout(() => { + requestAnimationFrame(animate); + }, 200); + } + }, { threshold: 0 }); + let post_ai = document.querySelector('.post-TianliGPT'); + observer.observe(post_ai); //启动新监听 + }, + } + function runTianliGPT() { + insertAIDiv(tianliGPT_postSelector); + const content = tianliGPT.getTitleAndContent(); + if (content) { + console.log('TianliGPT本次提交的内容为:' + content); + } + tianliGPT.fetchTianliGPT(content).then(data => { + const summary = data.summary; + const audioId = data.audioId; + const buttonDiv = document.querySelector('.tianliGPT-tag'); + buttonDiv.dataset.audioId = audioId; // 将音频的 ID 存储在按钮的 dataset 属性中 + tianliGPT.aiShowAnimation(summary); + }) + } + + function checkURLAndRun() { + if (typeof tianliGPT_postURL === "undefined") { + runTianliGPT(); // 如果没有设置自定义 URL,则直接执行 runTianliGPT() 函数 + return; + } + + try { + const wildcardToRegExp = (s) => { + return new RegExp('^' + s.split(/\*+/).map(regExpEscape).join('.*') + '$'); + }; + + const regExpEscape = (s) => { + return s.replace(/[|\\{}()[\]^$+*?.]/g, '\\{{input}}'); + }; + + const urlPattern = wildcardToRegExp(tianliGPT_postURL); + const currentURL = window.location.href; + + if (urlPattern.test(currentURL)) { + runTianliGPT(); // 如果当前 URL 符合用户设置的 URL,则执行 runTianliGPT() 函数 + } else { + console.log("TianliGPT:因为不符合自定义的链接规则,我决定不执行摘要功能。"); + } + } catch (error) { + console.error("TianliGPT:我没有看懂你编写的自定义链接规则,所以我决定不执行摘要功能", error); + } + } + + if (usePjax) { + checkURLAndRun(); + } else { + document.addEventListener("DOMContentLoaded", function () { + checkURLAndRun(); + }); + } +} + +tianliGPT(false); + +document.addEventListener('pjax:complete', function () { + tianliGPT(true); +}) + +document.addEventListener('click', function (event) { + const target = event.target; + if (target.classList.contains('tianliGPT-tag')) { + playAudio(); + } +}); + +var audioPlayer = null; // 用于存储音频播放器对象 +function playAudio() { + if (audioPlayer && !audioPlayer.paused) { + audioPlayer.pause(); + } else { + if (!audioPlayer) { + const buttonDiv = document.querySelector('.tianliGPT-tag'); + const audioId = buttonDiv.dataset.audioId; + + if (!audioId) { + console.error('未找到音频 ID'); + return; + } + + const audioUrl = `https://summary.tianli0.top/audio?id=${encodeURIComponent(audioId)}&key=${encodeURIComponent(tianliGPT_key)}`; + + audioPlayer = new Audio(audioUrl); + audioPlayer.addEventListener('ended', () => { + buttonDiv.classList.remove('playing'); + }); + + audioPlayer.addEventListener('play', () => { + buttonDiv.classList.add('playing'); + }); + + audioPlayer.addEventListener('pause', () => { + buttonDiv.classList.remove('playing'); + }); + } + + setTimeout(() => { + audioPlayer.play().catch(error => { + console.error('播放音频失败:', error); + }); + }, 100); // 添加延迟以确保播放请求能够正常执行 + } + + const buttonDiv = document.querySelector('.tianliGPT-tag'); + + buttonDiv.addEventListener('click', function() { + buttonDiv.classList.toggle('playing'); + }); + + const svgAnimation = ''; + + if (buttonDiv.classList.contains('playing')) { + buttonDiv.innerHTML = svgAnimation; + buttonDiv.style.animation = ''; + buttonDiv.style.color = '#ff0000'; + buttonDiv.style.backgroundColor = 'transparent'; + buttonDiv.style.padding = '0'; + } else { + buttonDiv.innerHTML = svgAnimation; + buttonDiv.style.animation = ''; + buttonDiv.style.color = '#000000'; + buttonDiv.style.backgroundColor = 'transparent'; + buttonDiv.style.padding = '0'; + } +} + + +document.addEventListener('click', function (event) { + const target = event.target; + const buttonDiv = document.querySelector('.tianliGPT-tag'); + + buttonDiv.addEventListener('click', function() { + buttonDiv.classList.toggle('playing'); + }); + + if (target === buttonDiv || buttonDiv.contains(target)) { + playAudio(); + } +}); \ No newline at end of file diff --git a/assets/dist/tianli_gpt.min.css b/assets/dist/tianli_gpt.min.css new file mode 100644 index 0000000..3ff47e2 --- /dev/null +++ b/assets/dist/tianli_gpt.min.css @@ -0,0 +1 @@ +:root,[data-theme=light]{--heo-white:#fff;--heo-white-op:rgba(255, 255, 255, 0.2);--heo-black:#000;--heo-black-op:rgba(0, 0, 0, 0.2);--heo-none:#00000000;--heo-gray:#999999;--heo-gray-op:#9999992b;--heo-vip:#e5a80d;--heo-main:var(--heo-theme);--heo-main-op:var(--heo-theme-op);--heo-main-op-deep:var(--heo-theme-op-deep);--heo-main-none:var(--heo-theme-none);--heo-shadow-theme:0 8px 12px -3px var(--heo-theme-op);--heo-shadow-blackdeep:0 2px 16px -3px rgba(0, 0, 0, .15);--heo-shadow-main:0 8px 12px -3px var(--heo-main-op);--heo-shadow-blue:0 8px 12px -3px rgba(40, 109, 234, .20);--heo-shadow-white:0 8px 12px -3px rgba(255, 255, 255, .20);--heo-shadow-black:0 0 12px 4px rgba(0, 0, 0, .05);--heo-shadow-yellow:0px 38px 77px -26px rgba(255, 201, 62, .12);--heo-shadow-red:0 8px 12px -3px #ee7d7936;--heo-shadow-green:0 8px 12px -3px #87ee7936;--heo-logo-color:linear-gradient(215deg, #4584ff 0%, #cf0db9 100%);--heo-snackbar-time:5s;--heo-theme:#425AEF;--heo-theme-op:#4259ef23;--heo-theme-op-deep:#4259efdd;--heo-theme-none:#4259ef01;--heo-blue:#425AEF;--heo-red:#f04a63;--heo-pink:#FF7C7C;--heo-green:#57bd6a;--heo-yellow:#c28b00;--heo-yellow-op:#d99c001a;--heo-orange:#e38100;--heo-fontcolor:#363636;--heo-background:#f7f9fe;--heo-reverse:#000;--heo-maskbg:rgba(255, 255, 255, 0.6);--heo-maskbgdeep:rgba(255, 255, 255, 0.85);--heo-hovertext:var(--heo-main);--heo-ahoverbg:#F7F7FA;--heo-lighttext:var(--heo-main);--heo-secondtext:rgba(60, 60, 67, 0.8);--heo-scrollbar:rgba(60, 60, 67, 0.4);--heo-card-btn-bg:#edf0f7;--heo-post-blockquote-bg:#fafcff;--heo-post-tabs-bg:#f2f5f8;--heo-secondbg:#f1f3f8;--heo-shadow-nav:0 5px 12px -5px rgba(102, 68, 68, 0.05);--heo-card-bg:#fff;--heo-card-bg-op:var(--heo-black-op);--heo-card-bg-none:rgba(255, 255, 255, 0);--heo-shadow-lightblack:0 5px 12px -5px rgba(102, 68, 68, 0.00);--heo-shadow-light2black:0 5px 12px -5px rgba(102, 68, 68, 0.00);--heo-card-border:#e3e8f7;--heo-shadow-border:0 8px 16px -4px #2c2d300c;--style-border:1px solid var(--heo-card-border);--style-border-always:1px solid var(--heo-card-border);--style-border-hover:1px solid var(--heo-main);--style-border-hover-always:1px solid var(--heo-main);--style-border-dashed:1px dashed var(--heo-theme-op);--style-border-forever:2px solid var(--heo-main);--theme-yanzhi-bg:linear-gradient(180deg, rgba(249, 238, 255, 0.54), rgba(191, 223, 255, .35));--theme-yanzhi-font-color:#1e128c;--theme-yanzhi-secondfont-color:rgb(89 19 97 / 80%);--theme-yanzhi-titlelinear-color:linear-gradient(to right, #cd42ec, #3a32d3);--theme-yanzhi-icon-color:#cd42ec;--theme-menghuan-bg:conic-gradient(from 1.5708rad at 50% 50%, #d6b300 0%, #42A2FF 54%, #d6b300 100%)}[color-scheme=dark],[data-theme=dark],[eagle-extension-theme=dark],body.dark,body.dark-open,body.dark-theme,html.dark{--heo-theme:#f2b94b;--heo-theme-op:#f2b94b23;--heo-theme-op-deep:#f2b94bdd;--heo-theme-none:#f2b94b00;--heo-blue:#0084FF;--heo-red:#FF3842;--heo-pink:#d44040;--heo-green:#3e9f50;--heo-yellow:#ffc93e;--heo-yellow-op:#ffc93e30;--heo-orange:#ff953e;--heo-fontcolor:#F7F7FA;--heo-background:#18171d;--heo-reverse:#fff;--heo-maskbg:rgba(0, 0, 0, 0.6);--heo-maskbgdeep:rgba(0, 0, 0, 0.85);--heo-hovertext:#0A84FF;--heo-ahoverbg:#fff;--heo-lighttext:var(--heo-theme);--heo-secondtext:#a1a2b8;--heo-scrollbar:rgba(200, 200, 223, 0.4);--heo-card-btn-bg:#30343f;--heo-post-blockquote-bg:#000;--heo-post-tabs-bg:#121212;--heo-secondbg:#30343f;--heo-shadow-nav:0 5px 20px 0px rgba(28, 28, 28, 0.4);--heo-card-bg:#1d1e22;--heo-card-bg-op:var(--heo-white-op);--heo-card-bg-none:#1d1b2600;--heo-shadow-lightblack:0 5px 12px -5px rgba(102, 68, 68, 0.0);--heo-shadow-light2black:0 5px 12px -5px rgba(102, 68, 68, 0.0);--heo-card-border:#3d3d3f;--heo-shadow-border:0 8px 16px -4px #00000050;--style-border:1px solid var(--heo-card-border);--style-border-always:1px solid var(--heo-card-border);--style-border-hover:1px solid var(--heo-theme);--style-border-hover-always:1px solid var(--heo-theme);--style-border-dashed:1px dashed var(--heo-theme-op);--style-border-forever:2px solid var(--heo-lighttext);--theme-yanzhi-bg:linear-gradient(180deg, rgb(33 0 67), rgb(0 42 83));--theme-yanzhi-font-color:#e8e5ff;--theme-yanzhi-secondfont-color:rgb(255 255 255 / 80%);--theme-yanzhi-titlelinear-color:linear-gradient(to right, #ed9dff, #8f89ff);--theme-yanzhi-icon-color:#f2b9ff;--theme-menghuan-bg:conic-gradient(from 1.5708rad at 50% 50%, #d6b30047 0%, #42A2FF47 54%, #d6b30047 100%)}.post-TianliGPT{background:var(--heo-secondbg);border-radius:12px;padding:8px;line-height:1.3;border:var(--style-border-always);margin:16px 0;display:flex;flex-direction:column;gap:8px;position:relative;z-index:0}.tianliGPT-title{display:flex;color:var(--heo-lighttext);border-radius:8px;align-items:center;padding:0 12px;cursor:default;position:relative}.tianliGPT-title-text{font-weight:700;margin-left:8px;line-height:1;font-size:15px}.tianliGPT-explanation{padding:8px 12px;background:var(--heo-card-bg);border-radius:8px;border:var(--style-border-always);font-size:15px;line-height:1.4;display:block;color:var(--heo-fontcolor);text-align:justify}.tianliGPT-suggestions{display:flex;flex-wrap:wrap}.tianliGPT-suggestions .tianliGPT-suggestions-item{margin-top:12px;padding:8px 12px;background:var(--heo-card-bg);border-radius:8px 8px 8px 0;border:var(--style-border-always);font-size:15px;line-height:1.4;display:flex;width:fit-content;margin-right:12px;cursor:pointer;transition:.3s}.tianliGPT-suggestions .tianliGPT-suggestions-item:hover{background:var(--heo-main);color:var(--heo-white)}.blinking-cursor{background-color:var(--heo-lighttext);width:14px;height:14px;border-radius:16px;display:inline-block;vertical-align:middle;animation:2s infinite blinking-cursor;-webkit-animation:2s infinite blinking-cursor;margin-left:4px;margin-bottom:3px;transform:scale(.6)}@keyframes blinking-cursor{0%,100%,50%{transform:scale(.6)}25%,75%{transform:scale(1)}}#tianliGPT-tag{position:relative;font-size:11px;color:var(--heo-secondtext);border-radius:12px;margin-left:auto;line-height:12px;padding:0 0 0 4px;display:flex;align-items:center;justify-content:center;transition:.3s;outline:0;border:none;letter-spacing:1px;background:var(--heo-secondbg);overflow:hidden;opacity:.8}.tianliGPT-tag.loadingAI::before{content:'';position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--heo-secondbg) 50%,rgba(255,255,255,0) 100%);animation:1s infinite postchat_shine}@keyframes postchat_shine{0%{left:-100%}100%{left:100%}}.tianliGPT-tag.loadedAI::before{opacity:0;animation-play-state:paused}ins.adsbygoogle{margin:16px 0;background:var(--heo-card-bg);border-radius:12px;overflow:hidden;border:var(--style-border-always)}#tianliGPT-Toggle{font-size:12px;background:var(--heo-lighttext);color:var(--heo-card-bg);padding:4px;border-radius:4px;margin-left:6px;transform:scale(.8);cursor:pointer;transition:.3s;font-weight:700}#tianliGPT-Toggle:hover{background:var(--heo-fontcolor);color:var(--heo-card-bg)}.tianliGPT-title-icon{width:22px;height:22px;display:flex;background:var(--heo-lighttext);color:var(--heo-card-bg);font-size:14px;border-radius:20px;justify-content:center;align-items:center;padding:0}.tianliGPT-title-icon svg{width:14px;height:14px;fill:var(--heo-card-bg)}.tianliGPT-title-icon svg path{fill:var(--heo-card-bg)}@media screen and (max-width:768px){.post-TianliGPT{margin-top:22px}.postchat_discuz_mobile .post-TianliGPT{max-width:calc(100vw - 46px);margin:16px auto 0}}.gpttheme_yanzhi #tianliGPT-tag{background:0 0;color:var(--theme-yanzhi-secondfont-color);padding-left:2px}.gpttheme_simple.post-TianliGPT{padding-top:12px}.gpttheme_simple .tianliGPT-title-text{font-weight:400;font-size:14px;color:#26b373}.gpttheme_simple .tianliGPT-title-icon{width:16px;height:16px;background-image:url(/static/icon/TianliGPT-star.svg);background-size:cover;background-color:var(--heo-secondbg);padding:0}.gpttheme_simple .tianliGPT-title-icon svg{fill:var(--heo-fontcolor);display:none;width:16px;height:16px}.gpttheme_simple .tianliGPT-title-icon svg path{fill:var(--heo-fontcolor)}.gpttheme_simple .tianliGPT-explanation{background:var(--heo-secondbg);border:none;padding:4px 12px}.gpttheme_simple .blinking-cursor{background:var(--heo-fontcolor)}.gpttheme_yanzhi.post-TianliGPT{padding-top:12px;background:var(--theme-yanzhi-bg)}.gpttheme_yanzhi .tianliGPT-title-text{font-size:14px;color:var(--heo-blue);font-weight:700;background-image:var(--theme-yanzhi-titlelinear-color);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.gpttheme_yanzhi .tianliGPT-title-icon{background:0 0;width:16px;height:16px;padding:0}.gpttheme_yanzhi .tianliGPT-title-icon svg{width:16px;height:16px}.gpttheme_yanzhi .tianliGPT-title-icon svg path{fill:var(--theme-yanzhi-icon-color)}.gpttheme_yanzhi .tianliGPT-explanation{background:0 0;border:none;padding:4px 12px;font-weight:700;color:var(--theme-yanzhi-font-color)}.gpttheme_yanzhi .blinking-cursor{background:var(--theme-yanzhi-secondfont-color)}.gpttheme_menghuan .tianliGPT-title{order:1;z-index:10}.gpttheme_menghuan #tianliGPT-tag{background:0 0;color:var(--heo-secondtext);padding-left:2px}.gpttheme_menghuan.post-TianliGPT{padding-bottom:12px;background-color:var(--heo-maskbgdeep);border:none}.gpttheme_menghuan.post-TianliGPT::before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;filter:blur(8px);opacity:.4;background-image:var(--theme-menghuan-bg);transform:scaleX(.99) scaleY(.95) translateY(2px)}.gpttheme_menghuan.post-TianliGPT::after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;border-radius:12px;background:var(--heo-maskbgdeep)}.gpttheme_menghuan .tianliGPT-title-text{font-weight:400;font-size:14px;color:#0883b7;margin-left:0}.gpttheme_menghuan .tianliGPT-title-icon{width:16px;height:16px;background-image:url(/static/icon/TianliGPT-star.svg);background-size:cover;background-color:var(--heo-none);padding:0;display:none}.gpttheme_menghuan .tianliGPT-title-icon svg{fill:var(--heo-fontcolor);display:none;width:16px;height:16px}.gpttheme_menghuan .tianliGPT-title-icon svg path{fill:var(--heo-fontcolor)}.gpttheme_menghuan .tianliGPT-explanation{background:0 0;border:none;padding:4px 12px;z-index:10}.gpttheme_menghuan .blinking-cursor{background:#0883b7} \ No newline at end of file diff --git a/assets/dist/tianli_gpt.min.js b/assets/dist/tianli_gpt.min.js new file mode 100644 index 0000000..92f69a3 --- /dev/null +++ b/assets/dist/tianli_gpt.min.js @@ -0,0 +1,5 @@ +console.log("\n %c 摘要AI 博客文章摘要AI生成工具 %c https://ai.tianli0.top/ \n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;");var tianliGPTIsRunning=!1,tianliGPTLastRunTime=0,tianliGPTIcon=` + + + + `,tianliGPTSystem="";class TianliGPT{insertAIDiv(i,e){this.removeExistingAIDiv();let n=document.querySelector(i);e=e||i;var t,a,o,e=document.querySelector(e);if(!n){let e=0,t=setInterval(()=>{e+=300,(n=document.querySelector(i))?clearInterval(t):2e4<=e&&(clearInterval(t),console.log("摘要AI:在网页显示摘要AI框架失败,原因是没有找到需要注入的位置。如果本不打算在此页面展示摘要AI,可以忽略此提醒。"))},300)}document.querySelector(".post-TianliGPT")&&tianliGPTIsRunning||(tianliGPTIsRunning=!0,(t=document.createElement("div")).className="post-TianliGPT","undefined"!=typeof tianliGPT_theme&&tianliGPT_theme&&t.classList.add("gpttheme_"+tianliGPT_theme.toLowerCase()),(o=document.createElement("div")).className="tianliGPT-title",t.appendChild(o),(a=document.createElement("i")).className="tianliGPT-title-icon",o.appendChild(a),a.innerHTML=tianliGPTIcon,(a=document.createElement("div")).className="tianliGPT-title-text","undefined"==typeof tianliGPT_Title?a.textContent="简而言之":a.textContent=tianliGPT_Title,o.appendChild(a),(a=document.createElement("div")).className="tianliGPT-tag",a.id="tianliGPT-tag","undefined"==typeof tianliGPT_Name?a.textContent="AI摘要":a.textContent=tianliGPT_Name,o.appendChild(a),(o=document.createElement("div")).className="tianliGPT-explanation",o.innerHTML="undefined"==typeof tianliGPT_loadingText||tianliGPT_loadingText?'AI摘要正在生成,请稍等...':'',t.appendChild(o),e?e.insertBefore(t,e.firstChild):n&&n.insertBefore(t,n.firstChild))}removeExistingAIDiv(){var e=document.querySelector(".post-TianliGPT");e&&e.parentElement.removeChild(e)}getVerifiedTitle(){let t=["#thread_subject",".view_tit","h1",".postlist_top h2"];var e=(document.title||"").trim(),i=function(){for(var e of t){e=document.querySelector(e);if(e&&e.textContent.trim())return(e=(e=e).cloneNode(!0)).querySelectorAll("em").forEach(e=>e.remove()),e.textContent.trim()}return null}();return i&&e.startsWith(i)?i.trim():e}getTitleAndContent(){try{let a=this.getVerifiedTitle(),o=()=>{var t=document.querySelector(tianliGPT_postSelector);if(!t)return"";var e,t=t.cloneNode(!0),i=(t.querySelectorAll(".showhide, .locked, script, style, .authi, .post-TianliGPT, .code, .terminal_frame, .share-modal, .aplayer").forEach(e=>e.remove()),"Discuz"==tianliGPTSystem&&t.querySelectorAll(".txtlist.cl, .view_reply.cl, ignore_js_op, #hm_qrcode, .readthread_box",".smplayerbox",".it618_tieclick_ajax",".attach_nopermission").forEach(e=>e.remove()),t.querySelectorAll("p, strong, font, ul, li, ol, span, td"));let n="";for(e of t.querySelectorAll("h1, h2, h3, h4, h5"))n+=e.innerText+" ";var a,o=[];for(a of i){var l=Array.from(a.childNodes).filter(e=>e.nodeType===Node.TEXT_NODE).map(e=>e.textContent).join("").trim().replace(/https?:\/\/[^\s]+/g,"");""!==l.trim()&&o.push(l)}if(0===o.length){let e=t.innerText;e=e.replace(/\n/g," ").replace(/\s+/g," ").trim(),n+=e}else n=o.join(" ");return n.trim()},l=o();if(!l)return new Promise(i=>{let e=0,n=()=>{e++,console.log(`摘要AI:文章内容为空,第${e}次重试...`),setTimeout(()=>{if(!(l=o())&&e<2)n();else if(l){let e=a+" "+l;e=e.replace(/(\s*\n\s*)+/g," ").trim();var t="undefined"!=typeof tianliGPT_wordLimit?tianliGPT_wordLimit:1e3;i(e.slice(0,t))}else console.log("摘要AI:重试3次后内容仍为空,放弃获取。如果本不打算在此页面展示摘要AI,可以忽略此提醒。"),i("")},1e3)};n()});let e=a+" "+l;e=e.replace(/(\s*\n\s*)+/g," ").trim();var t="undefined"!=typeof tianliGPT_wordLimit?tianliGPT_wordLimit:1e3;return e.slice(0,t)}catch(e){return console.log("摘要AI:可能由于一个或多个情况在本页面没有正常运行,如果本不打算在此页面展示,可以忽略此提醒,原因出在获取文章容器中的内容失败,或者可能是在文章转换过程中失败。",e),""}}old_getTitleAndContent(){try{var i,n,a=document.title,o=document.querySelector(tianliGPT_postSelector),l=(o||(console.log("摘要AI:找不到文章容器。将在2秒后重新检查。"),setTimeout(()=>{document.querySelector(tianliGPT_postSelector)?(tianliGPTIsRunning=!1,this.checkURLAndRun()):console.log("摘要AI:再次检查后仍找不到文章容器。如果本页面不打算展示摘要,可以忽略此提醒。请确保代码放置在正确的位置。")},500)),o.getElementsByTagName("p")),r=o.querySelectorAll("h1, h2, h3, h4, h5");let e="";for(i of r)e+=i.innerText+" ";for(n of l){var s=n.innerText.replace(/https?:\/\/[^\s]+/g,"");e+=s}var c=a+" "+e;let t=1e3;return"undefined"!=typeof tianliGPT_wordLimit&&(t=tianliGPT_wordLimit),c.slice(0,t)}catch(e){return console.log("摘要AI:可能由于一个或多个情况在本页面没有正常运行,如果本不打算在此页面展示,可以忽略此提醒,原因出在获取文章容器中的内容失败,或者可能是在文章转换过程中失败。",e),""}}async fetchTianliGPT(e){let t="";var i=document.querySelector("script[data-postChat_key]");if(i)t=i.getAttribute("data-postChat_key");else{if("undefined"==typeof tianliGPT_key)return{summary:"没有获取到key,代码可能没有安装正确。如果你需要在tianli_gpt文件引用前定义tianliGPT_key变量。详细请查看文档。"};t=tianliGPT_key}if("5Q5mpqRK5DkwT1X9Gi5e"===t)return{summary:"请购买 key 使用,如果你能看到此条内容,则说明代码安装正确。"};var i=window.location.href,n=document.title;if("Discuz"===tianliGPTSystem){var a=new URL(i),o="undefined"!=typeof tianliGPT_discuz_tid?tianliGPT_discuz_tid:"undefined"!=typeof tid?tid:null;if(!o)return{summary:"Discuz中需要携带tid参数,变量名为:tianliGPT_discuz_tid,例如:let tianliGPT_discuz_tid = '2',当tid不存在的页面可以设为0。不允许不包含tid参数的Discuz请求。建议使用Discuz插件实现。"};i=a.origin+"/forum.php?mod=viewthread&tid="+o}if("ZBlog"===tianliGPTSystem){a=new URL(i),o="undefined"!=typeof tianliGPT_zblog_id?tianliGPT_zblog_id:null;if(!o)return{summary:"ZBlog中需要携带id参数,变量名为:tianliGPT_zblog_id,例如:let tianliGPT_zblog_id = '3'。不允许不包含id参数的ZBlog请求。"};i=a.origin+"/?id="+o}let l="zh-CN",r=(document.documentElement.lang&&(l=document.documentElement.lang),JSON.stringify({content:e,key:t,url:i,title:n,system:tianliGPTSystem,language:l}));async function s(){let e=new AbortController;var i=setTimeout(()=>e.abort(),1e4);try{var n,a=await fetch("https://summary.tianli0.top/",{method:"POST",headers:{"Content-Type":"application/json"},body:r,signal:e.signal}),o=(clearTimeout(i),await a.text());let t;try{t=JSON.parse(o)}catch(e){return console.warn("Response is not valid JSON:",o),{summary:"服务器返回了无效的响应"}}if(t.err_code){let e="";switch(t.err_code){case 1:return{summary:e='你的网站设置了Referrer-Policy为same-origin,这会导致Tianli无法验证你的请求来源。TianliGPT依赖refer进行来源判断,特别是meta标签的referrer属性需要修改,至少为origin。例如:'};case 2:return{summary:e="你正在使用的账户Key或tianliGPT_key没有绑定当前网站,请检查当前的密钥是否绑定了当前网站地址。可以到summary.zhheo.com中绑定。"};case 3:return{summary:e="参数缺失,请检查是否正确配置账户Key或tianliGPT_key"};case 4:throw document.querySelectorAll(".post-TianliGPT").forEach(e=>{e.style.display="none"}),e="Key错误或余额不足,请充值后请求新的文章",new Error("洪墨摘要AI:"+e);case 5:return document.querySelectorAll(".post-TianliGPT").forEach(e=>{e.style.display="none"}),{summary:e="未知错误"};case 6:return document.querySelectorAll(".post-TianliGPT").forEach(e=>{e.style.display="none"}),{summary:e="数据库错误"};case 7:return e=t.message||t.msg||"未知错误",{summary:e=t.message&&t.message.includes("L10500")?"这篇文章包含时政或敏感内容,可以直接查看原文哦,本文的摘要功能已关闭。":e};default:return tianliGPT.aiShowAnimation("未知错误,请检查API文档"),{summary:"未知错误,请检查API文档"}}}return a.ok&&t.summary?{summary:t.summary}:(n="",514===a.status?(n="TianliGPT is only available in mainland China, and is not yet open to overseas users, so stay tuned!",this.aiShowAnimation(n),{summary:n}):{summary:"服务器返回了无效的响应"})}catch(e){return clearTimeout(i),"AbortError"===e.name?(console.warn("请求超时"),{summary:"请求超时"}):(console.error("请求失败:",e),{summary:"请求失败"})}}a=await s();return"timeout"===a?(console.warn("第一次请求超时,尝试第二次请求..."),"timeout"===(o=await s())||"error"===o?{summary:"目前生成摘要任务排队较多,请稍候刷新再试"}:o):a}aiShowAnimation(n){let a=document.querySelector(".tianliGPT-explanation");if(!a)return;if("undefined"!=typeof tianliGPT_typingAnimate&&!tianliGPT_typingAnimate)return a.innerHTML=n,void(tianliGPTIsRunning=!1);a.style.display="block",a.innerHTML="undefined"==typeof tianliGPT_loadingText||tianliGPT_loadingText?'生成中...':'',document.querySelector(".tianliGPT-tag").classList.add("loadingAI");let o,l=0,r=performance.now(),s=()=>{var e,t,i;l':(a.innerHTML=n,a.style.display="block",tianliGPTIsRunning=!1,c.disconnect(),document.querySelector(".tianliGPT-tag").classList.remove("loadingAI"))),requestAnimationFrame(s))},c=new IntersectionObserver(e=>{e=e[0].isIntersecting;(o=e)&&setTimeout(()=>{requestAnimationFrame(s)},200)},{threshold:0});var e=document.querySelector(".post-TianliGPT");c.observe(e)}async runTianliGPT(){if("undefined"!=typeof tianliGPT_postSelector){if("Discuz"===tianliGPTSystem){var e=document.querySelector(tianliGPT_postSelector);if(e)if(e.querySelector('a[href*="plugin.php?id=duceapp_vip&ac=pay&referer=forum.php"]'))return}e=await get_title_content_helper();e&&console.log("TianliGPT本次提交的内容为:"+e),this.insertAIDiv(tianliGPT_postSelector,"undefined"!=typeof tianliGPT_injectDom&&tianliGPT_injectDom?tianliGPT_injectDom:tianliGPT_postSelector),"https:"!==window.location.protocol?this.aiShowAnimation("为了保证传输的安全性和可靠性,不支持在http协议下显示文章摘要。请为网站申请证书,并在summary.zhheo.com使用https协议的地址绑定即可。如果是本地或者局域网访问,可以忽略此警告。"):this.fetchTianliGPT(e).then(e=>{let t=e.summary,i;"undefined"!=typeof tianliGPT_BeginningText?i=tianliGPT_BeginningText:"undefined"!=typeof postChatConfig&&postChatConfig.beginningText?i=postChatConfig.beginningText:"Discuz"===tianliGPTSystem&&(i="这个帖子"),i&&(t.match(/^这篇文章[\u4e00-\u9fa5]{1,2}了/)?t=t.replace(/^这篇文章[\u4e00-\u9fa5]{1,2}了/g,""+i):t.match(/^这篇文章通过/)&&(t=t.replace(/^这篇文章通过/g,i+"通过"))),t=t.replace(/介绍了通过/g,"通过"),this.aiShowAnimation(t)})}}checkURLAndRun(){var e=Date.now();if(!(e-tianliGPTLastRunTime<500)){tianliGPTLastRunTime=e;e=document.querySelector('meta[name="generator"]');if(e&&e.content.includes("WordPress")){e=new URL(window.location.href);if(e.searchParams.has("preview")&&"true"===e.searchParams.get("preview"))return void console.log("当前页面为WordPress预览模式,不执行摘要功能。")}if("undefined"==typeof tianliGPT_postURL)this.attemptRunTianliGPT();else try{let e;e=(e=>{try{return new RegExp(e),e.startsWith("/")&&e.endsWith("/")&&2{e=e.replace(/[|\\{}()[\]^$+?.]/g,"\\$&");return new RegExp("^"+e.split(/\*+/).join(".*")+"$")})(tianliGPT_postURL);var t=window.location.href;e.test(t)?this.attemptRunTianliGPT():console.log(`摘要AI:当前 URL '${t}' 不符合规则 '${tianliGPT_postURL}',所以我决定不执行摘要功能。`)}catch(e){console.error("摘要AI:我没有看懂你编写的自定义链接规则,所以我决定不执行摘要功能",e)}}}attemptRunTianliGPT(){let t=0,i=setInterval(()=>{try{this.tianliGPTCustomBlackList(),clearInterval(i)}catch(e){20<=t&&(clearInterval(i),console.error("摘要AI:获取自定义黑名单超时。多次尝试失败,停止尝试。",e)),t++}},200)}tianliGPTCustomBlackList(){"undefined"!=typeof tianliGPT_blacklist&&tianliGPT_blacklist?fetch(tianliGPT_blacklist).then(e=>e.json()).then(e=>{e=e.blackurls;let t=window.location.href;e.some(e=>{return new RegExp("^"+e.replace(/\*/g,".*")+"$").test(t)})?console.log("摘要AI:URL在黑名单中,不执行摘要"):this.runTianliGPT()}).catch(e=>{console.error("摘要AI:请求黑名单失败。Error fetching blacklist:",e),this.runTianliGPT()}):this.runTianliGPT()}}function postchat_checkSystemType(){var e;"undefined"!=typeof postChatConfig&&postChatConfig.systemType?tianliGPTSystem=postChatConfig.systemType:(e=document.querySelector('meta[name="generator"]'))&&e.content.includes("Discuz")&&(tianliGPTSystem="Discuz")}async function get_title_content_helper(){let e;return e="Discuz"===tianliGPTSystem?await window.tianliGPT.getTitleAndContent():window.tianliGPT.old_getTitleAndContent()}postchat_checkSystemType(),window.tianliGPT||(window.tianliGPT=new TianliGPT),document.addEventListener("DOMContentLoaded",function(){postchat_checkSystemType(),window.tianliGPT.checkURLAndRun()}),document.addEventListener("pjax:complete",function(){postchat_checkSystemType(),window.tianliGPT.checkURLAndRun()}),document.addEventListener("pjax:success",function(){tianliGPTIsRunning=!1}),window.addEventListener("popstate",function(){postchat_checkSystemType(),window.tianliGPT.checkURLAndRun()}),window.addEventListener("hashchange",function(){postchat_checkSystemType(),window.tianliGPT.checkURLAndRun()}),function(i){var e=i.pushState;i.pushState=function(t){if("function"==typeof i.onpushstate)if("undefined"!=typeof pjaxLoading){let e=()=>{pjaxLoading?setTimeout(e,50):i.onpushstate({state:t})};e()}else setTimeout(function(){i.onpushstate({state:t})},200);return e.apply(i,arguments)}}(window.history),window.history.onpushstate=function(e){postchat_checkSystemType(),window.tianliGPT.checkURLAndRun()}; \ No newline at end of file diff --git a/assets/lantern.html b/assets/lantern.html new file mode 100644 index 0000000..7291013 --- /dev/null +++ b/assets/lantern.html @@ -0,0 +1,1499 @@ + + + + + + 都市繁星·新春祝福(烟花鞭炮版) + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + +
+ +
+ + + + + +
+
+
+ + +
+
+
+
+ 🧨 +
+
+
+ + +
🔊
+ + +
+ 🎆 新春烟花自动播放中 +
+ + + + + + + \ No newline at end of file diff --git a/assets/lantern1.html b/assets/lantern1.html new file mode 100644 index 0000000..a2d98db --- /dev/null +++ b/assets/lantern1.html @@ -0,0 +1,1170 @@ + + + + + + 都市繁星·新春祝福 · 礼花版 + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + +
+ +
+ + + + + +
+
+
+ + + + + + + \ No newline at end of file diff --git a/assets/lantern深色和无刷新版.html b/assets/lantern深色和无刷新版.html new file mode 100644 index 0000000..80dbe7c --- /dev/null +++ b/assets/lantern深色和无刷新版.html @@ -0,0 +1,1205 @@ + + + + + + 都市繁星·新春祝福 + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + +
+ +
+ + + + + +
+
+
+ + + + + + + \ No newline at end of file diff --git a/assets/wish-api.php b/assets/wish-api.php new file mode 100644 index 0000000..8d4d80d --- /dev/null +++ b/assets/wish-api.php @@ -0,0 +1,82 @@ + '星语者', 'recipient' => '博主', 'content' => '代码无BUG,发量永浓密', 'time' => time()], + ['nickname' => '城市旅人', 'recipient' => '自己', 'content' => '房贷压力小,升职加薪早', 'time' => time()], + ['nickname' => '宝妈', 'recipient' => '家人', 'content' => '宝宝健康,老公体贴', 'time' => time()] + ]; + echo json_encode($defaultWishes, JSON_UNESCAPED_UNICODE); + } + exit; +} + +// ===== 提交新祝福 ===== +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + // 获取POST数据 + $input = json_decode(file_get_contents('php://input'), true); + + $nickname = trim($input['nickname'] ?? '匿名'); + $recipient = trim($input['recipient'] ?? '大家'); + $content = trim($input['content'] ?? ''); + + if (empty($content)) { + http_response_code(400); + echo json_encode(['error' => '祝福内容不能为空']); + exit; + } + + // 限制长度 + $nickname = mb_substr($nickname, 0, 20); + $recipient = mb_substr($recipient, 0, 20); + $content = mb_substr($content, 0, 50); + + // 读取现有数据 + $wishes = []; + if (file_exists($jsonFile)) { + $wishes = json_decode(file_get_contents($jsonFile), true); + if (!is_array($wishes)) $wishes = []; + } + + // 添加新祝福(插到最前面) + array_unshift($wishes, [ + 'nickname' => $nickname, + 'recipient' => $recipient, + 'content' => $content, + 'time' => time() + ]); + + // 只保留最新的50条 + $wishes = array_slice($wishes, 0, 50); + + // 写入JSON文件 + file_put_contents($jsonFile, json_encode($wishes, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + echo json_encode(['success' => true, 'wishes' => $wishes]); + exit; +} + +// ===== 其他请求 ===== +http_response_code(405); +echo json_encode(['error' => 'Method Not Allowed']); +exit; +?> \ No newline at end of file diff --git a/assets/wishes.json b/assets/wishes.json new file mode 100644 index 0000000..23f96d0 --- /dev/null +++ b/assets/wishes.json @@ -0,0 +1,26 @@ +[ + { + "nickname": "XIGE", + "recipient": "博主", + "content": "新年快乐!", + "time": 1770881037 + }, + { + "nickname": "XIGE", + "recipient": "父母", + "content": "身体健康", + "time": 1770875165 + }, + { + "nickname": "XIGE", + "recipient": "自己", + "content": "发大财", + "time": 1770874717 + }, + { + "nickname": "XIGE", + "recipient": "大家", + "content": "新年快乐", + "time": 1770874271 + } +] \ No newline at end of file diff --git a/comments.php b/comments.php new file mode 100644 index 0000000..cbe25b4 --- /dev/null +++ b/comments.php @@ -0,0 +1,641 @@ +widget('Widget_Archive')->created)) { + $postCreated = $this->widget('Widget_Archive')->created; +} +?> + + + + +authorId) { + if ($comments->authorId == $comments->ownerId) { + $commentClass .= " comment-by-author"; + } else { + $commentClass .= " comment-by-user"; + } + } + ?> + + +
  • levelsAlt(" comment-level-odd", " comment-level-even"); + } else { + echo " comment-parent"; + } + $comments->alt(" comment-odd", " comment-even"); + echo $commentClass; + ?>"> + +
    + authorId == $comments->ownerId) { ?> + <?php $comments->author; ?> + + <?php $comments->author; ?> + + +
    +
    +
    + + + + url) { + echo '' . $comments->author . ''; + } else { + // 如果没有网址,也显示为橙色文本 + echo '' . $comments->author . ''; + } + } + ?> + + authorId); + } ?> + + authorId) . ')'; + } ?> + + authorId > 0) { ?> + + + + + + + mail); ?> + + + status == "waiting") { ?> + + - 您的评论正等待审核! + + +
    + + +
    + coid && $comments->cid): ?> + coid, $comments->cid); ?> + + + reply("回复"); ?> +
    +
    + +
    + coid); + + // 如果是回复评论,在内容前面添加@被回复用户(可跳转) + $replyPrefix = ''; + if ($comments->parent > 0) { + $parentAuthor = getParentCommentAuthor($comments->parent); + $parentUrl = getParentCommentUrl($comments->parent); + + if ($parentAuthor) { + // 修复@作者名重复问题:只在没有commentAt时才添加replyPrefix + if (!$commentAt) { + if ($parentUrl) { + $replyPrefix = '@' . $parentAuthor . ' '; + } else { + $replyPrefix = '@' . $parentAuthor . ' '; + } + } + } + } + + $cos = parseBiaoQing($comments->content); + ?> + +
    + +
    + + + hasLogin()) { ?> + + authorId > 0 && $comments->authorId == $comments->ownerId); + + // 如果不是管理员,添加相对时间到data属性中 + if (!$isAdminComment && function_exists('getRelativeTime')) { + global $postCreated; + $relativeTime = getRelativeTime($comments->created, $postCreated, false); + if ($relativeTime) { + echo ' data-relative="ID: ' . $comments->coid . ' | ' . htmlspecialchars($relativeTime) . '评论"'; + } else { + echo ' data-relative="ID: ' . $comments->coid . '"'; + } + } elseif (!$isAdminComment) { + // 如果函数不存在,至少显示ID + echo ' data-relative="ID: ' . $comments->coid . '"'; + } + ?> + > + + created); ?> + + + +
    +
    + created, $postCreated, false); + if ($relativeTime) { + echo '本评论ID: ' . $comments->coid . ' | ' . htmlspecialchars($relativeTime) . '评论'; + } else { + echo '本评论ID: ' . $comments->coid; + } + } else { + echo '本评论ID: ' . $comments->coid; + } + ?> +
    +
    +
    + +
    + + + + + + ip); ?> + + + + + + + agent); ?> + + + + + +
    +
    +
    + + children) { ?> +
    + threadedComments($options); ?> +
    + +
  • + + +fetchRow($db->select('author') + ->from('table.comments') + ->where('coid = ?', $parentId)); + + return isset($row['author']) ? $row['author'] : null; + } catch (Exception $e) { + return null; + } +} + +/** + * 获取父评论URL + * @param int $parentId 父评论ID + * @return string 父评论URL + */ +function getParentCommentUrl($parentId) { + $db = Typecho_Db::get(); + try { + $row = $db->fetchRow($db->select('url') + ->from('table.comments') + ->where('coid = ?', $parentId)); + + return isset($row['url']) && !empty($row['url']) ? $row['url'] : null; + } catch (Exception $e) { + return null; + } +} +?> + +hasLogin()) { ?> +
    +
    + comments()->to($comments); ?> + + allow("comment")): ?> +
    +
    +
    + + user->hasLogin()): ?> +
    + " + required/> + + " + options->commentsRequireMail): ?> required /> + + " + options->commentsRequireURL): ?> required /> + + widget("Widget_Security"); ?> + +
    + + +
    + +
    + +
    + + +
    + + + + + + cancelReply(); ?> + + +
    +
    + +
    +
    +
    +
    + + + have()): ?> + listComments(); ?> + pageNav("上一页", "下一页", 0, ".."); ?> + +
    +
    + + + \ No newline at end of file diff --git a/component/logo.php b/component/logo.php new file mode 100644 index 0000000..10ddb82 --- /dev/null +++ b/component/logo.php @@ -0,0 +1,25 @@ + + +options->logoUrl): ?> + + +is("index")): ?> + + diff --git a/component/menu.php b/component/menu.php new file mode 100644 index 0000000..a972bf2 --- /dev/null +++ b/component/menu.php @@ -0,0 +1,151 @@ + + + + +
    + +
    + + +
    + + +
    +
    +
      +
    • + 首页 +
    • + widget("Jasmine_Meta_Row")->to($categorys); ?> + have()): ?> + next()): ?> +
    • + + name(); ?> + +
    • + + +
    + +
    +
    diff --git a/component/paging.php b/component/paging.php new file mode 100644 index 0000000..444a50b --- /dev/null +++ b/component/paging.php @@ -0,0 +1,15 @@ + + +
    +
    + +
    diff --git a/component/post-item-default.php b/component/post-item-default.php new file mode 100644 index 0000000..0162a71 --- /dev/null +++ b/component/post-item-default.php @@ -0,0 +1,80 @@ + + +
    +
    + cid, ""); +$autoThumbnailCategories = array('探店', '爸爸厨房', '户外'); // 需要自动获取封面的分类 + +// 获取当前文章的分类 +$categories = $this->categories; +$currentCategory = ''; +if (!empty($categories)) { + $currentCategory = $categories[0]['name']; +} + +// 封面显示逻辑 +$showThumbnail = false; +if ($thumbnail) { + // 如果有手动设置的封面,始终显示 + $showThumbnail = true; +} elseif (in_array($currentCategory, $autoThumbnailCategories)) { + // 如果是指定分类且没有设置封面,从文章内容中提取第一张图片 + preg_match_all('/content, $matches); + if (!empty($matches[1])) { + $thumbnail = $matches[1][0]; + $showThumbnail = true; + } +} + +if ($showThumbnail && $thumbnail): ?> + + <?php $this->title(); ?> + + + +
    + author() ?> + category("·", true, "无"); ?> + created);?> +
    +

    + + + fields->description; + if (!empty($customDescription)) { + // 如果有自定义描述,直接显示 + echo Typecho_Common::subStr(strip_tags($customDescription), 0, 100, '...'); + } else { + // 如果没有自定义描述,使用原有的excerpt方法 + $this->excerpt(100, ""); + } + ?> + +

    +
    +
    \ No newline at end of file diff --git a/component/post-item-moment.php b/component/post-item-moment.php new file mode 100644 index 0000000..106f0f9 --- /dev/null +++ b/component/post-item-moment.php @@ -0,0 +1,29 @@ + + + + +
    + +
    +
    + created);?> +
    author() ?> +
    + content);?> + +
    +
    diff --git a/component/post-item.php b/component/post-item.php new file mode 100644 index 0000000..5a923ba --- /dev/null +++ b/component/post-item.php @@ -0,0 +1,16 @@ + + +
    +
    + next()): ?> + cid)): ?> + need("component/post-item-moment.php"); ?> + fields->Postype==1): ?> + need("component/post-item-tu.php"); ?> + + need("component/post-item-default.php"); ?> + + +
    diff --git a/component/post-title.php b/component/post-title.php new file mode 100644 index 0000000..7c475b0 --- /dev/null +++ b/component/post-title.php @@ -0,0 +1,49 @@ + + +
    + +
    +
    +
    +

    + title(); ?> +

    +
    +
    + + created); // 获取数字0(周日)到6(周六) +$weekday_cn = ['日', '一', '二', '三', '四', '五', '六']; +echo date('Y-m-d H:i', $this->created) . ' 星期' . $weekday_cn[$weekday]; +;?> + cid(); ?>
    +is('post')) : ?> +<category(','); ?>> + + + +cid); +?> + + + +
    +
    + +
    +
    +
    diff --git a/component/post-top.php b/component/post-top.php new file mode 100644 index 0000000..2d5fdc9 --- /dev/null +++ b/component/post-top.php @@ -0,0 +1,28 @@ + + + +
    + + widget("Widget_Archive@jasmine" . $cid, "pageSize=1&type=post", "cid=" . $cid)->to($item); ?> +
    + cid, "")): ?> + + + + + +
    + +
    + diff --git a/core/backup.php b/core/backup.php new file mode 100644 index 0000000..e836713 --- /dev/null +++ b/core/backup.php @@ -0,0 +1,121 @@ +fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name) + )["value"]; + if ( + $db->fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + ) + ) { + $db->query( + $db + ->update("table.options") + ->rows(["value" => $value]) + ->where("name = ?", "theme:" . $name . "_backup") + ); ?> + + + query( + $db + ->insert("table.options") + ->rows(["name" => "theme:" . $name . "_backup", "user" => "0", "value" => $value]) + ); ?> + + fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + ) + ) { + + $_value = $db->fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + )["value"]; + $db->query( + $db + ->update("table.options") + ->rows(["value" => $_value]) + ->where("name = ?", "theme:" . $name) + ); + ?> + + + + + + fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + ) + ) { + $db->query($db->delete("table.options")->where("name = ?", "theme:" . $name . "_backup")); ?> + + + + + + + + + + + '; diff --git a/core/common.php b/core/common.php new file mode 100644 index 0000000..f6dbd79 --- /dev/null +++ b/core/common.php @@ -0,0 +1,84 @@ +parameter->setDefault(["pageSize" => 8, "parentId" => 0]); + } + + public function execute() + { + $select = $this->select() + ->limit($this->parameter->pageSize) + ->where("table.comments.status = ?", "approved") + ->order("table.comments.coid", Typecho_Db::SORT_DESC); + if ($this->parameter->parentId) { + $select->where("cid = ?", $this->parameter->parentId); + } + if ($this->options->commentsShowCommentOnly) { + $select->where("type = ?", "comment"); + } + $select->where("ownerId <> authorId"); + $this->db->fetchAll($select, [$this, "push"]); + } +} + +/** + * 评论添加 @ + * @param $coid + * @return void + */ +function getCommentAt($coid) +{ + $db = Typecho_Db::get(); + $prow = $db->fetchRow( + $db + ->select("parent") + ->from("table.comments") + ->where("coid = ? AND status = ?", $coid, "approved") + ); + $parent = $prow["parent"]; + if ($prow && $parent != "0") { + $arow = $db->fetchRow( + $db + ->select("author") + ->from("table.comments") + ->where("coid = ? AND status = ?", $parent, "approved") + ); + echo '@' . + $arow["author"] . + ""; + } +} + +/** + * 评论作者 + * @param $obj + * @param $autoLink + * @param $noFollow + * @return void + */ +function getCommentAuthor($obj, $autoLink = null, $noFollow = null) +{ + $options = Helper::options(); + $autoLink = $autoLink ? $autoLink : $options->commentsShowUrl; + $noFollow = $noFollow ? $noFollow : $options->commentsUrlNofollow; + if ($obj->url && $autoLink) { + echo 'url, $options->index) == $obj->url ? null : ' target="_blank"') . + ">" . + $obj->author . + ""; + } else { + echo $obj->author; + } +} diff --git a/core/index.php b/core/index.php new file mode 100644 index 0000000..e88ad2a --- /dev/null +++ b/core/index.php @@ -0,0 +1,14 @@ +stack = $this->getCategories(getMiddleTopCategoryIds()); + } +} + +/** + * 判断当前是菜单否激活 + * @param $self + * @return string + */ +function isActiveMenu($self, $slug): string +{ + if ($self->is("category") || $self->is("post")) { + if ($self->category === $slug) { + return "jasmine-primary-bg shadow-lg !text-white"; + } + } + return ""; +} diff --git a/core/options.php b/core/options.php new file mode 100644 index 0000000..75fef15 --- /dev/null +++ b/core/options.php @@ -0,0 +1,201 @@ +addInput($icon); + + $logoUrl = new Text("logoUrl", null, null, _t("LOGO"), _t("图片地址, 用于显示站点 LOGO ,留空不显示")); + $form->addInput($logoUrl); + $stickyPost = new Text( + "stickyPost", + null, + null, + "置顶文章", + "格式:文章的ID || 文章的ID || 文章的ID" + ); + $form->addInput($stickyPost); + $avatarWebsite = new Radio( + "avatarWebsite", + [ + "gravatar" => _t("Gravatar"), + "qq" => _t("QQ 头像"), + ], + "gravatar", + _t("设置显示头像优先级"), + _t("默认通过邮箱,获取 Gravatar 头像") + ); + $customStyle = new Textarea("customStyle", null, null, "自定义样式", "不需要添加 <style> 标签"); + $form->addInput($customStyle); + + $customScript = new Textarea("customScript", null, null, "自定义脚本", "不需要添加 <script> 标签"); + $form->addInput($customScript); + backupThemeData(); +} + + +/** + * 备份主题数据 + * @return void + */ +function backupThemeData() +{ + $name = "sagrre";//注意修改主题名称,这里也要跟着修改; + $db = Typecho_Db::get(); + if (isset($_POST["type"])) { + + if ($_POST["type"] == "创建备份") { + $value = $db->fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name) + )["value"]; + if ( + $db->fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + ) + ) { + + $db->query( + $db + ->update("table.options") + ->rows(["value" => $value]) + ->where("name = ?", "theme:" . $name . "_backup") + ); + Notice::alloc()->set("备份更新成功", "success"); + Options::alloc()->response->redirect(Common::url("options-theme.php", Options::alloc()->adminUrl)); + ?> + + query( + $db + ->insert("table.options") + ->rows(["name" => "theme:" . $name . "_backup", "user" => "0", "value" => $value]) + ); + Notice::alloc()->set("备份成功", "success"); + Options::alloc()->response->redirect(Common::url("options-theme.php", Options::alloc()->adminUrl)); + ?> + fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + ) + ) { + + $_value = $db->fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + )["value"]; + $db->query( + $db + ->update("table.options") + ->rows(["value" => $_value]) + ->where("name = ?", "theme:" . $name) + ); + Notice::alloc()->set("备份还原成功", "success"); + Options::alloc()->response->redirect(Common::url("options-theme.php", Options::alloc()->adminUrl)); + ?> + set("无备份数据,请先创建备份", "error"); + Options::alloc()->response->redirect(Common::url("options-theme.php", Options::alloc()->adminUrl)); + ?> + + + fetchRow( + $db + ->select() + ->from("table.options") + ->where("name = ?", "theme:" . $name . "_backup") + ) + ) { + + $db->query($db->delete("table.options")->where("name = ?", "theme:" . $name . "_backup")); + Notice::alloc()->set("删除备份成功", "success"); + Options::alloc()->response->redirect(Common::url("options-theme.php", Options::alloc()->adminUrl)); + ?> + set("无备份数据,无法删除", "success"); + Options::alloc()->response->redirect(Common::url("options-theme.php", Options::alloc()->adminUrl)); + ?> + + + + + +
    请先点击右下角的保存设置按钮,创建备份!

    + + +
    '; +} +/** + * 输出所有分类 + * @return void + */ +function getCategoryies() +{ + $db = Typecho_Db::get(); + $prow = $db->fetchAll( + $db + ->select() + ->from("table.metas") + ->where("type = ?", "category") + ); + $text = ""; + foreach ($prow as $item) { + $text .= $item["name"] . "(" . $item["mid"] . ")" . "    "; + } + return $text; +} diff --git a/core/post.php b/core/post.php new file mode 100644 index 0000000..87e9414 --- /dev/null +++ b/core/post.php @@ -0,0 +1,122 @@ +fetchAll( + $db + ->select("DISTINCT table.contents.cid, table.contents.*") + ->from("table.contents") + ->join("table.relationships", "table.contents.cid = table.relationships.cid") + ->join("table.metas", "table.metas.mid = table.relationships.mid") + ->where("table.relationships.mid <> ?", getOptions()->shuoshuoCategoryId) + ->where("table.metas.type = ?", "category") + ->where( + "table.contents.type = ? AND table.contents.status = ? AND table.contents.created < ?", + "post", + "publish", + $options->time + ) + ->order("table.contents.commentsNum", Typecho_Db::SORT_DESC) + ->limit($limit), + [Typecho_Widget::widget("Widget_Abstract_Contents"), "filter"] + ); + return $posts; +} + +/** + * 获取文章归档 + * @param $widget + * @return array + */ +function getArchives($widget) +{ + $db = Typecho_Db::get(); + $rows = $db->fetchAll( + $db + ->select() + ->from("table.contents") + ->order("table.contents.created", Typecho_Db::SORT_DESC) + ->where("table.contents.type = ?", "post") + ->where("table.contents.status = ?", "publish") + ); + + $stat = []; + foreach ($rows as $row) { + $row = $widget->filter($row); + $arr = [ + "cid" => $row["cid"], + "title" => $row["title"], + "permalink" => $row["permalink"], + ]; + $stat[date("Y", $row["created"])][$row["created"]] = $arr; + } + return $stat; +} + +class Widget_Post_Random extends Widget_Abstract_Contents +{ + public function __construct($request, $response, $params = null) + { + parent::__construct($request, $response, $params); + $this->parameter->setDefault(["pageSize" => 1, "parentId" => 0, "ignoreAuthor" => false, "mid" => 0, "cid" => 0]); + } + + public function execute() + { + $adapterName = $this->db->getAdapterName(); //兼容非MySQL数据库 + if ( + $adapterName == "pgsql" || + $adapterName == "Pdo_Pgsql" || + $adapterName == "Pdo_SQLite" || + $adapterName == "SQLite" + ) { + $order_by = "RANDOM()"; + } else { + $order_by = "RAND()"; + } + $select = $this->select() + ->from("table.contents") + ->join("table.relationships", "table.contents.cid = table.relationships.cid"); + if ($this->parameter->mid > 0) { + $select->where("table.relationships.mid = ?", $this->parameter->mid); + } + $select + ->where("table.contents.cid <> ?", $this->parameter->cid) + ->where("table.contents.password IS NULL OR table.contents.password = ''") + ->where("table.contents.type = ?", "post") + ->limit($this->parameter->pageSize) + ->order($order_by); + $this->db->fetchAll($select, [$this, "push"]); + } +} + +/** + * 当前文章分类是否为说说分类 + * @return false + */ +function isShuoShuoType($cid) +{ + $shuoshuoCategoryId = getOptions()->shuoshuoCategoryId; + if (empty($shuoshuoCategoryId)) { + return false; + } + $db = getDb(); + $row = $db->fetchRow( + $db + ->select() + ->from("table.relationships") + ->where("table.relationships.cid = ? and table.relationships.mid = ?", $cid, $shuoshuoCategoryId) + ); + return !empty($row); +} diff --git a/core/utils.php b/core/utils.php new file mode 100644 index 0000000..4633ca1 --- /dev/null +++ b/core/utils.php @@ -0,0 +1,257 @@ +leftSidebarMenu, true); +} + +/** + * 获取置顶文章 + */ +function getStickyPost(): array +{ + $sticky_text = getOptions()->stickyPost; + if (empty($sticky_text)) { + return []; + } + $sticky_cids = explode("||", strtr($sticky_text, " ", "")); + return $sticky_cids; +} + +/** + * 获取顶部分类 + * @return array + */ +function getMiddleTopCategoryIds(): array +{ + $middleTopCategoryIds = getOptions()->middleTopCategoryIds; + return array_map("intval", explode("||", strtr($middleTopCategoryIds, " ", ""))); +} + +/** + * 获取文章自定义字段 + * @param $cid 文章id + * @param $filedNames 字段名 + */ +function getFieldByCidAndName($cid, $filedName) +{ + $db = Typecho_Db::get(); + $field = $db->fetchRow( + $db + ->select() + ->from("table.fields") + ->where("cid = ? and name = ?", $cid, $filedName) + ); + return $field; +} + +/** + * 获取文章缩略图 + * @param $cid 文章 id + * @return string 图片 url + */ +function getThumbnail($cid, $defaultThumbnail): string +{ + $filed = getFieldByCidAndName($cid, "thumbnail"); + if (empty($filed)) { + return $defaultThumbnail; + } + $thumbnail = $filed[$filed["type"] . "_value"]; + // 使用自定义字段,设置缩略图 + if (!empty($thumbnail)) { + return $thumbnail; + } + return $defaultThumbnail; +} + +/**获取文章描述 2025.11.04**/ +function getDescription($cid, $defaultDescription = ""): string +{ + $field = getFieldByCidAndName($cid, "description"); + if (empty($field)) { + return $defaultDescription; + } + $description = $field[$field["type"] . "_value"]; + // 使用自定义字段,设置描述 + if (!empty($description)) { + return $description; + } + return $defaultDescription; +} + +/** + * 人性化日期 + * @param $created 日期 + * @return string xx 前 + */ +function getHumanizedDate(int $created) +{ + if (Helper::options()->timeFormat != "") { + return date(Helper::options()->timeFormat, $created); + } else { + //计算时间差 + $diff = time() - $created; + $d = floor($diff / 3600 / 24); + + $Y = date("Y", $created); + + //输出时间 + if (date("Y-m-d", $created) == date("Y-m-d")) { + return "今天"; + } elseif ($d <= 1) { + return "昨天"; + } elseif ($d == 2) { + return "前天"; + } elseif ($d <= 31) { + return $d . " 天前"; + } elseif ($Y == date("Y")) { + return date("m-d", $created); + } else { + return date("Y-m-d", $created); + } + } +} + +/** + * 获取版权日期 + */ +function getCopyrightDate(): string +{ + $text = ""; + if (!empty(getOptions()->startDate)) { + $startDate = date_create(getOptions()->startDate); + $text .= date_format($startDate, "Y"); + $text .= " - "; + } + $text .= date("Y", time()); + return $text; +} + +/** + * 获取评论头像 + * @param $mail 邮箱 + * @package $isOwner 是否为作者 + */ +function getAvatarByMail($mail, $isOwner = false) +{ + if ($isOwner) { + $authorAvatar = getOptions()->authorAvatar; + if (!empty($authorAvatar)) { + return $authorAvatar; + } + } + $gravatarsUrl = "https://cravatar.cn/avatar/"; + $mailLower = strtolower($mail); + $md5MailLower = md5($mailLower); + $avatarWebsite = getOptions()->avatarWebsite; + if (!isset($avatarWebsite) || $avatarWebsite == "gravatar") { + return $gravatarsUrl . $md5MailLower . "?d=mm"; + } + $qqMail = str_replace("@qq.com", "", $mailLower); + if (strstr($mailLower, "qq.com") && is_numeric($qqMail) && strlen($qqMail) < 11 && strlen($qqMail) > 4) { + return getQQAvatar($qqMail); + } else { + return $gravatarsUrl . $md5MailLower . "?d=mm"; + } +} + +/** + * 获取 QQ 头像 + */ +function getQQAvatar($qq) +{ + $url = "https://s.p.qq.com/pub/get_face?img_type=3&uin=" . $qq; + $response = get_headers($url, 1)["Location"]; + return str_replace("http://", "https://", $response); +} + +/** + * 获取主题版本号 + */ +function getThemeVersion() +{ + $info = Plugin::parseInfo(Helper::options()->themeFile(Helper::options()->theme, "index.php")); + return $info["version"]; +} + +/** + * 处理正文 + * @param $content + * @return array|string|string[]|null + */ +function handleContent($content) +{ + return imageLazyLoad($content); +} + +/** + * 图片懒加载 + * @param $content + * @return array|string|string[]|null + */ +function imageLazyLoad($content) +{ + return preg_replace("/]+)>/i", '', $content); +} + +/** + * 判断插件是否可用 add by Meteor + * + * @return bool + */ +function isPluginAvailable($name) +{ + $plugins = Typecho_Plugin::export(); + $plugins = $plugins["activated"]; + return is_array($plugins) && array_key_exists($name, $plugins); +} + +/** + * 获取选项值,无法获取则返回默认值数据 + * @param $name 选项名 + * @param $defaultValue 默认值 + */ +function getOptionValueOrDefault($name, $defaultValue) +{ + return getOptions()->$name ? getOptions()->$name : $defaultValue; +} + +/** + * 查找数组选项值,无法获取则返回默认值 + * @param $optionName 名称 + * @param $searchName 数组名 + * @param $defaultValue 默认值 + */ +function inArrayOptionValueOrDefault($optionName, $searchName, $defaultValue) +{ + if ($optionValue = getOptions()->$optionName) { + return in_array($searchName, $optionValue); + } else { + return $defaultValue; + } +} diff --git a/footer.php b/footer.php new file mode 100644 index 0000000..e5375bd --- /dev/null +++ b/footer.php @@ -0,0 +1,206 @@ + 0 && !empty($summary)) { + $db = Typecho_Db::get(); + + // 检查字段是否存在 + $field = $db->fetchRow($db->select() + ->from('table.fields') + ->where('cid = ?', $postId) + ->where('name = ?', 'description')); + + if ($field) { + // 更新字段 + $db->query($db->update('table.fields') + ->rows(array('str_value' => $summary)) + ->where('cid = ?', $postId) + ->where('name = ?', 'description')); + } else { + // 插入新字段 + $db->query($db->insert('table.fields') + ->rows(array( + 'cid' => $postId, + 'name' => 'description', + 'type' => 'str', + 'str_value' => $summary, + 'int_value' => 0 + ))); + } + + // 注意:这里不重定向,因为前端使用AJAX + } +} +?> + + +footer(); ?> + +
    +
      + + + + + +
    +
    + + + + + + + + + +fields->zhaiyao):?> +is("post")): ?> + + + + + + diff --git a/functions.php b/functions.php new file mode 100644 index 0000000..73d614a --- /dev/null +++ b/functions.php @@ -0,0 +1,427 @@ +commentsMaxNestingLevels=999; + Helper::options()->commentsOrder="DESC"; +} +/** + * 文章与独立页自定义字段 + */ +function themeFields(Typecho_Widget_Helper_Layout $layout){ +$zhaiyao=new Typecho_Widget_Helper_Form_Element_Radio('zhaiyao',array('0'=>_t('不启用'),'1'=>_t('启用')),'0',_t('智能摘要'),_t("请选择是否启用AI摘要,默认不启用")); +$layout->addItem($zhaiyao); +$banner=new Typecho_Widget_Helper_Form_Element_Textarea("thumbnail",null,null,_t("自定封面"),_t("输入一个图片 url,作为缩略图显示在文章列表,没有则自动从文章附件获取")); +$banner->input->setAttribute('style','width:100%;'); +$banner->input->setAttribute('placeholder','请输入图片地址...'); +$layout->addItem($banner); +$description=new Typecho_Widget_Helper_Form_Element_Textarea("description",null,null,_t("自定摘要"),_t("输入文章摘要,则显示自定义摘要。如果留空,将自动从内容中截取")); +$description->input->setAttribute('style','width:100%;height:100px;'); +$description->input->setAttribute('placeholder','请输入文章摘要...'); +$layout->addItem($description); + // 🔧 关键修复:添加编辑摘要字段 + if (class_exists('EditHistory_Plugin')) { + EditHistory_Plugin::addFieldToLayout($layout); + } + + // 在themeFields函数中添加: +if (class_exists('ArticleWeather_Plugin')) { + ArticleWeather_Plugin::addFieldToLayout($layout); +} +} +$custom_functions=__DIR__."/custom/functions.php"; +if(file_exists($custom_functions)){ + include_once$custom_functions; +} +//读者墙 注册会员数排序 2023.8.4 随机排序 +function getusers($limit=24,$masterEmail='zhaowenyangld@126.com'){ + $db=Typecho_Db::get(); + $sql=$db->select('COUNT(screenName) AS cnt','screenName','url','mail')->from('table.users')->where('mail != ?',$masterEmail)->group('mail')->order('RAND()',Typecho_Db::SORT_DESC)->limit($limit); + $result=$db->fetchAll($sql); + if($result){ + foreach($result as $value){ + if(!$value['url']){ + $value['url']='mailto:'.$value['mail']; + } + $mostactive.='
  • '.$value['screenName'].'VIP
  • '; + } + echo$mostactive; + } +} +//读者墙 按评论数排序 2023.8.4 随机排序 +function getMostVisitors($limit=96,$masterEmail='zhaowenyangld@126.com'){ + $db=Typecho_Db::get(); + $sql=$db->select('COUNT(author) AS cnt','author','url','mail')->from('table.comments')->where('mail != ?',$masterEmail)->group('mail')->order('RAND()',Typecho_Db::SORT_DESC)->limit($limit); + $result=$db->fetchAll($sql); + if($result){ + foreach($result as $value){ + if(!$value['url']){ + $value['url']='mailto:'.$value['mail']; + } + $mostactive.='
  • '.$value['author'].'+'.$value['cnt'].'
  • '; + } + echo$mostactive; + } +} +//读者墙 按评论数排序 2023.8.4,2024.3.19 按评论数排序 +function getMostVisitorscnt($limit=32,$masterEmail='zhaowenyangld@126.com'){ + $db=Typecho_Db::get(); + $sql=$db->select('COUNT(author) AS cnt','author','url','mail')->from('table.comments')->where('mail != ?',$masterEmail)->group('mail')->order('cnt',Typecho_Db::SORT_DESC)->limit($limit); + $result=$db->fetchAll($sql); + if($result){ + foreach($result as $value){ + if(!$value['url']){ + $value['url']='mailto:'.$value['mail']; + } + $mostactive.='
  • '.$value['author'].'+'.$value['cnt'].'
  • '; + } + echo$mostactive; + } +} +//读者墙 最近访客 2024.2.21 再次启用,有问题并不是最新的,已修复问题2024.3.19 +function getRecentVisitors($limit=24,$masterEmail='zhaowenyangld@126.com'){ + $db=Typecho_Db::get(); + $sql=$db->select('COUNT(author) AS cnt','author','url','mail')->from('table.comments')->group('mail')->where('mail != ?',$masterEmail)->limit($limit)->order('MAX(created)',Typecho_Db::SORT_DESC); + $result=$db->fetchAll($sql); + if($result){ + foreach($result as $value){ + if(!$value['url']){ + $value['url']='mailto:'.$value['mail']; + } + $count=$db->fetchRow($db->select('COUNT(*)')->from('table.comments')->where('status = ?','approved')->where('mail = ?',$value['mail'])); + $commentnum=$count['COUNT(*)']; + $mostactive.='
  • '.$value['author'].'+'.$value['cnt'].'
  • '; + } + echo$mostactive; + } +} +function getRecentVisitorschuci($limit=20,$masterEmail='zhaowenyangld@126.com'){ + $db=Typecho_Db::get(); + $sql=$db->select('COUNT(author) AS cnt','author','url','mail')->from('table.comments')->where('mail != ?',$masterEmail)->group('mail')->having('COUNT(*) = 1')->limit($limit)->order('MAX(created)',Typecho_Db::SORT_DESC); + $result=$db->fetchAll($sql); + if($result){ + $mostactive=''; + foreach($result as $value){ + if(!$value['url']){ + $value['url']='mailto:'.$value['mail']; + } + $mostactive.='
  • '.htmlspecialchars($value['author']).'+'.$value['cnt'].'
  • '; + } + echo$mostactive; + } +} +/** + * 评论者认证等级 + 身份 + * 2023.8.4 + * @author Chrison + * @access public + * @param str $email 评论者邮址 + * @return result + */ +function commentApprove($widget,$email=NULL){ + $result=array("state"=>-1,"isAuthor"=>0,"userLevel"=>'',"userDesc"=>'',"bgColor"=>'',"commentNum"=>0); + if(empty($email))return$result; + $result['state']=1; + $master=array('710062962@qq.com','zhaowenyangld@126.com'); + if($widget->authorId==$widget->ownerId){ + $result['isAuthor']=1; + $result['userLevel']='( L10 )'; + $result['userDesc']='很帅的博主'; + $result['bgColor']='#dd3333'; + $result['commentNum']=999; + }else if(in_array($email,$master)){ + $result['userLevel']='( L10 )'; + $result['userDesc']='相亲相爱的一家人'; + $result['bgColor']='#dd3333'; + $result['commentNum']=888; + }else{ + $db=Typecho_Db::get(); + $commentNumSql=$db->fetchAll($db->select(array('COUNT(cid)'=>'commentNum'))->from('table.comments')->where('mail = ?',$email)); + $commentNum=$commentNumSql[0]['commentNum']; + $linkSql=$db->fetchAll($db->select()->from('table.links')->where('user = ?',$email)); + if($commentNum==1){ + $result['userLevel']='( L1 )'; + $result['bgColor']='#999999'; + $userDesc='你已经向目的地迈出了第一步!'; + }else{ + if($commentNum<30&&$commentNum>1){ + $result['userLevel']='( L2 )'; + $result['bgColor']='#FF6600'; + }elseif($commentNum<90&&$commentNum>=30){ + $result['userLevel']='( L3 )'; + $result['bgColor']='#A0DAD0'; + }elseif($commentNum<270&&$commentNum>=90){ + $result['userLevel']='( L4 )'; + $result['bgColor']='#A0DAD0'; + }elseif($commentNum<810&&$commentNum>=270){ + $result['userLevel']='( L5 )'; + $result['bgColor']='#A0DAD0'; + }elseif($commentNum<1000&&$commentNum>=810){ + $result['userLevel']='( L6 )'; + $result['bgColor']='#A0DAD0'; + }elseif($commentNum>=1000){ + $result['userLevel']='( L7 )'; + $result['bgColor']='#A0DAD0'; + } + $userDesc='你已经向目的地前进了'.$commentNum.'步!'; + } + if($linkSql){ + $result['userLevel']='L1'; + $result['bgColor']='#21b9bb'; + $userDesc='🔗'.$linkSql[0]['description'].' ✌️'.$userDesc; + } + $result['userDesc']=$userDesc; + $result['commentNum']=$commentNum; + } + return$result; +} +/** +* 判断时间区间 +* +* 2023.8.8 +*/ +function getTimeLabel($from){ + $timeDiff=time()-$from; + if($timeDiff<24*60*60){ + return'新鲜出炉'; + }elseif($timeDiff<7*24*60*60){ + return'有点过时'; + }else{ + return'成年旧货'; + } +} +/* + * owo 表情 2023.8.29 https://fantao.me/7.html#comment-367 + */ +function parsePaopaoBiaoqingCallback($match){ + return''; +} +function parseAruBiaoqingCallback($match){ + return''; +} +function parseBiaoQing($content){ + $content=preg_replace_callback('/\:\:\(\s*(呵呵|哈哈|吐舌|太开心|笑眼|花心|小乖|乖|捂嘴笑|滑稽|你懂的|不高兴|怒|汗|黑线|泪|真棒|喷|惊哭|阴险|鄙视|酷|啊|狂汗|what|疑问|酸爽|呀咩爹|委屈|惊讶|睡觉|笑尿|挖鼻|吐|犀利|小红脸|懒得理|勉强|爱心|心碎|玫瑰|礼物|彩虹|太阳|星星月亮|钱币|茶杯|蛋糕|大拇指|胜利|haha|OK|沙发|手纸|香蕉|便便|药丸|红领巾|蜡烛|音乐|灯泡|开心|钱|咦|呼|冷|生气|弱|吐血)\s*\)/is','parsePaopaoBiaoqingCallback',$content); + $content=preg_replace_callback('/\:\@\(\s*(高兴|小怒|脸红|内伤|装大款|赞一个|害羞|汗|吐血倒地|深思|不高兴|无语|亲亲|口水|尴尬|中指|想一想|哭泣|便便|献花|皱眉|傻笑|狂汗|吐|喷水|看不见|鼓掌|阴暗|长草|献黄瓜|邪恶|期待|得意|吐舌|喷血|无所谓|观察|暗地观察|肿包|中枪|大囧|呲牙|抠鼻|不说话|咽气|欢呼|锁眉|蜡烛|坐等|击掌|惊喜|喜极而泣|抽烟|不出所料|愤怒|无奈|黑线|投降|看热闹|扇耳光|小眼睛|中刀)\s*\)/is','parseAruBiaoqingCallback',$content); + return$content; +} +/*输出作者发表的评论 2024.1.6*/ +class Widget_Post_AuthorComment extends Widget_Abstract_Comments{ + public function execute(){ + global$AuthorCommentId; + $select=$this->select()->limit($this->parameter->pageSize)->where('table.comments.status = ?','approved')->where('table.comments.authorId = ?',$AuthorCommentId)->where('table.comments.type = ?','comment')->order('table.comments.coid',Typecho_Db::SORT_DESC); + $this->db->fetchAll($select,array($this,'push')); + } +} +//获得读者墙(按访问时间排序)getFriendWall函数名后加了个b,以便分别调用,2024.3.19 王语双博客 +function getFriendWallb(){ + $db=Typecho_Db::get(); + $sql=$db->select('COUNT(author) AS cnt','max(coid) ttt','author','url','mail')->from('table.comments')->where('status = ?','approved')->where('type = ?','comment')->where('authorId = ?','0')->where('mail != ?','80060631@qq.com')->group('author')->order('ttt',Typecho_Db::SORT_DESC)->limit('12'); +$result=$db->fetchAll($sql); +if(count($result)>0){ + $maxNum=$result[0]['cnt']; + foreach($result as$value){ + $mostactive.='
  • '.$value['author'].'+'.$value['cnt'].'
    '.$value['url'].'
  • '; + } + echo$mostactive; + } +} +/*输出作者其他信息 2024.1.6*/ +function userok($id){ + $db=Typecho_Db::get(); + $userinfo=$db->fetchRow($db->select()->from('table.users')->where('table.users.uid=?',$id)); + return$userinfo; +} + +/** + * 计算相对时间(评论相对于文章发布时间) + * @param int $commentTimestamp 评论时间戳 + * @param int $postTimestamp 文章发布时间戳 + * @param bool $isAdmin 是否为管理员 + * @return string 格式化后的相对时间 + */ +function getRelativeTime($commentTimestamp, $postTimestamp = null, $isAdmin = false) { + // 如果是管理员,只返回空字符串 + if ($isAdmin) { + return ""; + } + + // 如果没有传入文章时间,尝试从全局获取当前文章时间 + if ($postTimestamp === null) { + global $postCreated; + if (isset($postCreated)) { + $postTimestamp = $postCreated; + } else { + // 如果无法获取文章时间,返回空 + return ""; + } + } + + // 确保评论时间在文章时间之后 + if ($commentTimestamp <= $postTimestamp) { + return "刚刚发文"; + } + + $diff = $commentTimestamp - $postTimestamp; + + // 计算时间差 + $minute = 60; + $hour = 60 * $minute; + $day = 24 * $hour; + $month = 30 * $day; + $year = 365 * $day; + + if ($diff < $minute) { + return "发文" . $diff . "秒后"; + } elseif ($diff < $hour) { + $minutes = floor($diff / $minute); + return "发文" . $minutes . "分钟后"; + } elseif ($diff < $day) { + $hours = floor($diff / $hour); + return "发文" . $hours . "小时后"; + } elseif ($diff < $month) { + $days = floor($diff / $day); + return "发文" . $days . "天后"; + } elseif ($diff < $year) { + $months = floor($diff / $month); + return "发文" . $months . "月后"; + } else { + $years = floor($diff / $year); + return "发文" . $years . "年后"; + } +} + +/** + * 获取人性化的时间显示(包含相对时间) + * @param int $commentTimestamp 评论时间戳 + * @param bool $isAdmin 是否为管理员 + * @return string 格式化时间 + */ +function getHumanizedTimeWithRelative($commentTimestamp, $isAdmin = false) { + // 获取文章发布时间 + global $postCreated; + + // 原始的时间格式 + $original = date('Y-m-d H:i:s', $commentTimestamp); + + // 计算相对时间 + $relative = getRelativeTime($commentTimestamp, $postCreated, $isAdmin); + + // 如果是管理员,不显示括号内容 + if ($isAdmin || empty($relative)) { + return $original; + } + + // 组合返回,括号前后加空格 + return $original . ' ( ' . $relative . ' )'; +} + +/** + * 专门用于评论的时间显示函数 + * @param int $commentTimestamp 评论时间戳 + * @param bool $isAdmin 是否为管理员 + * @return string 格式化时间 + */ +function getCommentTime($commentTimestamp, $isAdmin = false) { + global $postCreated; + + if ($isAdmin) { + // 管理员只显示详细时间 + return date('Y-m-d H:i:s', $commentTimestamp); + } else { + // 普通用户显示详细时间 + 相对时间 + $original = date('Y-m-d H:i:s', $commentTimestamp); + $relative = getRelativeTime($commentTimestamp, $postCreated, false); + return $original . ' ( ' . $relative . ' )'; + } +} + +/** + * 获取简单的相对时间(旧版兼容函数) + * @param int $commentTimestamp 评论时间戳 + * @return string 相对时间 + */ +function getSimpleRelativeTime($commentTimestamp) { + global $postCreated; + return getRelativeTime($commentTimestamp, $postCreated, false); +} + + +/** + * 获取评论的实际序号(解决ID不连续问题) + * @param int $coid 评论ID + * @return int 实际序号 + */ +function getActualCommentNumber($coid) { + $db = Typecho_Db::get(); + + // 查询已审核评论的序号 + $result = $db->fetchRow($db->select('COUNT(*) as cnt') + ->from('table.comments') + ->where('coid <= ?', $coid) + ->where('status = ?', 'approved') + ->where('type = ?', 'comment')); + + return $result['cnt'] ?: 0; +} + +/** + * 获取文章评论的实际序号 + * @param int $coid 评论ID + * @param int $cid 文章ID + * @return int 文章内序号 + */ +function getPostCommentNumber($coid, $cid) { + $db = Typecho_Db::get(); + + // 查询当前文章已审核评论的序号 + $result = $db->fetchRow($db->select('COUNT(*) as cnt') + ->from('table.comments') + ->where('cid = ?', $cid) + ->where('coid <= ?', $coid) + ->where('status = ?', 'approved') + ->where('type = ?', 'comment')); + + return $result['cnt'] ?: 0; +} +/** + * 往年今日文章调用函数 + * @param int $created 文章创建时间戳 + */ +function historyToday($created){ + $date=date('m/d',$created); + $time=time(); + $db=Typecho_Db::get(); + $prefix=$db->getPrefix(); + $limit=12; + $adapter=$db->getAdapterName(); + if("Pdo_SQLite"===$adapter||"SQLite"===$adapter){ + $sql="SELECT * FROM `{$prefix}contents` WHERE strftime('%m-%d', datetime(created, 'unixepoch')) = '{$date}' AND created <= {$time} AND created != {$created} AND type = 'post' AND status = 'publish' AND (password IS NULL OR password = '') LIMIT {$limit}"; + }else{ + $sql="SELECT * FROM `{$prefix}contents` WHERE DATE_FORMAT(FROM_UNIXTIME(created), '%m/%d') = '{$date}' AND created <= {$time} AND created != {$created} AND type = 'post' AND status = 'publish' AND (password IS NULL OR password = '') LIMIT {$limit}"; + } + $result=$db->query($sql); + $historyTodayList=[]; + if($result instanceof Traversable){ + foreach($result as$item){ + $item=Typecho_Widget::widget('Widget_Abstract_Contents')->push($item); + $title=htmlspecialchars($item['title']); + $permalink=$item['permalink']; + $historyDate=date('Y-m-d',$item['created']); + $historyTodayList[]=['title'=>$title,'permalink'=>$permalink,'date'=>$historyDate]; + } + } + if(!empty($historyTodayList)){ + echo""; + foreach($historyTodayList as$item){ + $displayTitle=mb_strlen($item['title'],'UTF-8')>15?mb_substr($item['title'],0,15,'UTF-8').'...':$item['title']; + echo"{$displayTitle}"; + } + echo""; + } +} +?> \ No newline at end of file diff --git a/header.php b/header.php new file mode 100644 index 0000000..ab322b2 --- /dev/null +++ b/header.php @@ -0,0 +1,85 @@ + + + + + + + is("post") || $this->is("page") || $this->is("attachment")): ?> + + getDescription()) { + echo $this->getDescription(); + } + } else { + echo $d; + } + ?>"/> + + <?php + $this->archiveTitle( + [ + "category" => _t("%s"), + "search" => _t("%s"), + "tag" => _t("%s"), + "author" => _t("%s"), + ], + "", + " - " + ); + $this->options->title(); + ?> - 知识人间烟火 + header("description=&generator=&pingback=&template=&xmlrpc=&wlw=&commentReply=&keywords="); ?> + + + + + + + + + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..a17c61b --- /dev/null +++ b/index.php @@ -0,0 +1,30 @@ + + * Github:https://github.com/xige/ + * Demo:https://www.shitoucuo.com/ + * + * @package sagrre + * @author sagrre + * @version 1.2 + * @link https://www.xigeshudong.com/ + */ +if (!defined("__TYPECHO_ROOT_DIR__")) {exit();} ?> + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> + is("index") && $this->_currentPage == 1): ?> + need("component/post-top.php"); ?> + + need("component/post-item.php"); ?> + need("component/paging.php"); ?> +
    +
    + need("footer.php"); ?> + + + diff --git a/owo/OwO.json b/owo/OwO.json new file mode 100644 index 0000000..30b3506 --- /dev/null +++ b/owo/OwO.json @@ -0,0 +1,123 @@ +{ +"泡泡":{"type":"image","container":[{"icon":"","data":"::(呵呵)","text":"呵呵"},{"icon":"","data":"::(哈哈)","text":"哈哈"},{"icon":"","data":"::(吐舌)","text":"吐舌"},{"icon":"","data":"::(太开心)","text":"太开心"},{"icon":"","data":"::(笑眼)","text":"笑眼"},{"icon":"","data":"::(花心)","text":"花心"},{"icon":"","data":"::(小乖)","text":"小乖"},{"icon":"","data":"::(乖)","text":"乖"},{"icon":"","data":"::(捂嘴笑)","text":"捂嘴笑"},{"icon":"","data":"::(滑稽)","text":"滑稽"},{"icon":"","data":"::(你懂的)","text":"你懂的"},{"icon":"","data":"::(不高兴)","text":"不高兴"},{"icon":"","data":"::(怒)","text":"怒"},{"icon":"","data":"::(汗)","text":"汗"},{"icon":"","data":"::(黑线)","text":"黑线"},{"icon":"","data":"::(泪)","text":"泪"},{"icon":"","data":"::(真棒)","text":"真棒"},{"icon":"","data":"::(喷)","text":"喷"},{"icon":"","data":"::(惊哭)","text":"惊哭"},{"icon":"","data":"::(阴险)","text":"阴险"},{"icon":"","data":"::(鄙视)","text":"鄙视"},{"icon":"","data":"::(酷)","text":"酷"},{"icon":"","data":"::(啊)","text":"啊"},{"icon":"","data":"::(狂汗)","text":"狂汗"},{"icon":"","data":"::(what)","text":"what"},{"icon":"","data":"::(疑问)","text":"疑问"},{"icon":"","data":"::(酸爽)","text":"酸爽"},{"icon":"","data":"::(呀咩爹)","text":"呀咩爹"},{"icon":"","data":"::(委屈)","text":"委屈"},{"icon":"","data":"::(惊讶)","text":"惊讶"},{"icon":"","data":"::(睡觉)","text":"睡觉"},{"icon":"","data":"::(笑尿)","text":"笑尿"},{"icon":"","data":"::(挖鼻)","text":"挖鼻"},{"icon":"","data":"::(吐)","text":"吐"},{"icon":"","data":"::(犀利)","text":"犀利"},{"icon":"","data":"::(小红脸)","text":"小红脸"},{"icon":"","data":"::(懒得理)","text":"懒得理"},{"icon":"","data":"::(勉强)","text":"勉强"},{"icon":"","data":"::(爱心)","text":"爱心"},{"icon":"","data":"::(心碎)","text":"心碎"},{"icon":"","data":"::(玫瑰)","text":"玫瑰"},{"icon":"","data":"::(礼物)","text":"礼物"},{"icon":"","data":"::(彩虹)","text":"彩虹"},{"icon":"","data":"::(太阳)","text":"太阳"},{"icon":"","data":"::(星星月亮)","text":"星星月亮"},{"icon":"","data":"::(钱币)","text":"钱币"},{"icon":"","data":"::(茶杯)","text":"茶杯"},{"icon":"","data":"::(蛋糕)","text":"蛋糕"},{"icon":"","data":"::(大拇指)","text":"大拇指"},{"icon":"","data":"::(胜利)","text":"胜利"},{"icon":"","data":"::(haha)","text":"haha"},{"icon":"","data":"::(OK)","text":"OK"},{"icon":"","data":"::(沙发)","text":"沙发"},{"icon":"","data":"::(手纸)","text":"手纸"},{"icon":"","data":"::(香蕉)","text":"香蕉"},{"icon":"","data":"::(便便)","text":"便便"},{"icon":"","data":"::(药丸)","text":"药丸"},{"icon":"","data":"::(红领巾)","text":"红领巾"},{"icon":"","data":"::(蜡烛)","text":"蜡烛"},{"icon":"","data":"::(音乐)","text":"音乐"},{"icon":"","data":"::(灯泡)","text":"灯泡"},{"icon":"","data":"::(开心)","text":"开心"},{"icon":"","data":"::(钱)","text":"钱"},{"icon":"","data":"::(咦)","text":"咦"},{"icon":"","data":"::(呼)","text":"呼"},{"icon":"","data":"::(冷)","text":"冷"},{"icon":"","data":"::(生气)","text":"生气"},{"icon":"","data":"::(弱)","text":"弱"}]},"阿鲁":{"type":"image","container":[{"icon":"","data":":@(高兴)","text":"高兴"},{"icon":"","data":":@(小怒)","text":"小怒"},{"icon":"","data":":@(脸红)","text":"脸红"},{"icon":"","data":":@(内伤)","text":"内伤"},{"icon":"","data":":@(装大款)","text":"装大款"},{"icon":"","data":":@(赞一个)","text":"赞一个"},{"icon":"","data":":@(害羞)","text":"害羞"},{"icon":"","data":":@(汗)","text":"汗"},{"icon":"","data":":@(吐血倒地)","text":"吐血倒地"},{"icon":"","data":":@(深思)","text":"深思"},{"icon":"","data":":@(不高兴)","text":"不高兴"},{"icon":"","data":":@(无语)","text":"无语"},{"icon":"","data":":@(亲亲)","text":"亲亲"},{"icon":"","data":":@(口水)","text":"口水"},{"icon":"","data":":@(尴尬)","text":"尴尬"},{"icon":"","data":":@(中指)","text":"中指"},{"icon":"","data":":@(想一想)","text":"想一想"},{"icon":"","data":":@(哭泣)","text":"哭泣"},{"icon":"","data":":@(便便)","text":"便便"},{"icon":"","data":":@(献花)","text":"献花"},{"icon":"","data":":@(皱眉)","text":"皱眉"},{"icon":"","data":":@(傻笑)","text":"傻笑"},{"icon":"","data":":@(狂汗)","text":"狂汗"},{"icon":"","data":":@(吐)","text":"吐"},{"icon":"","data":":@(喷水)","text":"喷水"},{"icon":"","data":":@(看不见)","text":"看不见"},{"icon":"","data":":@(鼓掌)","text":"鼓掌"},{"icon":"","data":":@(阴暗)","text":"阴暗"},{"icon":"","data":":@(长草)","text":"长草"},{"icon":"","data":":@(献黄瓜)","text":"献黄瓜"},{"icon":"","data":":@(邪恶)","text":"邪恶"},{"icon":"","data":":@(期待)","text":"期待"},{"icon":"","data":":@(得意)","text":"得意"},{"icon":"","data":":@(吐舌)","text":"吐舌"},{"icon":"","data":":@(喷血)","text":"喷血"},{"icon":"","data":":@(无所谓)","text":"无所谓"},{"icon":"","data":":@(观察)","text":"观察"},{"icon":"","data":":@(暗地观察)","text":"暗地观察"},{"icon":"","data":":@(肿包)","text":"肿包"},{"icon":"","data":":@(中枪)","text":"中枪"},{"icon":"","data":":@(大囧)","text":"大囧"},{"icon":"","data":":@(呲牙)","text":"呲牙"},{"icon":"","data":":@(抠鼻)","text":"抠鼻"},{"icon":"","data":":@(不说话)","text":"不说话"},{"icon":"","data":":@(咽气)","text":"咽气"},{"icon":"","data":":@(欢呼)","text":"欢呼"},{"icon":"","data":":@(锁眉)","text":"锁眉"},{"icon":"","data":":@(蜡烛)","text":"蜡烛"},{"icon":"","data":":@(坐等)","text":"坐等"},{"icon":"","data":":@(击掌)","text":"击掌"},{"icon":"","data":":@(惊喜)","text":"惊喜"},{"icon":"","data":":@(喜极而泣)","text":"喜极而泣"},{"icon":"","data":":@(抽烟)","text":"抽烟"},{"icon":"","data":":@(不出所料)","text":"不出所料"},{"icon":"","data":":@(愤怒)","text":"愤怒"},{"icon":"","data":":@(无奈)","text":"无奈"},{"icon":"","data":":@(黑线)","text":"黑线"},{"icon":"","data":":@(投降)","text":"投降"},{"icon":"","data":":@(看热闹)","text":"看热闹"},{"icon":"","data":":@(扇耳光)","text":"扇耳光"},{"icon":"","data":":@(小眼睛)","text":"小眼睛"},{"icon":"","data":":@(中刀)","text":"中刀"}]}, + "颜文字": { + "type": "emoticon", + "container": [ + { + "icon": "OωO", + "text": "Author: DIYgod" + }, + { + "icon": "|´・ω・)ノ", + "text": "Hi" + }, + { + "icon": "ヾ(≧∇≦*)ゝ", + "text": "开心" + }, + { + "icon": "(☆ω☆)", + "text": "星星眼" + }, + { + "icon": "(╯‵□′)╯︵┴─┴", + "text": "掀桌" + }, + { + "icon": " ̄﹃ ̄", + "text": "流口水" + }, + { + "icon": "(/ω\)", + "text": "捂脸" + }, + { + "icon": "∠( ᐛ 」∠)_", + "text": "给跪" + }, + { + "icon": "(๑•̀ㅁ•́ฅ)", + "text": "Hi" + }, + { + "icon": "→_→", + "text": "斜眼" + }, + { + "icon": "୧(๑•̀⌄•́๑)૭", + "text": "加油" + }, + { + "icon": "٩(ˊᗜˋ*)و", + "text": "有木有WiFi" + }, + { + "icon": "(ノ°ο°)ノ", + "text": "前方高能预警" + }, + { + "icon": "(´இ皿இ`)", + "text": "我从未见过如此厚颜无耻之人" + }, + { + "icon": "⌇●﹏●⌇", + "text": "吓死宝宝惹" + }, + { + "icon": "(ฅ´ω`ฅ)", + "text": "已阅留爪" + }, + { + "icon": "(╯°A°)╯︵○○○", + "text": "去吧大师球" + }, + { + "icon": "φ( ̄∇ ̄o)", + "text": "太萌惹" + }, + { + "icon": "ヾ(´・ ・`。)ノ\"", + "text": "咦咦咦" + }, + { + "icon": "( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃", + "text": "气呼呼" + }, + { + "icon": "(ó﹏ò。)", + "text": "我受到了惊吓" + }, + { + "icon": "Σ(っ °Д °;)っ", + "text": "什么鬼" + }, + { + "icon": "( ,,´・ω・)ノ\"(´っω・`。)", + "text": "摸摸头" + }, + { + "icon": "╮(╯▽╰)╭ ", + "text": "无奈" + }, + { + "icon": "o(*////▽////*)q ", + "text": "脸红" + }, + { + "icon": ">﹏<", + "text": "" + }, + { + "icon": "( ๑´•ω•) \"(ㆆᴗㆆ)", + "text": "" + }, + { + "icon": "(。•ˇ‸ˇ•。)", + "text": "" + } + ] + } + + + +} \ No newline at end of file diff --git a/owo/OwO.min.js b/owo/OwO.min.js new file mode 100644 index 0000000..b67cdb5 --- /dev/null +++ b/owo/OwO.min.js @@ -0,0 +1,154 @@ +(() => { + class OwO { + constructor(option) { + const defaultOption = { + container: document.getElementsByClassName('OwO')[0], + target: document.getElementsByTagName('textarea')[0], + position: 'down', + width: '100%', + maxHeight: '250px', + api: 'https://api.anotherhome.net/OwO/OwO.json' + }; + for (let defaultKey in defaultOption) { + if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) { + option[defaultKey] = defaultOption[defaultKey]; + } + } + this.container = option.container; + this.target = option.target; + if (option.position === 'up') { + this.container.classList.add('OwO-up'); + } + + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { + this.odata = JSON.parse(xhr.responseText); + this.init(option); + } + else { + console.log('OwO data request was unsuccessful: ' + xhr.status); + } + } + }; + xhr.open('get', option.api, true); + xhr.send(null); + } + + init(option) { + this.area = option.target; + this.packages = Object.keys(this.odata); + + // fill in HTML + let html = ` +
    `; + + for (let i = 0; i < this.packages.length; i++) { + + html += ` +
      `; +var type = this.odata[this.packages[i]].type; + let opackage = this.odata[this.packages[i]].container; + for (let i = 0; i < opackage.length; i++) { +if (type == "image") { + html += ` +
    • ${opackage[i].icon}
    • `; +}else{ + html += ` +
    • ${opackage[i].icon}
    • `; +} + } + + html += ` +
    `; + } + + html += ` +
    +
      `; + + for (let i = 0; i < this.packages.length; i++) { + + html += ` +
    • ${this.packages[i]}
    • ` + + } + + html += ` +
    +
    +
    + `; + this.container.innerHTML = html; + + // bind event + this.logo = document.getElementsByClassName('OwO-logo')[0]; + this.logo.addEventListener('click', () => { + this.toggle(); + }); + + this.container.getElementsByClassName('OwO-body')[0].addEventListener('click', (e)=> { + let target = null; + if (e.target.classList.contains('OwO-item')) { + target = e.target; + } + else if (e.target.parentNode.classList.contains('OwO-item')) { + target = e.target.parentNode; + } + if (target) { + const cursorPos = this.area.selectionEnd; + let areaValue = this.area.value; + //this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos); + if (target.dataset.id == "not-given") { + this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos); + } else { + this.area.value = areaValue.slice(0, cursorPos) + target.dataset.id + areaValue.slice(cursorPos); + } + this.area.focus(); + this.toggle(); + } + }); + + this.packagesEle = this.container.getElementsByClassName('OwO-packages')[0]; + for (let i = 0; i < this.packagesEle.children.length; i++) { + ((index) =>{ + this.packagesEle.children[i].addEventListener('click', () => { + this.tab(index); + }); + })(i); + } + + this.tab(0); + } + + toggle() { + if (this.container.classList.contains('OwO-open')) { + this.container.classList.remove('OwO-open'); + } + else { + this.container.classList.add('OwO-open'); + } + } + + tab(index) { + const itemsShow = this.container.getElementsByClassName('OwO-items-show')[0]; + if (itemsShow) { + itemsShow.classList.remove('OwO-items-show'); + } + this.container.getElementsByClassName('OwO-items')[index].classList.add('OwO-items-show'); + + const packageActive = this.container.getElementsByClassName('OwO-package-active')[0]; + if (packageActive) { + packageActive.classList.remove('OwO-package-active'); + } + this.packagesEle.getElementsByTagName('li')[index].classList.add('OwO-package-active'); + } + } + if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { + module.exports = OwO; + } + else { + window.OwO = OwO; + } +})(); \ No newline at end of file diff --git a/owo/aru/.E4B88DE587BAE68980E69699_2x.png.hwbk b/owo/aru/.E4B88DE587BAE68980E69699_2x.png.hwbk new file mode 100644 index 0000000..8959428 Binary files /dev/null and b/owo/aru/.E4B88DE587BAE68980E69699_2x.png.hwbk differ diff --git a/owo/aru/.E4B88DE8AFB4E8AF9D_2x.png.hwbk b/owo/aru/.E4B88DE8AFB4E8AF9D_2x.png.hwbk new file mode 100644 index 0000000..758fc53 Binary files /dev/null and b/owo/aru/.E4B88DE8AFB4E8AF9D_2x.png.hwbk differ diff --git a/owo/aru/.E4B88DE9AB98E585B4_2x.png.hwbk b/owo/aru/.E4B88DE9AB98E585B4_2x.png.hwbk new file mode 100644 index 0000000..c11d688 Binary files /dev/null and b/owo/aru/.E4B88DE9AB98E585B4_2x.png.hwbk differ diff --git a/owo/aru/.E4B8ADE58880_2x.png.hwbk b/owo/aru/.E4B8ADE58880_2x.png.hwbk new file mode 100644 index 0000000..2038f81 Binary files /dev/null and b/owo/aru/.E4B8ADE58880_2x.png.hwbk differ diff --git a/owo/aru/.E4B8ADE68C87_2x.png.hwbk b/owo/aru/.E4B8ADE68C87_2x.png.hwbk new file mode 100644 index 0000000..bb758bd Binary files /dev/null and b/owo/aru/.E4B8ADE68C87_2x.png.hwbk differ diff --git a/owo/aru/.E4B8ADE69EAA_2x.png.hwbk b/owo/aru/.E4B8ADE69EAA_2x.png.hwbk new file mode 100644 index 0000000..55c4e3f Binary files /dev/null and b/owo/aru/.E4B8ADE69EAA_2x.png.hwbk differ diff --git a/owo/aru/.E4BAB2E4BAB2_2x.png.hwbk b/owo/aru/.E4BAB2E4BAB2_2x.png.hwbk new file mode 100644 index 0000000..6c9cf30 Binary files /dev/null and b/owo/aru/.E4BAB2E4BAB2_2x.png.hwbk differ diff --git a/owo/aru/.E4BEBFE4BEBF_2x.png.hwbk b/owo/aru/.E4BEBFE4BEBF_2x.png.hwbk new file mode 100644 index 0000000..4be59c2 Binary files /dev/null and b/owo/aru/.E4BEBFE4BEBF_2x.png.hwbk differ diff --git a/owo/aru/.E582BBE7AC91_2x.png.hwbk b/owo/aru/.E582BBE7AC91_2x.png.hwbk new file mode 100644 index 0000000..2efb4d2 Binary files /dev/null and b/owo/aru/.E582BBE7AC91_2x.png.hwbk differ diff --git a/owo/aru/.E58685E4BCA4_2x.png.hwbk b/owo/aru/.E58685E4BCA4_2x.png.hwbk new file mode 100644 index 0000000..78b3837 Binary files /dev/null and b/owo/aru/.E58685E4BCA4_2x.png.hwbk differ diff --git a/owo/aru/.E587BBE68E8C_2x.png.hwbk b/owo/aru/.E587BBE68E8C_2x.png.hwbk new file mode 100644 index 0000000..c97e00a Binary files /dev/null and b/owo/aru/.E587BBE68E8C_2x.png.hwbk differ diff --git a/owo/aru/.E58FA3E6B0B4_2x.png.hwbk b/owo/aru/.E58FA3E6B0B4_2x.png.hwbk new file mode 100644 index 0000000..5b13dbc Binary files /dev/null and b/owo/aru/.E58FA3E6B0B4_2x.png.hwbk differ diff --git a/owo/aru/.E59090E8888C_2x.png.hwbk b/owo/aru/.E59090E8888C_2x.png.hwbk new file mode 100644 index 0000000..b038f8e Binary files /dev/null and b/owo/aru/.E59090E8888C_2x.png.hwbk differ diff --git a/owo/aru/.E59090E8A180E58092E59CB0_2x.png.hwbk b/owo/aru/.E59090E8A180E58092E59CB0_2x.png.hwbk new file mode 100644 index 0000000..9e63eee Binary files /dev/null and b/owo/aru/.E59090E8A180E58092E59CB0_2x.png.hwbk differ diff --git a/owo/aru/.E59090_2x.png.hwbk b/owo/aru/.E59090_2x.png.hwbk new file mode 100644 index 0000000..5ebe288 Binary files /dev/null and b/owo/aru/.E59090_2x.png.hwbk differ diff --git a/owo/aru/.E591B2E78999_2x.png.hwbk b/owo/aru/.E591B2E78999_2x.png.hwbk new file mode 100644 index 0000000..e1f2d73 Binary files /dev/null and b/owo/aru/.E591B2E78999_2x.png.hwbk differ diff --git a/owo/aru/.E592BDE6B094_2x.png.hwbk b/owo/aru/.E592BDE6B094_2x.png.hwbk new file mode 100644 index 0000000..c86f180 Binary files /dev/null and b/owo/aru/.E592BDE6B094_2x.png.hwbk differ diff --git a/owo/aru/.E593ADE6B3A3_2x.png.hwbk b/owo/aru/.E593ADE6B3A3_2x.png.hwbk new file mode 100644 index 0000000..b0c82f2 Binary files /dev/null and b/owo/aru/.E593ADE6B3A3_2x.png.hwbk differ diff --git a/owo/aru/.E5969CE69E81E8808CE6B3A3_2x.png.hwbk b/owo/aru/.E5969CE69E81E8808CE6B3A3_2x.png.hwbk new file mode 100644 index 0000000..5cb87e8 Binary files /dev/null and b/owo/aru/.E5969CE69E81E8808CE6B3A3_2x.png.hwbk differ diff --git a/owo/aru/.E596B7E6B0B4_2x.png.hwbk b/owo/aru/.E596B7E6B0B4_2x.png.hwbk new file mode 100644 index 0000000..3f0e213 Binary files /dev/null and b/owo/aru/.E596B7E6B0B4_2x.png.hwbk differ diff --git a/owo/aru/.E596B7E8A180_2x.png.hwbk b/owo/aru/.E596B7E8A180_2x.png.hwbk new file mode 100644 index 0000000..128b24e Binary files /dev/null and b/owo/aru/.E596B7E8A180_2x.png.hwbk differ diff --git a/owo/aru/.E59D90E7AD89_2x.png.hwbk b/owo/aru/.E59D90E7AD89_2x.png.hwbk new file mode 100644 index 0000000..881b766 Binary files /dev/null and b/owo/aru/.E59D90E7AD89_2x.png.hwbk differ diff --git a/owo/aru/.E5A4A7E59BA7_2x.png.hwbk b/owo/aru/.E5A4A7E59BA7_2x.png.hwbk new file mode 100644 index 0000000..3db1529 Binary files /dev/null and b/owo/aru/.E5A4A7E59BA7_2x.png.hwbk differ diff --git a/owo/aru/.E5AEB3E7BE9E_2x.png.hwbk b/owo/aru/.E5AEB3E7BE9E_2x.png.hwbk new file mode 100644 index 0000000..b2c6e26 Binary files /dev/null and b/owo/aru/.E5AEB3E7BE9E_2x.png.hwbk differ diff --git a/owo/aru/.E5B08FE68092_2x.png.hwbk b/owo/aru/.E5B08FE68092_2x.png.hwbk new file mode 100644 index 0000000..b1bac01 Binary files /dev/null and b/owo/aru/.E5B08FE68092_2x.png.hwbk differ diff --git a/owo/aru/.E5B08FE79CBCE79D9B_2x.png.hwbk b/owo/aru/.E5B08FE79CBCE79D9B_2x.png.hwbk new file mode 100644 index 0000000..a65b2dc Binary files /dev/null and b/owo/aru/.E5B08FE79CBCE79D9B_2x.png.hwbk differ diff --git a/owo/aru/.E5B0B4E5B0AC_2x.png.hwbk b/owo/aru/.E5B0B4E5B0AC_2x.png.hwbk new file mode 100644 index 0000000..c16d282 Binary files /dev/null and b/owo/aru/.E5B0B4E5B0AC_2x.png.hwbk differ diff --git a/owo/aru/.E5BE97E6848F_2x.png.hwbk b/owo/aru/.E5BE97E6848F_2x.png.hwbk new file mode 100644 index 0000000..116f572 Binary files /dev/null and b/owo/aru/.E5BE97E6848F_2x.png.hwbk differ diff --git a/owo/aru/.E6838AE5969C_2x.png.hwbk b/owo/aru/.E6838AE5969C_2x.png.hwbk new file mode 100644 index 0000000..7f31ce9 Binary files /dev/null and b/owo/aru/.E6838AE5969C_2x.png.hwbk differ diff --git a/owo/aru/.E683B3E4B880E683B3_2x.png.hwbk b/owo/aru/.E683B3E4B880E683B3_2x.png.hwbk new file mode 100644 index 0000000..b311f8d Binary files /dev/null and b/owo/aru/.E683B3E4B880E683B3_2x.png.hwbk differ diff --git a/owo/aru/.E684A4E68092_2x.png.hwbk b/owo/aru/.E684A4E68092_2x.png.hwbk new file mode 100644 index 0000000..a2a3ea2 Binary files /dev/null and b/owo/aru/.E684A4E68092_2x.png.hwbk differ diff --git a/owo/aru/.E68987E880B3E58589_2x.png.hwbk b/owo/aru/.E68987E880B3E58589_2x.png.hwbk new file mode 100644 index 0000000..8d7e2f2 Binary files /dev/null and b/owo/aru/.E68987E880B3E58589_2x.png.hwbk differ diff --git a/owo/aru/.E68A95E9998D_2x.png.hwbk b/owo/aru/.E68A95E9998D_2x.png.hwbk new file mode 100644 index 0000000..6eddc06 Binary files /dev/null and b/owo/aru/.E68A95E9998D_2x.png.hwbk differ diff --git a/owo/aru/.E68AA0E9BCBB_2x.png.hwbk b/owo/aru/.E68AA0E9BCBB_2x.png.hwbk new file mode 100644 index 0000000..912362c Binary files /dev/null and b/owo/aru/.E68AA0E9BCBB_2x.png.hwbk differ diff --git a/owo/aru/.E68ABDE7839F_2x.png.hwbk b/owo/aru/.E68ABDE7839F_2x.png.hwbk new file mode 100644 index 0000000..8c51858 Binary files /dev/null and b/owo/aru/.E68ABDE7839F_2x.png.hwbk differ diff --git a/owo/aru/.E697A0E5A588_2x.png.hwbk b/owo/aru/.E697A0E5A588_2x.png.hwbk new file mode 100644 index 0000000..0ef1383 Binary files /dev/null and b/owo/aru/.E697A0E5A588_2x.png.hwbk differ diff --git a/owo/aru/.E697A0E68980E8B093_2x.png.hwbk b/owo/aru/.E697A0E68980E8B093_2x.png.hwbk new file mode 100644 index 0000000..6b28d93 Binary files /dev/null and b/owo/aru/.E697A0E68980E8B093_2x.png.hwbk differ diff --git a/owo/aru/.E697A0E8AFAD_2x.png.hwbk b/owo/aru/.E697A0E8AFAD_2x.png.hwbk new file mode 100644 index 0000000..76ff11c Binary files /dev/null and b/owo/aru/.E697A0E8AFAD_2x.png.hwbk differ diff --git a/owo/aru/.E69A97E59CB0E8A782E5AF9F_2x.png.hwbk b/owo/aru/.E69A97E59CB0E8A782E5AF9F_2x.png.hwbk new file mode 100644 index 0000000..18fd4a8 Binary files /dev/null and b/owo/aru/.E69A97E59CB0E8A782E5AF9F_2x.png.hwbk differ diff --git a/owo/aru/.E69C9FE5BE85_2x.png.hwbk b/owo/aru/.E69C9FE5BE85_2x.png.hwbk new file mode 100644 index 0000000..3ce37c6 Binary files /dev/null and b/owo/aru/.E69C9FE5BE85_2x.png.hwbk differ diff --git a/owo/aru/.E6ACA2E591BC_2x.png.hwbk b/owo/aru/.E6ACA2E591BC_2x.png.hwbk new file mode 100644 index 0000000..99eb788 Binary files /dev/null and b/owo/aru/.E6ACA2E591BC_2x.png.hwbk differ diff --git a/owo/aru/.E6B197_2x.png.hwbk b/owo/aru/.E6B197_2x.png.hwbk new file mode 100644 index 0000000..4a79262 Binary files /dev/null and b/owo/aru/.E6B197_2x.png.hwbk differ diff --git a/owo/aru/.E6B7B1E6809D_2x.png.hwbk b/owo/aru/.E6B7B1E6809D_2x.png.hwbk new file mode 100644 index 0000000..b7546df Binary files /dev/null and b/owo/aru/.E6B7B1E6809D_2x.png.hwbk differ diff --git a/owo/aru/.E78B82E6B197_2x.png.hwbk b/owo/aru/.E78B82E6B197_2x.png.hwbk new file mode 100644 index 0000000..1f81eec Binary files /dev/null and b/owo/aru/.E78B82E6B197_2x.png.hwbk differ diff --git a/owo/aru/.E78CAEE88AB1_2x.png.hwbk b/owo/aru/.E78CAEE88AB1_2x.png.hwbk new file mode 100644 index 0000000..9ab11a2 Binary files /dev/null and b/owo/aru/.E78CAEE88AB1_2x.png.hwbk differ diff --git a/owo/aru/.E78CAEE9BB84E7939C_2x.png.hwbk b/owo/aru/.E78CAEE9BB84E7939C_2x.png.hwbk new file mode 100644 index 0000000..e741463 Binary files /dev/null and b/owo/aru/.E78CAEE9BB84E7939C_2x.png.hwbk differ diff --git a/owo/aru/.E79AB1E79C89_2x.png.hwbk b/owo/aru/.E79AB1E79C89_2x.png.hwbk new file mode 100644 index 0000000..8d0bd26 Binary files /dev/null and b/owo/aru/.E79AB1E79C89_2x.png.hwbk differ diff --git a/owo/aru/.E79C8BE4B88DE8A781_2x.png.hwbk b/owo/aru/.E79C8BE4B88DE8A781_2x.png.hwbk new file mode 100644 index 0000000..a95d997 Binary files /dev/null and b/owo/aru/.E79C8BE4B88DE8A781_2x.png.hwbk differ diff --git a/owo/aru/.E79C8BE783ADE997B9_2x.png.hwbk b/owo/aru/.E79C8BE783ADE997B9_2x.png.hwbk new file mode 100644 index 0000000..3e9c198 Binary files /dev/null and b/owo/aru/.E79C8BE783ADE997B9_2x.png.hwbk differ diff --git a/owo/aru/.E882BFE58C85_2x.png.hwbk b/owo/aru/.E882BFE58C85_2x.png.hwbk new file mode 100644 index 0000000..ed208a5 Binary files /dev/null and b/owo/aru/.E882BFE58C85_2x.png.hwbk differ diff --git a/owo/aru/.E884B8E7BAA2_2x.png.hwbk b/owo/aru/.E884B8E7BAA2_2x.png.hwbk new file mode 100644 index 0000000..6a78a89 Binary files /dev/null and b/owo/aru/.E884B8E7BAA2_2x.png.hwbk differ diff --git a/owo/aru/.E89CA1E7839B_2x.png.hwbk b/owo/aru/.E89CA1E7839B_2x.png.hwbk new file mode 100644 index 0000000..a3971dd Binary files /dev/null and b/owo/aru/.E89CA1E7839B_2x.png.hwbk differ diff --git a/owo/aru/.E8A385E5A4A7E6ACBE_2x.png.hwbk b/owo/aru/.E8A385E5A4A7E6ACBE_2x.png.hwbk new file mode 100644 index 0000000..8f2d224 Binary files /dev/null and b/owo/aru/.E8A385E5A4A7E6ACBE_2x.png.hwbk differ diff --git a/owo/aru/.E8A782E5AF9F_2x.png.hwbk b/owo/aru/.E8A782E5AF9F_2x.png.hwbk new file mode 100644 index 0000000..c2fa07e Binary files /dev/null and b/owo/aru/.E8A782E5AF9F_2x.png.hwbk differ diff --git a/owo/aru/.E8B59EE4B880E4B8AA_2x.png.hwbk b/owo/aru/.E8B59EE4B880E4B8AA_2x.png.hwbk new file mode 100644 index 0000000..e6b5d02 Binary files /dev/null and b/owo/aru/.E8B59EE4B880E4B8AA_2x.png.hwbk differ diff --git a/owo/aru/.E982AAE681B6_2x.png.hwbk b/owo/aru/.E982AAE681B6_2x.png.hwbk new file mode 100644 index 0000000..cc98f30 Binary files /dev/null and b/owo/aru/.E982AAE681B6_2x.png.hwbk differ diff --git a/owo/aru/.E99481E79C89_2x.png.hwbk b/owo/aru/.E99481E79C89_2x.png.hwbk new file mode 100644 index 0000000..8fecdc3 Binary files /dev/null and b/owo/aru/.E99481E79C89_2x.png.hwbk differ diff --git a/owo/aru/.E99481E79C90_2x.png.hwbk b/owo/aru/.E99481E79C90_2x.png.hwbk new file mode 100644 index 0000000..8fecdc3 Binary files /dev/null and b/owo/aru/.E99481E79C90_2x.png.hwbk differ diff --git a/owo/aru/.E995BFE88D89_2x.png.hwbk b/owo/aru/.E995BFE88D89_2x.png.hwbk new file mode 100644 index 0000000..ecf8b7c Binary files /dev/null and b/owo/aru/.E995BFE88D89_2x.png.hwbk differ diff --git a/owo/aru/.E998B4E69A97_2x.png.hwbk b/owo/aru/.E998B4E69A97_2x.png.hwbk new file mode 100644 index 0000000..b0e9517 Binary files /dev/null and b/owo/aru/.E998B4E69A97_2x.png.hwbk differ diff --git a/owo/aru/.E9AB98E585B4_2x.png.hwbk b/owo/aru/.E9AB98E585B4_2x.png.hwbk new file mode 100644 index 0000000..c87d27d Binary files /dev/null and b/owo/aru/.E9AB98E585B4_2x.png.hwbk differ diff --git a/owo/aru/.E9BB91E7BABF_2x.png.hwbk b/owo/aru/.E9BB91E7BABF_2x.png.hwbk new file mode 100644 index 0000000..c46d1a6 Binary files /dev/null and b/owo/aru/.E9BB91E7BABF_2x.png.hwbk differ diff --git a/owo/aru/.E9BC93E68E8C_2x.png.hwbk b/owo/aru/.E9BC93E68E8C_2x.png.hwbk new file mode 100644 index 0000000..15aa10a Binary files /dev/null and b/owo/aru/.E9BC93E68E8C_2x.png.hwbk differ diff --git a/owo/aru/E4B88DE587BAE68980E69699_2x.png b/owo/aru/E4B88DE587BAE68980E69699_2x.png new file mode 100644 index 0000000..8959428 Binary files /dev/null and b/owo/aru/E4B88DE587BAE68980E69699_2x.png differ diff --git a/owo/aru/E4B88DE8AFB4E8AF9D_2x.png b/owo/aru/E4B88DE8AFB4E8AF9D_2x.png new file mode 100644 index 0000000..758fc53 Binary files /dev/null and b/owo/aru/E4B88DE8AFB4E8AF9D_2x.png differ diff --git a/owo/aru/E4B88DE9AB98E585B4_2x.png b/owo/aru/E4B88DE9AB98E585B4_2x.png new file mode 100644 index 0000000..c11d688 Binary files /dev/null and b/owo/aru/E4B88DE9AB98E585B4_2x.png differ diff --git a/owo/aru/E4B8ADE58880_2x.png b/owo/aru/E4B8ADE58880_2x.png new file mode 100644 index 0000000..2038f81 Binary files /dev/null and b/owo/aru/E4B8ADE58880_2x.png differ diff --git a/owo/aru/E4B8ADE68C87_2x.png b/owo/aru/E4B8ADE68C87_2x.png new file mode 100644 index 0000000..bb758bd Binary files /dev/null and b/owo/aru/E4B8ADE68C87_2x.png differ diff --git a/owo/aru/E4B8ADE69EAA_2x.png b/owo/aru/E4B8ADE69EAA_2x.png new file mode 100644 index 0000000..55c4e3f Binary files /dev/null and b/owo/aru/E4B8ADE69EAA_2x.png differ diff --git a/owo/aru/E4BAB2E4BAB2_2x.png b/owo/aru/E4BAB2E4BAB2_2x.png new file mode 100644 index 0000000..6c9cf30 Binary files /dev/null and b/owo/aru/E4BAB2E4BAB2_2x.png differ diff --git a/owo/aru/E4BEBFE4BEBF_2x.png b/owo/aru/E4BEBFE4BEBF_2x.png new file mode 100644 index 0000000..4be59c2 Binary files /dev/null and b/owo/aru/E4BEBFE4BEBF_2x.png differ diff --git a/owo/aru/E582BBE7AC91_2x.png b/owo/aru/E582BBE7AC91_2x.png new file mode 100644 index 0000000..2efb4d2 Binary files /dev/null and b/owo/aru/E582BBE7AC91_2x.png differ diff --git a/owo/aru/E58685E4BCA4_2x.png b/owo/aru/E58685E4BCA4_2x.png new file mode 100644 index 0000000..78b3837 Binary files /dev/null and b/owo/aru/E58685E4BCA4_2x.png differ diff --git a/owo/aru/E587BBE68E8C_2x.png b/owo/aru/E587BBE68E8C_2x.png new file mode 100644 index 0000000..c97e00a Binary files /dev/null and b/owo/aru/E587BBE68E8C_2x.png differ diff --git a/owo/aru/E58FA3E6B0B4_2x.png b/owo/aru/E58FA3E6B0B4_2x.png new file mode 100644 index 0000000..5b13dbc Binary files /dev/null and b/owo/aru/E58FA3E6B0B4_2x.png differ diff --git a/owo/aru/E59090E8888C_2x.png b/owo/aru/E59090E8888C_2x.png new file mode 100644 index 0000000..b038f8e Binary files /dev/null and b/owo/aru/E59090E8888C_2x.png differ diff --git a/owo/aru/E59090E8A180E58092E59CB0_2x.png b/owo/aru/E59090E8A180E58092E59CB0_2x.png new file mode 100644 index 0000000..9e63eee Binary files /dev/null and b/owo/aru/E59090E8A180E58092E59CB0_2x.png differ diff --git a/owo/aru/E59090_2x.png b/owo/aru/E59090_2x.png new file mode 100644 index 0000000..5ebe288 Binary files /dev/null and b/owo/aru/E59090_2x.png differ diff --git a/owo/aru/E591B2E78999_2x.png b/owo/aru/E591B2E78999_2x.png new file mode 100644 index 0000000..e1f2d73 Binary files /dev/null and b/owo/aru/E591B2E78999_2x.png differ diff --git a/owo/aru/E592BDE6B094_2x.png b/owo/aru/E592BDE6B094_2x.png new file mode 100644 index 0000000..c86f180 Binary files /dev/null and b/owo/aru/E592BDE6B094_2x.png differ diff --git a/owo/aru/E593ADE6B3A3_2x.png b/owo/aru/E593ADE6B3A3_2x.png new file mode 100644 index 0000000..b0c82f2 Binary files /dev/null and b/owo/aru/E593ADE6B3A3_2x.png differ diff --git a/owo/aru/E5969CE69E81E8808CE6B3A3_2x.png b/owo/aru/E5969CE69E81E8808CE6B3A3_2x.png new file mode 100644 index 0000000..5cb87e8 Binary files /dev/null and b/owo/aru/E5969CE69E81E8808CE6B3A3_2x.png differ diff --git a/owo/aru/E596B7E6B0B4_2x.png b/owo/aru/E596B7E6B0B4_2x.png new file mode 100644 index 0000000..3f0e213 Binary files /dev/null and b/owo/aru/E596B7E6B0B4_2x.png differ diff --git a/owo/aru/E596B7E8A180_2x.png b/owo/aru/E596B7E8A180_2x.png new file mode 100644 index 0000000..128b24e Binary files /dev/null and b/owo/aru/E596B7E8A180_2x.png differ diff --git a/owo/aru/E59D90E7AD89_2x.png b/owo/aru/E59D90E7AD89_2x.png new file mode 100644 index 0000000..881b766 Binary files /dev/null and b/owo/aru/E59D90E7AD89_2x.png differ diff --git a/owo/aru/E5A4A7E59BA7_2x.png b/owo/aru/E5A4A7E59BA7_2x.png new file mode 100644 index 0000000..3db1529 Binary files /dev/null and b/owo/aru/E5A4A7E59BA7_2x.png differ diff --git a/owo/aru/E5AEB3E7BE9E_2x.png b/owo/aru/E5AEB3E7BE9E_2x.png new file mode 100644 index 0000000..b2c6e26 Binary files /dev/null and b/owo/aru/E5AEB3E7BE9E_2x.png differ diff --git a/owo/aru/E5B08FE68092_2x.png b/owo/aru/E5B08FE68092_2x.png new file mode 100644 index 0000000..b1bac01 Binary files /dev/null and b/owo/aru/E5B08FE68092_2x.png differ diff --git a/owo/aru/E5B08FE79CBCE79D9B_2x.png b/owo/aru/E5B08FE79CBCE79D9B_2x.png new file mode 100644 index 0000000..a65b2dc Binary files /dev/null and b/owo/aru/E5B08FE79CBCE79D9B_2x.png differ diff --git a/owo/aru/E5B0B4E5B0AC_2x.png b/owo/aru/E5B0B4E5B0AC_2x.png new file mode 100644 index 0000000..c16d282 Binary files /dev/null and b/owo/aru/E5B0B4E5B0AC_2x.png differ diff --git a/owo/aru/E5BE97E6848F_2x.png b/owo/aru/E5BE97E6848F_2x.png new file mode 100644 index 0000000..116f572 Binary files /dev/null and b/owo/aru/E5BE97E6848F_2x.png differ diff --git a/owo/aru/E6838AE5969C_2x.png b/owo/aru/E6838AE5969C_2x.png new file mode 100644 index 0000000..7f31ce9 Binary files /dev/null and b/owo/aru/E6838AE5969C_2x.png differ diff --git a/owo/aru/E683B3E4B880E683B3_2x.png b/owo/aru/E683B3E4B880E683B3_2x.png new file mode 100644 index 0000000..b311f8d Binary files /dev/null and b/owo/aru/E683B3E4B880E683B3_2x.png differ diff --git a/owo/aru/E684A4E68092_2x.png b/owo/aru/E684A4E68092_2x.png new file mode 100644 index 0000000..a2a3ea2 Binary files /dev/null and b/owo/aru/E684A4E68092_2x.png differ diff --git a/owo/aru/E68987E880B3E58589_2x.png b/owo/aru/E68987E880B3E58589_2x.png new file mode 100644 index 0000000..8d7e2f2 Binary files /dev/null and b/owo/aru/E68987E880B3E58589_2x.png differ diff --git a/owo/aru/E68A95E9998D_2x.png b/owo/aru/E68A95E9998D_2x.png new file mode 100644 index 0000000..6eddc06 Binary files /dev/null and b/owo/aru/E68A95E9998D_2x.png differ diff --git a/owo/aru/E68AA0E9BCBB_2x.png b/owo/aru/E68AA0E9BCBB_2x.png new file mode 100644 index 0000000..912362c Binary files /dev/null and b/owo/aru/E68AA0E9BCBB_2x.png differ diff --git a/owo/aru/E68ABDE7839F_2x.png b/owo/aru/E68ABDE7839F_2x.png new file mode 100644 index 0000000..8c51858 Binary files /dev/null and b/owo/aru/E68ABDE7839F_2x.png differ diff --git a/owo/aru/E697A0E5A588_2x.png b/owo/aru/E697A0E5A588_2x.png new file mode 100644 index 0000000..0ef1383 Binary files /dev/null and b/owo/aru/E697A0E5A588_2x.png differ diff --git a/owo/aru/E697A0E68980E8B093_2x.png b/owo/aru/E697A0E68980E8B093_2x.png new file mode 100644 index 0000000..6b28d93 Binary files /dev/null and b/owo/aru/E697A0E68980E8B093_2x.png differ diff --git a/owo/aru/E697A0E8AFAD_2x.png b/owo/aru/E697A0E8AFAD_2x.png new file mode 100644 index 0000000..76ff11c Binary files /dev/null and b/owo/aru/E697A0E8AFAD_2x.png differ diff --git a/owo/aru/E69A97E59CB0E8A782E5AF9F_2x.png b/owo/aru/E69A97E59CB0E8A782E5AF9F_2x.png new file mode 100644 index 0000000..18fd4a8 Binary files /dev/null and b/owo/aru/E69A97E59CB0E8A782E5AF9F_2x.png differ diff --git a/owo/aru/E69C9FE5BE85_2x.png b/owo/aru/E69C9FE5BE85_2x.png new file mode 100644 index 0000000..3ce37c6 Binary files /dev/null and b/owo/aru/E69C9FE5BE85_2x.png differ diff --git a/owo/aru/E6ACA2E591BC_2x.png b/owo/aru/E6ACA2E591BC_2x.png new file mode 100644 index 0000000..99eb788 Binary files /dev/null and b/owo/aru/E6ACA2E591BC_2x.png differ diff --git a/owo/aru/E6B197_2x.png b/owo/aru/E6B197_2x.png new file mode 100644 index 0000000..4a79262 Binary files /dev/null and b/owo/aru/E6B197_2x.png differ diff --git a/owo/aru/E6B7B1E6809D_2x.png b/owo/aru/E6B7B1E6809D_2x.png new file mode 100644 index 0000000..b7546df Binary files /dev/null and b/owo/aru/E6B7B1E6809D_2x.png differ diff --git a/owo/aru/E78B82E6B197_2x.png b/owo/aru/E78B82E6B197_2x.png new file mode 100644 index 0000000..1f81eec Binary files /dev/null and b/owo/aru/E78B82E6B197_2x.png differ diff --git a/owo/aru/E78CAEE88AB1_2x.png b/owo/aru/E78CAEE88AB1_2x.png new file mode 100644 index 0000000..9ab11a2 Binary files /dev/null and b/owo/aru/E78CAEE88AB1_2x.png differ diff --git a/owo/aru/E78CAEE9BB84E7939C_2x.png b/owo/aru/E78CAEE9BB84E7939C_2x.png new file mode 100644 index 0000000..e741463 Binary files /dev/null and b/owo/aru/E78CAEE9BB84E7939C_2x.png differ diff --git a/owo/aru/E79AB1E79C89_2x.png b/owo/aru/E79AB1E79C89_2x.png new file mode 100644 index 0000000..8d0bd26 Binary files /dev/null and b/owo/aru/E79AB1E79C89_2x.png differ diff --git a/owo/aru/E79C8BE4B88DE8A781_2x.png b/owo/aru/E79C8BE4B88DE8A781_2x.png new file mode 100644 index 0000000..a95d997 Binary files /dev/null and b/owo/aru/E79C8BE4B88DE8A781_2x.png differ diff --git a/owo/aru/E79C8BE783ADE997B9_2x.png b/owo/aru/E79C8BE783ADE997B9_2x.png new file mode 100644 index 0000000..3e9c198 Binary files /dev/null and b/owo/aru/E79C8BE783ADE997B9_2x.png differ diff --git a/owo/aru/E882BFE58C85_2x.png b/owo/aru/E882BFE58C85_2x.png new file mode 100644 index 0000000..ed208a5 Binary files /dev/null and b/owo/aru/E882BFE58C85_2x.png differ diff --git a/owo/aru/E884B8E7BAA2_2x.png b/owo/aru/E884B8E7BAA2_2x.png new file mode 100644 index 0000000..6a78a89 Binary files /dev/null and b/owo/aru/E884B8E7BAA2_2x.png differ diff --git a/owo/aru/E89CA1E7839B_2x.png b/owo/aru/E89CA1E7839B_2x.png new file mode 100644 index 0000000..a3971dd Binary files /dev/null and b/owo/aru/E89CA1E7839B_2x.png differ diff --git a/owo/aru/E8A385E5A4A7E6ACBE_2x.png b/owo/aru/E8A385E5A4A7E6ACBE_2x.png new file mode 100644 index 0000000..8f2d224 Binary files /dev/null and b/owo/aru/E8A385E5A4A7E6ACBE_2x.png differ diff --git a/owo/aru/E8A782E5AF9F_2x.png b/owo/aru/E8A782E5AF9F_2x.png new file mode 100644 index 0000000..c2fa07e Binary files /dev/null and b/owo/aru/E8A782E5AF9F_2x.png differ diff --git a/owo/aru/E8B59EE4B880E4B8AA_2x.png b/owo/aru/E8B59EE4B880E4B8AA_2x.png new file mode 100644 index 0000000..e6b5d02 Binary files /dev/null and b/owo/aru/E8B59EE4B880E4B8AA_2x.png differ diff --git a/owo/aru/E982AAE681B6_2x.png b/owo/aru/E982AAE681B6_2x.png new file mode 100644 index 0000000..cc98f30 Binary files /dev/null and b/owo/aru/E982AAE681B6_2x.png differ diff --git a/owo/aru/E99481E79C89_2x.png b/owo/aru/E99481E79C89_2x.png new file mode 100644 index 0000000..8fecdc3 Binary files /dev/null and b/owo/aru/E99481E79C89_2x.png differ diff --git a/owo/aru/E99481E79C90_2x.png b/owo/aru/E99481E79C90_2x.png new file mode 100644 index 0000000..8fecdc3 Binary files /dev/null and b/owo/aru/E99481E79C90_2x.png differ diff --git a/owo/aru/E995BFE88D89_2x.png b/owo/aru/E995BFE88D89_2x.png new file mode 100644 index 0000000..ecf8b7c Binary files /dev/null and b/owo/aru/E995BFE88D89_2x.png differ diff --git a/owo/aru/E998B4E69A97_2x.png b/owo/aru/E998B4E69A97_2x.png new file mode 100644 index 0000000..b0e9517 Binary files /dev/null and b/owo/aru/E998B4E69A97_2x.png differ diff --git a/owo/aru/E9AB98E585B4_2x.png b/owo/aru/E9AB98E585B4_2x.png new file mode 100644 index 0000000..c87d27d Binary files /dev/null and b/owo/aru/E9AB98E585B4_2x.png differ diff --git a/owo/aru/E9BB91E7BABF_2x.png b/owo/aru/E9BB91E7BABF_2x.png new file mode 100644 index 0000000..c46d1a6 Binary files /dev/null and b/owo/aru/E9BB91E7BABF_2x.png differ diff --git a/owo/aru/E9BC93E68E8C_2x.png b/owo/aru/E9BC93E68E8C_2x.png new file mode 100644 index 0000000..15aa10a Binary files /dev/null and b/owo/aru/E9BC93E68E8C_2x.png differ diff --git a/owo/paopao/.E4B88DE9AB98E585B4_2x.png.hwbk b/owo/paopao/.E4B88DE9AB98E585B4_2x.png.hwbk new file mode 100644 index 0000000..46fb5af Binary files /dev/null and b/owo/paopao/.E4B88DE9AB98E585B4_2x.png.hwbk differ diff --git a/owo/paopao/.E4B996_2x.png.hwbk b/owo/paopao/.E4B996_2x.png.hwbk new file mode 100644 index 0000000..6d044c2 Binary files /dev/null and b/owo/paopao/.E4B996_2x.png.hwbk differ diff --git a/owo/paopao/.E4BDA0E68782E79A84_2x.png.hwbk b/owo/paopao/.E4BDA0E68782E79A84_2x.png.hwbk new file mode 100644 index 0000000..55f3ed7 Binary files /dev/null and b/owo/paopao/.E4BDA0E68782E79A84_2x.png.hwbk differ diff --git a/owo/paopao/.E4BEBFE4BEBF_2x.png.hwbk b/owo/paopao/.E4BEBFE4BEBF_2x.png.hwbk new file mode 100644 index 0000000..130c35c Binary files /dev/null and b/owo/paopao/.E4BEBFE4BEBF_2x.png.hwbk differ diff --git a/owo/paopao/.E586B7_2x.png.hwbk b/owo/paopao/.E586B7_2x.png.hwbk new file mode 100644 index 0000000..6bc7a39 Binary files /dev/null and b/owo/paopao/.E586B7_2x.png.hwbk differ diff --git a/owo/paopao/.E58B89E5BCBA_2x.png.hwbk b/owo/paopao/.E58B89E5BCBA_2x.png.hwbk new file mode 100644 index 0000000..e0ebcca Binary files /dev/null and b/owo/paopao/.E58B89E5BCBA_2x.png.hwbk differ diff --git a/owo/paopao/.E59083E7939C_2x.png.hwbk b/owo/paopao/.E59083E7939C_2x.png.hwbk new file mode 100644 index 0000000..45798d4 Binary files /dev/null and b/owo/paopao/.E59083E7939C_2x.png.hwbk differ diff --git a/owo/paopao/.E59083E7BF94_2x.png.hwbk b/owo/paopao/.E59083E7BF94_2x.png.hwbk new file mode 100644 index 0000000..6f37231 Binary files /dev/null and b/owo/paopao/.E59083E7BF94_2x.png.hwbk differ diff --git a/owo/paopao/.E59090E8888C_2x.png.hwbk b/owo/paopao/.E59090E8888C_2x.png.hwbk new file mode 100644 index 0000000..631e7aa Binary files /dev/null and b/owo/paopao/.E59090E8888C_2x.png.hwbk differ diff --git a/owo/paopao/.E59090_2x.png.hwbk b/owo/paopao/.E59090_2x.png.hwbk new file mode 100644 index 0000000..c3f46c7 Binary files /dev/null and b/owo/paopao/.E59090_2x.png.hwbk differ diff --git a/owo/paopao/.E59180E592A9E788B9_2x.png.hwbk b/owo/paopao/.E59180E592A9E788B9_2x.png.hwbk new file mode 100644 index 0000000..98a6ad8 Binary files /dev/null and b/owo/paopao/.E59180E592A9E788B9_2x.png.hwbk differ diff --git a/owo/paopao/.E591B5E591B5_2x.png.hwbk b/owo/paopao/.E591B5E591B5_2x.png.hwbk new file mode 100644 index 0000000..9ef384f Binary files /dev/null and b/owo/paopao/.E591B5E591B5_2x.png.hwbk differ diff --git a/owo/paopao/.E591BC_2x.png.hwbk b/owo/paopao/.E591BC_2x.png.hwbk new file mode 100644 index 0000000..8a70b89 Binary files /dev/null and b/owo/paopao/.E591BC_2x.png.hwbk differ diff --git a/owo/paopao/.E592A6_2x.png.hwbk b/owo/paopao/.E592A6_2x.png.hwbk new file mode 100644 index 0000000..e5520d2 Binary files /dev/null and b/owo/paopao/.E592A6_2x.png.hwbk differ diff --git a/owo/paopao/.E59388E59388_2x.png.hwbk b/owo/paopao/.E59388E59388_2x.png.hwbk new file mode 100644 index 0000000..d20de90 Binary files /dev/null and b/owo/paopao/.E59388E59388_2x.png.hwbk differ diff --git a/owo/paopao/.E5958A_2x.png.hwbk b/owo/paopao/.E5958A_2x.png.hwbk new file mode 100644 index 0000000..e9e940a Binary files /dev/null and b/owo/paopao/.E5958A_2x.png.hwbk differ diff --git a/owo/paopao/.E596B7_2x.png.hwbk b/owo/paopao/.E596B7_2x.png.hwbk new file mode 100644 index 0000000..c5273ee Binary files /dev/null and b/owo/paopao/.E596B7_2x.png.hwbk differ diff --git a/owo/paopao/.E5989AE7919F_2x.png.hwbk b/owo/paopao/.E5989AE7919F_2x.png.hwbk new file mode 100644 index 0000000..1b697d6 Binary files /dev/null and b/owo/paopao/.E5989AE7919F_2x.png.hwbk differ diff --git a/owo/paopao/.E5A4A7E68B87E68C87_2x.png.hwbk b/owo/paopao/.E5A4A7E68B87E68C87_2x.png.hwbk new file mode 100644 index 0000000..808a165 Binary files /dev/null and b/owo/paopao/.E5A4A7E68B87E68C87_2x.png.hwbk differ diff --git a/owo/paopao/.E5A4AAE5BC80E5BF83_2x.png.hwbk b/owo/paopao/.E5A4AAE5BC80E5BF83_2x.png.hwbk new file mode 100644 index 0000000..5e644bc Binary files /dev/null and b/owo/paopao/.E5A4AAE5BC80E5BF83_2x.png.hwbk differ diff --git a/owo/paopao/.E5A4AAE998B3_2x.png.hwbk b/owo/paopao/.E5A4AAE998B3_2x.png.hwbk new file mode 100644 index 0000000..7fefbe1 Binary files /dev/null and b/owo/paopao/.E5A4AAE998B3_2x.png.hwbk differ diff --git a/owo/paopao/.E5A794E5B188_2x.png.hwbk b/owo/paopao/.E5A794E5B188_2x.png.hwbk new file mode 100644 index 0000000..ec2d0f2 Binary files /dev/null and b/owo/paopao/.E5A794E5B188_2x.png.hwbk differ diff --git a/owo/paopao/.E5B08FE4B996_2x.png.hwbk b/owo/paopao/.E5B08FE4B996_2x.png.hwbk new file mode 100644 index 0000000..33c632d Binary files /dev/null and b/owo/paopao/.E5B08FE4B996_2x.png.hwbk differ diff --git a/owo/paopao/.E5B08FE7BAA2E884B8_2x.png.hwbk b/owo/paopao/.E5B08FE7BAA2E884B8_2x.png.hwbk new file mode 100644 index 0000000..aa1358a Binary files /dev/null and b/owo/paopao/.E5B08FE7BAA2E884B8_2x.png.hwbk differ diff --git a/owo/paopao/.E5BC80E5BF83_2x.png.hwbk b/owo/paopao/.E5BC80E5BF83_2x.png.hwbk new file mode 100644 index 0000000..b5aeb0d Binary files /dev/null and b/owo/paopao/.E5BC80E5BF83_2x.png.hwbk differ diff --git a/owo/paopao/.E5BCB1_2x.png.hwbk b/owo/paopao/.E5BCB1_2x.png.hwbk new file mode 100644 index 0000000..bf2b3ce Binary files /dev/null and b/owo/paopao/.E5BCB1_2x.png.hwbk differ diff --git a/owo/paopao/.E5BDA9E899B9_2x.png.hwbk b/owo/paopao/.E5BDA9E899B9_2x.png.hwbk new file mode 100644 index 0000000..4892fdf Binary files /dev/null and b/owo/paopao/.E5BDA9E899B9_2x.png.hwbk differ diff --git a/owo/paopao/.E5BF83E7A28E_2x.png.hwbk b/owo/paopao/.E5BF83E7A28E_2x.png.hwbk new file mode 100644 index 0000000..6ee132b Binary files /dev/null and b/owo/paopao/.E5BF83E7A28E_2x.png.hwbk differ diff --git a/owo/paopao/.E68092_2x.png.hwbk b/owo/paopao/.E68092_2x.png.hwbk new file mode 100644 index 0000000..2bdffa4 Binary files /dev/null and b/owo/paopao/.E68092_2x.png.hwbk differ diff --git a/owo/paopao/.E6838AE593AD_2x.png.hwbk b/owo/paopao/.E6838AE593AD_2x.png.hwbk new file mode 100644 index 0000000..a596e58 Binary files /dev/null and b/owo/paopao/.E6838AE593AD_2x.png.hwbk differ diff --git a/owo/paopao/.E6838AE68190_2x.png.hwbk b/owo/paopao/.E6838AE68190_2x.png.hwbk new file mode 100644 index 0000000..0c1e20a Binary files /dev/null and b/owo/paopao/.E6838AE68190_2x.png.hwbk differ diff --git a/owo/paopao/.E6838AE8AEB6_2x.png.hwbk b/owo/paopao/.E6838AE8AEB6_2x.png.hwbk new file mode 100644 index 0000000..81fda5a Binary files /dev/null and b/owo/paopao/.E6838AE8AEB6_2x.png.hwbk differ diff --git a/owo/paopao/.E68792E5BE97E79086_2x.png.hwbk b/owo/paopao/.E68792E5BE97E79086_2x.png.hwbk new file mode 100644 index 0000000..59fcfdc Binary files /dev/null and b/owo/paopao/.E68792E5BE97E79086_2x.png.hwbk differ diff --git a/owo/paopao/.E6898BE7BAB8_2x.png.hwbk b/owo/paopao/.E6898BE7BAB8_2x.png.hwbk new file mode 100644 index 0000000..e59e7c5 Binary files /dev/null and b/owo/paopao/.E6898BE7BAB8_2x.png.hwbk differ diff --git a/owo/paopao/.E68C96E9BCBB_2x.png.hwbk b/owo/paopao/.E68C96E9BCBB_2x.png.hwbk new file mode 100644 index 0000000..17a5335 Binary files /dev/null and b/owo/paopao/.E68C96E9BCBB_2x.png.hwbk differ diff --git a/owo/paopao/.E68D82E598B4E7AC91_2x.png.hwbk b/owo/paopao/.E68D82E598B4E7AC91_2x.png.hwbk new file mode 100644 index 0000000..57975f7 Binary files /dev/null and b/owo/paopao/.E68D82E598B4E7AC91_2x.png.hwbk differ diff --git a/owo/paopao/.E6989FE6989FE69C88E4BAAE_2x.png.hwbk b/owo/paopao/.E6989FE6989FE69C88E4BAAE_2x.png.hwbk new file mode 100644 index 0000000..e19bfe7 Binary files /dev/null and b/owo/paopao/.E6989FE6989FE69C88E4BAAE_2x.png.hwbk differ diff --git a/owo/paopao/.E6B197_2x.png.hwbk b/owo/paopao/.E6B197_2x.png.hwbk new file mode 100644 index 0000000..5f57a18 Binary files /dev/null and b/owo/paopao/.E6B197_2x.png.hwbk differ diff --git a/owo/paopao/.E6B299E58F91_2x.png.hwbk b/owo/paopao/.E6B299E58F91_2x.png.hwbk new file mode 100644 index 0000000..f663de3 Binary files /dev/null and b/owo/paopao/.E6B299E58F91_2x.png.hwbk differ diff --git a/owo/paopao/.E6B3AA_2x.png.hwbk b/owo/paopao/.E6B3AA_2x.png.hwbk new file mode 100644 index 0000000..a1caed0 Binary files /dev/null and b/owo/paopao/.E6B3AA_2x.png.hwbk differ diff --git a/owo/paopao/.E6BB91E7A8BD_2x.png.hwbk b/owo/paopao/.E6BB91E7A8BD_2x.png.hwbk new file mode 100644 index 0000000..8402f16 Binary files /dev/null and b/owo/paopao/.E6BB91E7A8BD_2x.png.hwbk differ diff --git a/owo/paopao/.E781AFE6B3A1_2x.png.hwbk b/owo/paopao/.E781AFE6B3A1_2x.png.hwbk new file mode 100644 index 0000000..1aa078a Binary files /dev/null and b/owo/paopao/.E781AFE6B3A1_2x.png.hwbk differ diff --git a/owo/paopao/.E788B1E5BF83_2x.png.hwbk b/owo/paopao/.E788B1E5BF83_2x.png.hwbk new file mode 100644 index 0000000..f6f4c64 Binary files /dev/null and b/owo/paopao/.E788B1E5BF83_2x.png.hwbk differ diff --git a/owo/paopao/.E78A80E588A9_2x.png.hwbk b/owo/paopao/.E78A80E588A9_2x.png.hwbk new file mode 100644 index 0000000..c828e77 Binary files /dev/null and b/owo/paopao/.E78A80E588A9_2x.png.hwbk differ diff --git a/owo/paopao/.E78B82E6B197_2x.png.hwbk b/owo/paopao/.E78B82E6B197_2x.png.hwbk new file mode 100644 index 0000000..2aceb02 Binary files /dev/null and b/owo/paopao/.E78B82E6B197_2x.png.hwbk differ diff --git a/owo/paopao/.E78EABE791B0_2x.png.hwbk b/owo/paopao/.E78EABE791B0_2x.png.hwbk new file mode 100644 index 0000000..c0618cf Binary files /dev/null and b/owo/paopao/.E78EABE791B0_2x.png.hwbk differ diff --git a/owo/paopao/.E7949FE6B094_2x.png.hwbk b/owo/paopao/.E7949FE6B094_2x.png.hwbk new file mode 100644 index 0000000..9befd26 Binary files /dev/null and b/owo/paopao/.E7949FE6B094_2x.png.hwbk differ diff --git a/owo/paopao/.E79691E997AE_2x.png.hwbk b/owo/paopao/.E79691E997AE_2x.png.hwbk new file mode 100644 index 0000000..cff4a43 Binary files /dev/null and b/owo/paopao/.E79691E997AE_2x.png.hwbk differ diff --git a/owo/paopao/.E79C9FE6A392_2x.png.hwbk b/owo/paopao/.E79C9FE6A392_2x.png.hwbk new file mode 100644 index 0000000..97ca30d Binary files /dev/null and b/owo/paopao/.E79C9FE6A392_2x.png.hwbk differ diff --git a/owo/paopao/.E79DA1E8A789_2x.png.hwbk b/owo/paopao/.E79DA1E8A789_2x.png.hwbk new file mode 100644 index 0000000..21594dd Binary files /dev/null and b/owo/paopao/.E79DA1E8A789_2x.png.hwbk differ diff --git a/owo/paopao/.E7A4BCE789A9_2x.png.hwbk b/owo/paopao/.E7A4BCE789A9_2x.png.hwbk new file mode 100644 index 0000000..8572a23 Binary files /dev/null and b/owo/paopao/.E7A4BCE789A9_2x.png.hwbk differ diff --git a/owo/paopao/.E7AC91E5B0BF_2x.png.hwbk b/owo/paopao/.E7AC91E5B0BF_2x.png.hwbk new file mode 100644 index 0000000..a2c29a1 Binary files /dev/null and b/owo/paopao/.E7AC91E5B0BF_2x.png.hwbk differ diff --git a/owo/paopao/.E7AC91E79CBC_2x.png.hwbk b/owo/paopao/.E7AC91E79CBC_2x.png.hwbk new file mode 100644 index 0000000..0680d43 Binary files /dev/null and b/owo/paopao/.E7AC91E79CBC_2x.png.hwbk differ diff --git a/owo/paopao/.E7BAA2E9A286E5B7BE_2x.png.hwbk b/owo/paopao/.E7BAA2E9A286E5B7BE_2x.png.hwbk new file mode 100644 index 0000000..7690c2f Binary files /dev/null and b/owo/paopao/.E7BAA2E9A286E5B7BE_2x.png.hwbk differ diff --git a/owo/paopao/.E8839CE588A9_2x.png.hwbk b/owo/paopao/.E8839CE588A9_2x.png.hwbk new file mode 100644 index 0000000..821abfd Binary files /dev/null and b/owo/paopao/.E8839CE588A9_2x.png.hwbk differ diff --git a/owo/paopao/.E88AB1E5BF83_2x.png.hwbk b/owo/paopao/.E88AB1E5BF83_2x.png.hwbk new file mode 100644 index 0000000..3e8e915 Binary files /dev/null and b/owo/paopao/.E88AB1E5BF83_2x.png.hwbk differ diff --git a/owo/paopao/.E88CB6E69DAF_2x.png.hwbk b/owo/paopao/.E88CB6E69DAF_2x.png.hwbk new file mode 100644 index 0000000..fc8ac2c Binary files /dev/null and b/owo/paopao/.E88CB6E69DAF_2x.png.hwbk differ diff --git a/owo/paopao/.E88DAFE4B8B8_2x.png.hwbk b/owo/paopao/.E88DAFE4B8B8_2x.png.hwbk new file mode 100644 index 0000000..9bd93a0 Binary files /dev/null and b/owo/paopao/.E88DAFE4B8B8_2x.png.hwbk differ diff --git a/owo/paopao/.E89B8BE7B395_2x.png.hwbk b/owo/paopao/.E89B8BE7B395_2x.png.hwbk new file mode 100644 index 0000000..37ab127 Binary files /dev/null and b/owo/paopao/.E89B8BE7B395_2x.png.hwbk differ diff --git a/owo/paopao/.E89CA1E7839B_2x.png.hwbk b/owo/paopao/.E89CA1E7839B_2x.png.hwbk new file mode 100644 index 0000000..f3aba29 Binary files /dev/null and b/owo/paopao/.E89CA1E7839B_2x.png.hwbk differ diff --git a/owo/paopao/.E98499E8A786_2x.png.hwbk b/owo/paopao/.E98499E8A786_2x.png.hwbk new file mode 100644 index 0000000..42d110e Binary files /dev/null and b/owo/paopao/.E98499E8A786_2x.png.hwbk differ diff --git a/owo/paopao/.E985B7_2x.png.hwbk b/owo/paopao/.E985B7_2x.png.hwbk new file mode 100644 index 0000000..728baff Binary files /dev/null and b/owo/paopao/.E985B7_2x.png.hwbk differ diff --git a/owo/paopao/.E985B8E788BD_2x.png.hwbk b/owo/paopao/.E985B8E788BD_2x.png.hwbk new file mode 100644 index 0000000..1fff71c Binary files /dev/null and b/owo/paopao/.E985B8E788BD_2x.png.hwbk differ diff --git a/owo/paopao/.E992B1E5B881_2x.png.hwbk b/owo/paopao/.E992B1E5B881_2x.png.hwbk new file mode 100644 index 0000000..1e89f99 Binary files /dev/null and b/owo/paopao/.E992B1E5B881_2x.png.hwbk differ diff --git a/owo/paopao/.E992B1_2x.png.hwbk b/owo/paopao/.E992B1_2x.png.hwbk new file mode 100644 index 0000000..3cc877f Binary files /dev/null and b/owo/paopao/.E992B1_2x.png.hwbk differ diff --git a/owo/paopao/.E998B4E999A9_2x.png.hwbk b/owo/paopao/.E998B4E999A9_2x.png.hwbk new file mode 100644 index 0000000..9fe13b4 Binary files /dev/null and b/owo/paopao/.E998B4E999A9_2x.png.hwbk differ diff --git a/owo/paopao/.E99FB3E4B990_2x.png.hwbk b/owo/paopao/.E99FB3E4B990_2x.png.hwbk new file mode 100644 index 0000000..38f78c2 Binary files /dev/null and b/owo/paopao/.E99FB3E4B990_2x.png.hwbk differ diff --git a/owo/paopao/.E9A699E89589_2x.png.hwbk b/owo/paopao/.E9A699E89589_2x.png.hwbk new file mode 100644 index 0000000..eccebc3 Binary files /dev/null and b/owo/paopao/.E9A699E89589_2x.png.hwbk differ diff --git a/owo/paopao/.E9BB91E7BABF_2x.png.hwbk b/owo/paopao/.E9BB91E7BABF_2x.png.hwbk new file mode 100644 index 0000000..cc3c56a Binary files /dev/null and b/owo/paopao/.E9BB91E7BABF_2x.png.hwbk differ diff --git a/owo/paopao/.OK_2x.png.hwbk b/owo/paopao/.OK_2x.png.hwbk new file mode 100644 index 0000000..a1e18ab Binary files /dev/null and b/owo/paopao/.OK_2x.png.hwbk differ diff --git a/owo/paopao/.haha_2x.png.hwbk b/owo/paopao/.haha_2x.png.hwbk new file mode 100644 index 0000000..e847878 Binary files /dev/null and b/owo/paopao/.haha_2x.png.hwbk differ diff --git a/owo/paopao/.what_2x.png.hwbk b/owo/paopao/.what_2x.png.hwbk new file mode 100644 index 0000000..7c985c8 Binary files /dev/null and b/owo/paopao/.what_2x.png.hwbk differ diff --git a/owo/paopao/E4B88DE9AB98E585B4_2x.png b/owo/paopao/E4B88DE9AB98E585B4_2x.png new file mode 100644 index 0000000..46fb5af Binary files /dev/null and b/owo/paopao/E4B88DE9AB98E585B4_2x.png differ diff --git a/owo/paopao/E4B996_2x.png b/owo/paopao/E4B996_2x.png new file mode 100644 index 0000000..6d044c2 Binary files /dev/null and b/owo/paopao/E4B996_2x.png differ diff --git a/owo/paopao/E4BDA0E68782E79A84_2x.png b/owo/paopao/E4BDA0E68782E79A84_2x.png new file mode 100644 index 0000000..55f3ed7 Binary files /dev/null and b/owo/paopao/E4BDA0E68782E79A84_2x.png differ diff --git a/owo/paopao/E4BEBFE4BEBF_2x.png b/owo/paopao/E4BEBFE4BEBF_2x.png new file mode 100644 index 0000000..130c35c Binary files /dev/null and b/owo/paopao/E4BEBFE4BEBF_2x.png differ diff --git a/owo/paopao/E586B7_2x.png b/owo/paopao/E586B7_2x.png new file mode 100644 index 0000000..6bc7a39 Binary files /dev/null and b/owo/paopao/E586B7_2x.png differ diff --git a/owo/paopao/E58B89E5BCBA_2x.png b/owo/paopao/E58B89E5BCBA_2x.png new file mode 100644 index 0000000..e0ebcca Binary files /dev/null and b/owo/paopao/E58B89E5BCBA_2x.png differ diff --git a/owo/paopao/E59083E7939C_2x.png b/owo/paopao/E59083E7939C_2x.png new file mode 100644 index 0000000..45798d4 Binary files /dev/null and b/owo/paopao/E59083E7939C_2x.png differ diff --git a/owo/paopao/E59083E7BF94_2x.png b/owo/paopao/E59083E7BF94_2x.png new file mode 100644 index 0000000..6f37231 Binary files /dev/null and b/owo/paopao/E59083E7BF94_2x.png differ diff --git a/owo/paopao/E59090E8888C_2x.png b/owo/paopao/E59090E8888C_2x.png new file mode 100644 index 0000000..631e7aa Binary files /dev/null and b/owo/paopao/E59090E8888C_2x.png differ diff --git a/owo/paopao/E59090_2x.png b/owo/paopao/E59090_2x.png new file mode 100644 index 0000000..c3f46c7 Binary files /dev/null and b/owo/paopao/E59090_2x.png differ diff --git a/owo/paopao/E59180E592A9E788B9_2x.png b/owo/paopao/E59180E592A9E788B9_2x.png new file mode 100644 index 0000000..98a6ad8 Binary files /dev/null and b/owo/paopao/E59180E592A9E788B9_2x.png differ diff --git a/owo/paopao/E591B5E591B5_2x.png b/owo/paopao/E591B5E591B5_2x.png new file mode 100644 index 0000000..9ef384f Binary files /dev/null and b/owo/paopao/E591B5E591B5_2x.png differ diff --git a/owo/paopao/E591BC_2x.png b/owo/paopao/E591BC_2x.png new file mode 100644 index 0000000..8a70b89 Binary files /dev/null and b/owo/paopao/E591BC_2x.png differ diff --git a/owo/paopao/E592A6_2x.png b/owo/paopao/E592A6_2x.png new file mode 100644 index 0000000..e5520d2 Binary files /dev/null and b/owo/paopao/E592A6_2x.png differ diff --git a/owo/paopao/E59388E59388_2x.png b/owo/paopao/E59388E59388_2x.png new file mode 100644 index 0000000..d20de90 Binary files /dev/null and b/owo/paopao/E59388E59388_2x.png differ diff --git a/owo/paopao/E5958A_2x.png b/owo/paopao/E5958A_2x.png new file mode 100644 index 0000000..e9e940a Binary files /dev/null and b/owo/paopao/E5958A_2x.png differ diff --git a/owo/paopao/E596B7_2x.png b/owo/paopao/E596B7_2x.png new file mode 100644 index 0000000..c5273ee Binary files /dev/null and b/owo/paopao/E596B7_2x.png differ diff --git a/owo/paopao/E5989AE7919F_2x.png b/owo/paopao/E5989AE7919F_2x.png new file mode 100644 index 0000000..1b697d6 Binary files /dev/null and b/owo/paopao/E5989AE7919F_2x.png differ diff --git a/owo/paopao/E5A4A7E68B87E68C87_2x.png b/owo/paopao/E5A4A7E68B87E68C87_2x.png new file mode 100644 index 0000000..808a165 Binary files /dev/null and b/owo/paopao/E5A4A7E68B87E68C87_2x.png differ diff --git a/owo/paopao/E5A4AAE5BC80E5BF83_2x.png b/owo/paopao/E5A4AAE5BC80E5BF83_2x.png new file mode 100644 index 0000000..5e644bc Binary files /dev/null and b/owo/paopao/E5A4AAE5BC80E5BF83_2x.png differ diff --git a/owo/paopao/E5A4AAE998B3_2x.png b/owo/paopao/E5A4AAE998B3_2x.png new file mode 100644 index 0000000..7fefbe1 Binary files /dev/null and b/owo/paopao/E5A4AAE998B3_2x.png differ diff --git a/owo/paopao/E5A794E5B188_2x.png b/owo/paopao/E5A794E5B188_2x.png new file mode 100644 index 0000000..ec2d0f2 Binary files /dev/null and b/owo/paopao/E5A794E5B188_2x.png differ diff --git a/owo/paopao/E5B08FE4B996_2x.png b/owo/paopao/E5B08FE4B996_2x.png new file mode 100644 index 0000000..33c632d Binary files /dev/null and b/owo/paopao/E5B08FE4B996_2x.png differ diff --git a/owo/paopao/E5B08FE7BAA2E884B8_2x.png b/owo/paopao/E5B08FE7BAA2E884B8_2x.png new file mode 100644 index 0000000..aa1358a Binary files /dev/null and b/owo/paopao/E5B08FE7BAA2E884B8_2x.png differ diff --git a/owo/paopao/E5BC80E5BF83_2x.png b/owo/paopao/E5BC80E5BF83_2x.png new file mode 100644 index 0000000..b5aeb0d Binary files /dev/null and b/owo/paopao/E5BC80E5BF83_2x.png differ diff --git a/owo/paopao/E5BCB1_2x.png b/owo/paopao/E5BCB1_2x.png new file mode 100644 index 0000000..bf2b3ce Binary files /dev/null and b/owo/paopao/E5BCB1_2x.png differ diff --git a/owo/paopao/E5BDA9E899B9_2x.png b/owo/paopao/E5BDA9E899B9_2x.png new file mode 100644 index 0000000..4892fdf Binary files /dev/null and b/owo/paopao/E5BDA9E899B9_2x.png differ diff --git a/owo/paopao/E5BF83E7A28E_2x.png b/owo/paopao/E5BF83E7A28E_2x.png new file mode 100644 index 0000000..6ee132b Binary files /dev/null and b/owo/paopao/E5BF83E7A28E_2x.png differ diff --git a/owo/paopao/E68092_2x.png b/owo/paopao/E68092_2x.png new file mode 100644 index 0000000..2bdffa4 Binary files /dev/null and b/owo/paopao/E68092_2x.png differ diff --git a/owo/paopao/E6838AE593AD_2x.png b/owo/paopao/E6838AE593AD_2x.png new file mode 100644 index 0000000..a596e58 Binary files /dev/null and b/owo/paopao/E6838AE593AD_2x.png differ diff --git a/owo/paopao/E6838AE68190_2x.png b/owo/paopao/E6838AE68190_2x.png new file mode 100644 index 0000000..0c1e20a Binary files /dev/null and b/owo/paopao/E6838AE68190_2x.png differ diff --git a/owo/paopao/E6838AE8AEB6_2x.png b/owo/paopao/E6838AE8AEB6_2x.png new file mode 100644 index 0000000..81fda5a Binary files /dev/null and b/owo/paopao/E6838AE8AEB6_2x.png differ diff --git a/owo/paopao/E68792E5BE97E79086_2x.png b/owo/paopao/E68792E5BE97E79086_2x.png new file mode 100644 index 0000000..59fcfdc Binary files /dev/null and b/owo/paopao/E68792E5BE97E79086_2x.png differ diff --git a/owo/paopao/E6898BE7BAB8_2x.png b/owo/paopao/E6898BE7BAB8_2x.png new file mode 100644 index 0000000..e59e7c5 Binary files /dev/null and b/owo/paopao/E6898BE7BAB8_2x.png differ diff --git a/owo/paopao/E68C96E9BCBB_2x.png b/owo/paopao/E68C96E9BCBB_2x.png new file mode 100644 index 0000000..17a5335 Binary files /dev/null and b/owo/paopao/E68C96E9BCBB_2x.png differ diff --git a/owo/paopao/E68D82E598B4E7AC91_2x.png b/owo/paopao/E68D82E598B4E7AC91_2x.png new file mode 100644 index 0000000..57975f7 Binary files /dev/null and b/owo/paopao/E68D82E598B4E7AC91_2x.png differ diff --git a/owo/paopao/E6989FE6989FE69C88E4BAAE_2x.png b/owo/paopao/E6989FE6989FE69C88E4BAAE_2x.png new file mode 100644 index 0000000..e19bfe7 Binary files /dev/null and b/owo/paopao/E6989FE6989FE69C88E4BAAE_2x.png differ diff --git a/owo/paopao/E6B197_2x.png b/owo/paopao/E6B197_2x.png new file mode 100644 index 0000000..5f57a18 Binary files /dev/null and b/owo/paopao/E6B197_2x.png differ diff --git a/owo/paopao/E6B299E58F91_2x.png b/owo/paopao/E6B299E58F91_2x.png new file mode 100644 index 0000000..f663de3 Binary files /dev/null and b/owo/paopao/E6B299E58F91_2x.png differ diff --git a/owo/paopao/E6B3AA_2x.png b/owo/paopao/E6B3AA_2x.png new file mode 100644 index 0000000..a1caed0 Binary files /dev/null and b/owo/paopao/E6B3AA_2x.png differ diff --git a/owo/paopao/E6BB91E7A8BD_2x.png b/owo/paopao/E6BB91E7A8BD_2x.png new file mode 100644 index 0000000..8402f16 Binary files /dev/null and b/owo/paopao/E6BB91E7A8BD_2x.png differ diff --git a/owo/paopao/E781AFE6B3A1_2x.png b/owo/paopao/E781AFE6B3A1_2x.png new file mode 100644 index 0000000..1aa078a Binary files /dev/null and b/owo/paopao/E781AFE6B3A1_2x.png differ diff --git a/owo/paopao/E788B1E5BF83_2x.png b/owo/paopao/E788B1E5BF83_2x.png new file mode 100644 index 0000000..f6f4c64 Binary files /dev/null and b/owo/paopao/E788B1E5BF83_2x.png differ diff --git a/owo/paopao/E78A80E588A9_2x.png b/owo/paopao/E78A80E588A9_2x.png new file mode 100644 index 0000000..c828e77 Binary files /dev/null and b/owo/paopao/E78A80E588A9_2x.png differ diff --git a/owo/paopao/E78B82E6B197_2x.png b/owo/paopao/E78B82E6B197_2x.png new file mode 100644 index 0000000..2aceb02 Binary files /dev/null and b/owo/paopao/E78B82E6B197_2x.png differ diff --git a/owo/paopao/E78EABE791B0_2x.png b/owo/paopao/E78EABE791B0_2x.png new file mode 100644 index 0000000..c0618cf Binary files /dev/null and b/owo/paopao/E78EABE791B0_2x.png differ diff --git a/owo/paopao/E7949FE6B094_2x.png b/owo/paopao/E7949FE6B094_2x.png new file mode 100644 index 0000000..9befd26 Binary files /dev/null and b/owo/paopao/E7949FE6B094_2x.png differ diff --git a/owo/paopao/E79691E997AE_2x.png b/owo/paopao/E79691E997AE_2x.png new file mode 100644 index 0000000..cff4a43 Binary files /dev/null and b/owo/paopao/E79691E997AE_2x.png differ diff --git a/owo/paopao/E79C9FE6A392_2x.png b/owo/paopao/E79C9FE6A392_2x.png new file mode 100644 index 0000000..97ca30d Binary files /dev/null and b/owo/paopao/E79C9FE6A392_2x.png differ diff --git a/owo/paopao/E79DA1E8A789_2x.png b/owo/paopao/E79DA1E8A789_2x.png new file mode 100644 index 0000000..21594dd Binary files /dev/null and b/owo/paopao/E79DA1E8A789_2x.png differ diff --git a/owo/paopao/E7A4BCE789A9_2x.png b/owo/paopao/E7A4BCE789A9_2x.png new file mode 100644 index 0000000..8572a23 Binary files /dev/null and b/owo/paopao/E7A4BCE789A9_2x.png differ diff --git a/owo/paopao/E7AC91E5B0BF_2x.png b/owo/paopao/E7AC91E5B0BF_2x.png new file mode 100644 index 0000000..a2c29a1 Binary files /dev/null and b/owo/paopao/E7AC91E5B0BF_2x.png differ diff --git a/owo/paopao/E7AC91E79CBC_2x.png b/owo/paopao/E7AC91E79CBC_2x.png new file mode 100644 index 0000000..0680d43 Binary files /dev/null and b/owo/paopao/E7AC91E79CBC_2x.png differ diff --git a/owo/paopao/E7BAA2E9A286E5B7BE_2x.png b/owo/paopao/E7BAA2E9A286E5B7BE_2x.png new file mode 100644 index 0000000..7690c2f Binary files /dev/null and b/owo/paopao/E7BAA2E9A286E5B7BE_2x.png differ diff --git a/owo/paopao/E8839CE588A9_2x.png b/owo/paopao/E8839CE588A9_2x.png new file mode 100644 index 0000000..821abfd Binary files /dev/null and b/owo/paopao/E8839CE588A9_2x.png differ diff --git a/owo/paopao/E88AB1E5BF83_2x.png b/owo/paopao/E88AB1E5BF83_2x.png new file mode 100644 index 0000000..3e8e915 Binary files /dev/null and b/owo/paopao/E88AB1E5BF83_2x.png differ diff --git a/owo/paopao/E88CB6E69DAF_2x.png b/owo/paopao/E88CB6E69DAF_2x.png new file mode 100644 index 0000000..fc8ac2c Binary files /dev/null and b/owo/paopao/E88CB6E69DAF_2x.png differ diff --git a/owo/paopao/E88DAFE4B8B8_2x.png b/owo/paopao/E88DAFE4B8B8_2x.png new file mode 100644 index 0000000..9bd93a0 Binary files /dev/null and b/owo/paopao/E88DAFE4B8B8_2x.png differ diff --git a/owo/paopao/E89B8BE7B395_2x.png b/owo/paopao/E89B8BE7B395_2x.png new file mode 100644 index 0000000..37ab127 Binary files /dev/null and b/owo/paopao/E89B8BE7B395_2x.png differ diff --git a/owo/paopao/E89CA1E7839B_2x.png b/owo/paopao/E89CA1E7839B_2x.png new file mode 100644 index 0000000..f3aba29 Binary files /dev/null and b/owo/paopao/E89CA1E7839B_2x.png differ diff --git a/owo/paopao/E98499E8A786_2x.png b/owo/paopao/E98499E8A786_2x.png new file mode 100644 index 0000000..42d110e Binary files /dev/null and b/owo/paopao/E98499E8A786_2x.png differ diff --git a/owo/paopao/E985B7_2x.png b/owo/paopao/E985B7_2x.png new file mode 100644 index 0000000..728baff Binary files /dev/null and b/owo/paopao/E985B7_2x.png differ diff --git a/owo/paopao/E985B8E788BD_2x.png b/owo/paopao/E985B8E788BD_2x.png new file mode 100644 index 0000000..1fff71c Binary files /dev/null and b/owo/paopao/E985B8E788BD_2x.png differ diff --git a/owo/paopao/E992B1E5B881_2x.png b/owo/paopao/E992B1E5B881_2x.png new file mode 100644 index 0000000..1e89f99 Binary files /dev/null and b/owo/paopao/E992B1E5B881_2x.png differ diff --git a/owo/paopao/E992B1_2x.png b/owo/paopao/E992B1_2x.png new file mode 100644 index 0000000..3cc877f Binary files /dev/null and b/owo/paopao/E992B1_2x.png differ diff --git a/owo/paopao/E998B4E999A9_2x.png b/owo/paopao/E998B4E999A9_2x.png new file mode 100644 index 0000000..9fe13b4 Binary files /dev/null and b/owo/paopao/E998B4E999A9_2x.png differ diff --git a/owo/paopao/E99FB3E4B990_2x.png b/owo/paopao/E99FB3E4B990_2x.png new file mode 100644 index 0000000..38f78c2 Binary files /dev/null and b/owo/paopao/E99FB3E4B990_2x.png differ diff --git a/owo/paopao/E9A699E89589_2x.png b/owo/paopao/E9A699E89589_2x.png new file mode 100644 index 0000000..eccebc3 Binary files /dev/null and b/owo/paopao/E9A699E89589_2x.png differ diff --git a/owo/paopao/E9BB91E7BABF_2x.png b/owo/paopao/E9BB91E7BABF_2x.png new file mode 100644 index 0000000..cc3c56a Binary files /dev/null and b/owo/paopao/E9BB91E7BABF_2x.png differ diff --git a/owo/paopao/OK_2x.png b/owo/paopao/OK_2x.png new file mode 100644 index 0000000..a1e18ab Binary files /dev/null and b/owo/paopao/OK_2x.png differ diff --git a/owo/paopao/haha_2x.png b/owo/paopao/haha_2x.png new file mode 100644 index 0000000..e847878 Binary files /dev/null and b/owo/paopao/haha_2x.png differ diff --git a/owo/paopao/list.txt b/owo/paopao/list.txt new file mode 100644 index 0000000..e684ea1 --- /dev/null +++ b/owo/paopao/list.txt @@ -0,0 +1,72 @@ +E4B88DE9AB98E585B4_2x.png +E4B996_2x.png +E4BDA0E68782E79A84_2x.png +E4BEBFE4BEBF_2x.png +E586B7_2x.png +E58B89E5BCBA_2x.png +E59083E7939C_2x.png +E59083E7BF94_2x.png +E59090E8888C_2x.png +E59090_2x.png +E59180E592A9E788B9_2x.png +E591B5E591B5_2x.png +E591BC_2x.png +E592A6_2x.png +E59388E59388_2x.png +E5958A_2x.png +E596B7_2x.png +E5989AE7919F_2x.png +E5A4A7E68B87E68C87_2x.png +E5A4AAE5BC80E5BF83_2x.png +E5A4AAE998B3_2x.png +E5A794E5B188_2x.png +E5B08FE4B996_2x.png +E5B08FE7BAA2E884B8_2x.png +E5BC80E5BF83_2x.png +E5BCB1_2x.png +E5BDA9E899B9_2x.png +E5BF83E7A28E_2x.png +E68092_2x.png +E6838AE593AD_2x.png +E6838AE68190_2x.png +E6838AE8AEB6_2x.png +E68792E5BE97E79086_2x.png +E6898BE7BAB8_2x.png +E68C96E9BCBB_2x.png +E68D82E598B4E7AC91_2x.png +E6989FE6989FE69C88E4BAAE_2x.png +E6B197_2x.png +E6B299E58F91_2x.png +E6B3AA_2x.png +E6BB91E7A8BD_2x.png +E781AFE6B3A1_2x.png +E788B1E5BF83_2x.png +E78A80E588A9_2x.png +E78B82E6B197_2x.png +E78EABE791B0_2x.png +E7949FE6B094_2x.png +E79691E997AE_2x.png +E79C9FE6A392_2x.png +E79DA1E8A789_2x.png +E7A4BCE789A9_2x.png +E7AC91E5B0BF_2x.png +E7AC91E79CBC_2x.png +E7BAA2E9A286E5B7BE_2x.png +E8839CE588A9_2x.png +E88AB1E5BF83_2x.png +E88CB6E69DAF_2x.png +E88DAFE4B8B8_2x.png +E89B8BE7B395_2x.png +E89CA1E7839B_2x.png +E98499E8A786_2x.png +E985B7_2x.png +E985B8E788BD_2x.png +E992B1E5B881_2x.png +E992B1_2x.png +E998B4E999A9_2x.png +E99FB3E4B990_2x.png +E9A699E89589_2x.png +E9BB91E7BABF_2x.png +haha_2x.png +OK_2x.png +what_2x.png diff --git a/owo/paopao/what_2x.png b/owo/paopao/what_2x.png new file mode 100644 index 0000000..7c985c8 Binary files /dev/null and b/owo/paopao/what_2x.png differ diff --git a/page-about.php b/page-about.php new file mode 100644 index 0000000..0555ad6 --- /dev/null +++ b/page-about.php @@ -0,0 +1,70 @@ + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + + content);?> + + +
    +
    +
    +
    + +allow("comment")): ?> +
    +
    +
    + +
    +

    交流区

    +
    + hasLogin()){?> + +
    +
    + + 已开启深度、隐私交流模式,愿意参与朋友欢迎注册登录 + 已有 <commentsNum()?>> 条评论,登录参与互动 + 注册登录遇问题请发邮件到sagrre_cn@126.com,老朋友请注明曾用评论昵称、邮箱,夕格帮您查询或注册初始账户 + +
    +
    + +user->hasLogin()): ?> +
    +
    + <?php $this->user->screenName(); ?> + user->screenName(); ?> + 欢迎您,您已成功登录,祝阅读愉快 + +
    +
    + +
    + need("comments.php"); ?> + +
    + need("footer.php"); ?> + + + + diff --git a/page-archives.php b/page-archives.php new file mode 100644 index 0000000..95e8202 --- /dev/null +++ b/page-archives.php @@ -0,0 +1,785 @@ + + + + +need("header.php"); ?> + + +need('assets/lantern.html'); ?> + + +
    +
    + need("component/menu.php"); ?> + + +
    + + +
    + widget("Widget_Metas_Category_List"); + $categoryArray = array(); + + // 重新遍历分类并存储到数组 + $categories->reset(); + while ($categories->next()) { + $categoryArray[] = array( + 'name' => $categories->name, + 'permalink' => $categories->permalink, + 'count' => $categories->count, + 'description' => $categories->description + ); + } + + // 按文章数从多到少排序 + usort($categoryArray, function($a, $b) { + return $b['count'] - $a['count']; + }); + ?> + 0): ?> +
    📁 按分类归档
    + + +
    + + + + +
    +
    🕰️ 按年份归档
    +
    + widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives); + + // 先统计每个年份和月份的文章数量 + $yearCount = array(); + $monthCount = array(); + $allPosts = array(); + + // 第一次遍历:收集所有文章并统计数量 + while($archives->next()): + $year_tmp = date('Y', $archives->created); + $mon_tmp = date('m', $archives->created); + $yearMonth = $year_tmp . '-' . $mon_tmp; + + // 统计年份文章数 + if (!isset($yearCount[$year_tmp])) { + $yearCount[$year_tmp] = 0; + } + $yearCount[$year_tmp]++; + + // 统计月份文章数 + if (!isset($monthCount[$yearMonth])) { + $monthCount[$yearMonth] = 0; + } + $monthCount[$yearMonth]++; + + // 处理标题长度 + $title = $archives->title; + if (mb_strlen($title, 'UTF-8') > 30) { + $title = mb_substr($title, 0, 30, 'UTF-8') . '...'; + } + + // 存储文章信息 + $allPosts[] = array( + 'year' => $year_tmp, + 'month' => $mon_tmp, + 'created' => $archives->created, + 'permalink' => $archives->permalink, + 'title' => $title, + 'original_title' => $archives->title, // 保留原始标题用于tooltip + 'commentsNum' => $archives->commentsNum, + 'categories' => $archives->categories + ); + endwhile; + + // 按年份和月份排序(从新到旧) + krsort($yearCount); + krsort($monthCount); + + $output = ''; + $currentYear = ''; + $currentMonth = ''; + + foreach ($allPosts as $post): + $year_tmp = $post['year']; + $mon_tmp = $post['month']; + + // 获取分类信息 - 如果有分类就显示,没有就不显示 + $categoryDisplay = ''; + if (!empty($post['categories'])) { + $category = current($post['categories']); + $categoryName = $category['name']; + $categoryPermalink = $category['permalink']; + $categoryDisplay = '['.''. $categoryName .''.']'; + } + + // 新年份开始 + if ($currentYear != $year_tmp) { + // 关闭前一个月份和年份 + if ($currentMonth != '') { + $output .= '
    '; + } + if ($currentYear != '') { + $output .= '
    '; + } + + $currentYear = $year_tmp; + $currentMonth = ''; + $yearTotal = isset($yearCount[$currentYear]) ? $yearCount[$currentYear] : 0; + + $output .= '
    '; + $output .= '

    '. + $currentYear .'' . $yearTotal . '[+]

    '; + $output .= ''; + } + + $currentMonth = $mon_tmp; + $yearMonth = $currentYear . '-' . $currentMonth; + $monthTotal = isset($monthCount[$yearMonth]) ? $monthCount[$yearMonth] : 0; + + $output .= '
    '; + $output .= '

    '. $currentMonth .'' . $monthTotal . '[+]

    '; + $output .= '
    '; + } + if ($currentYear != '') { + $output .= '
    '; + } + + echo $output; + ?> +
    + + + +
    + +
    🗺️ 按足迹归档
    + + + +
    + + +
    + widget("Widget_Metas_Tag_Cloud"); + $tagArray = array(); + + // 重新遍历标签并存储到数组 + $tags->reset(); + while ($tags->next()) { + // 跳过文章数为0的标签 + if ($tags->count > 0) { + $tagArray[] = array( + 'name' => $tags->name, + 'permalink' => $tags->permalink, + 'count' => $tags->count + ); + } + } + + // 按文章数从多到少排序 + usort($tagArray, function($a, $b) { + return $b['count'] - $a['count']; + }); + + // 设置要显示的初始标签数量 + $initialDisplayCount = 20; // 可以根据需要调整 + $totalTags = count($tagArray); + ?> + + 0): ?> +
    🏷️ 按标签归档
    + +
    + + + $initialDisplayCount): ?> +
    + +
    + +
    + +
    + + + + + + + + + + + need("footer.php"); */?> +
    +
      + + + +
    +
    + + \ No newline at end of file diff --git a/page-books.php b/page-books.php new file mode 100644 index 0000000..6d20462 --- /dev/null +++ b/page-books.php @@ -0,0 +1,69 @@ + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + + content);?> + +
    +
    +
    +
    + +allow("comment")): ?> +
    +
    +
    + +
    +

    交流区

    +
    + hasLogin()){?> + +
    +
    + + 已开启深度、隐私交流模式,愿意参与朋友欢迎注册登录 + 已有 <commentsNum()?>> 条评论,登录参与互动 + 注册登录遇问题请发邮件到sagrre_cn@126.com,老朋友请注明曾用评论昵称、邮箱,夕格帮您查询或注册初始账户 + +
    +
    + +user->hasLogin()): ?> +
    +
    + <?php $this->user->screenName(); ?> + user->screenName(); ?> + 欢迎您,您已成功登录,祝阅读愉快 + +
    +
    + +
    + need("comments.php"); ?> + +
    + need("footer.php"); ?> + + + + diff --git a/page-duanwen.php b/page-duanwen.php new file mode 100644 index 0000000..b45d0d4 --- /dev/null +++ b/page-duanwen.php @@ -0,0 +1,275 @@ + + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    + content);?> +
    + +
    +
    +
    +
    + + + + + +
    +
    + +
    + need("footer.php"); ?> + + diff --git a/page-huixiang.php b/page-huixiang.php new file mode 100644 index 0000000..aa2fc7e --- /dev/null +++ b/page-huixiang.php @@ -0,0 +1,77 @@ + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + + + + +

    回想插件未启用

    + + + +
    +
    +
    +
    + +allow("comment")): ?> +
    +
    +
    + +
    +

    交流区

    +
    + hasLogin()){?> + +
    +
    + + 已开启深度、隐私交流模式,愿意参与朋友欢迎注册登录 + 已有 <commentsNum()?>> 条评论,登录参与互动 + 注册登录遇问题请发邮件到sagrre_cn@126.com,老朋友请注明曾用评论昵称、邮箱,夕格帮您查询或注册初始账户 + +
    +
    + +user->hasLogin()): ?> +
    +
    + <?php $this->user->screenName(); ?> + user->screenName(); ?> + 欢迎您,您已成功登录,祝阅读愉快 + +
    +
    + +
    + need("comments.php"); ?> + +
    + need("footer.php"); ?> + + + + diff --git a/page-index.php b/page-index.php new file mode 100644 index 0000000..ff1e336 --- /dev/null +++ b/page-index.php @@ -0,0 +1,148 @@ + +// 在页面加载前立即设置主题,避免闪烁 +(function() { + const theme = localStorage.theme || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"); + if (theme === "dark" || (!localStorage.theme && window.matchMedia("(prefers-color-scheme: dark)").matches)) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } +})(); +'; +?> + + +need("header.php"); ?> + +need('assets/lantern.html'); ?> + +
    +
    + hasLogin()){?> + need("component/menu.php"); ?> + need("component/post-top.php"); ?> +
    + +
    加载中...
    +
    + + hasLogin()){?> +
    +
    + + 已进入私人领地,请登录再浏览阅读 + +
    +
    + +
    +
    + +
    +
      + +
    +
    + + + + \ No newline at end of file diff --git a/page-links.php b/page-links.php new file mode 100644 index 0000000..8bae602 --- /dev/null +++ b/page-links.php @@ -0,0 +1,152 @@ + + + + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + content); ?> +
    +
    +

    近期来访

    +
      + +
    +
    + + +
    +

    三人为师

    +
      + +
    +
    + + + + + +
    +

    初来乍到

    +
      + +
    +
    + + +
    +

    常来常往

    +
      + +
    +
    + + +
    +

    随缘随访

    +
      + +
    +
    + + + + + + + + +
    + +
    + +
    + need("footer.php"); ?> + + + + diff --git a/page-lishi.php b/page-lishi.php new file mode 100644 index 0000000..d5f2c05 --- /dev/null +++ b/page-lishi.php @@ -0,0 +1,35 @@ + + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + + content);?> + + +
    +
    +
    +
    + need("footer.php"); ?> + + + + diff --git a/page-ruiping.php b/page-ruiping.php new file mode 100644 index 0000000..7195be1 --- /dev/null +++ b/page-ruiping.php @@ -0,0 +1,65 @@ + + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + + +
    +
    +
    +
    + need("footer.php"); ?> + + + + diff --git a/page-sulan.php b/page-sulan.php new file mode 100644 index 0000000..903cb72 --- /dev/null +++ b/page-sulan.php @@ -0,0 +1,1057 @@ + +// 在页面加载前立即设置主题,避免闪烁 +(function() { + const theme = localStorage.theme || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"); + if (theme === "dark" || (!localStorage.theme && window.matchMedia("(prefers-color-scheme: dark)").matches)) { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } +})(); +'; + +$this->need('header.php'); + +// 计算最近6个月的日期范围 +$endDate = new DateTime(); +$startDate = new DateTime(); +$startDate->modify('-5 months'); // 最近6个月(包含当前月) +$startDate->modify('first day of this month'); // 从当月第一天开始 + +// 只显示最近6个月 +$db = Typecho_Db::get(); + +// 查询所有已发布的文章,在PHP中进行日期筛选 +$posts = $db->fetchAll($db->select('title', 'created', 'slug', 'cid') + ->from('table.contents') + ->where('table.contents.type = ?', 'post') + ->where('table.contents.status = ?', 'publish') + ->order('table.contents.created', Typecho_Db::SORT_ASC)); + +// 组织热力图数据 +$heatmapData = []; + +foreach ($posts as $post) { + $postDate = date('Y-m-d', $post['created']); + $postDateTime = new DateTime($postDate); + + // 只处理最近6个月的数据 + if ($postDateTime >= $startDate && $postDateTime <= $endDate) { + if (!isset($heatmapData[$postDate])) { + $heatmapData[$postDate] = [ + 'count' => 0, + 'articles' => [] + ]; + } + + $heatmapData[$postDate]['count']++; + // 构建正确的文章链接(添加.html后缀) + $postUrl = Typecho_Common::url($post['slug'] . '.html', $this->options->index); + $heatmapData[$postDate]['articles'][] = [ + 'title' => $post['title'], + 'url' => $postUrl + ]; + } +} + +// 补全最近6个月中所有日期的数据 +$currentDate = clone $startDate; +$endOfRange = clone $endDate; +$endOfRange->modify('last day of this month'); + +for ($date = clone $currentDate; $date <= $endOfRange; $date->modify('+1 day')) { + $dateString = $date->format('Y-m-d'); + if (!isset($heatmapData[$dateString])) { + $heatmapData[$dateString] = [ + 'count' => 0, + 'articles' => [] + ]; + } +} + +// 计算月份标签的准确位置 +$monthPositions = []; +$tempDate = clone $startDate; +$firstDayOfWeek = $tempDate->format('N'); // 1=周一, 7=周日 +$offset = $firstDayOfWeek - 1; // 转换为0=周一, 6=周日 + +$currentMonth = (int)$tempDate->format('n'); +$monthPositions[$currentMonth] = 0; // 第一个月从位置0开始 + +$dayCount = 0; +while ($tempDate <= $endOfRange) { + $month = (int)$tempDate->format('n'); + if ($month != $currentMonth) { + $monthPositions[$month] = $dayCount; + $currentMonth = $month; + } + $dayCount++; + $tempDate->modify('+1 day'); +} + +// 生成最近6个月的月份标签和位置 +$monthLabels = []; +$currentMonth = clone $startDate; +for ($i = 0; $i < 6; $i++) { + $monthNum = (int)$currentMonth->format('n'); + $position = isset($monthPositions[$monthNum]) ? $monthPositions[$monthNum] : 0; + $monthLabels[] = [ + 'name' => $currentMonth->format('n月'), + 'position' => $position + ]; + $currentMonth->modify('+1 month'); +} + +// 计算总周数 +$totalDays = $endOfRange->diff($startDate)->days + 1; +$totalWeeks = ceil(($totalDays + $offset) / 7); + +//以下为往年今日文章调用代码 +// 获取当前日期信息 +$current_month = date('m'); +$current_day = date('d'); +$current_year = date('Y'); + +// 查询往年今日文章 +$db = Typecho_Db::get(); +$select = $db->select() + ->from('table.contents') + ->where('type = ?', 'post') + ->where('status = ?', 'publish'); + +// 获取所有文章然后手动过滤 +$all_posts = $db->fetchAll($select); +$past_posts = array(); + +foreach ($all_posts as $post) { + $post_month = date('m', $post['created']); + $post_day = date('d', $post['created']); + $post_year = date('Y', $post['created']); + + // 筛选条件:同月同日,但不是今年 + if ($post_month == $current_month && $post_day == $current_day && $post_year != $current_year) { + $past_posts[] = $post; + } +} + +// 按创建时间倒序排列 +usort($past_posts, function($a, $b) { + return $b['created'] - $a['created']; +}); +?> + + + + + + need("header.php"); ?> + +need('assets/lantern.html'); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    +
    + content); ?> + + +
    +
    +
    +
    + + + + +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    + + = 0 && $currentDayIndex < $totalDays): + $tempDate->modify("+$currentDayIndex days"); + $dateString = $tempDate->format('Y-m-d'); + $dayData = isset($heatmapData[$dateString]) ? $heatmapData[$dateString] : ['count' => 0, 'articles' => []]; + $count = $dayData['count']; + + // 确定颜色等级 + $activityClass = 'activity-low'; + if ($count === 1) $activityClass = 'activity-medium'; + else if ($count === 2) $activityClass = 'activity-high'; + else if ($count === 3) $activityClass = 'activity-higher'; + else if ($count >= 4) $activityClass = 'activity-highest'; + ?> + +
    + 0): ?> +
    +
    + format('Y年m月d日'); ?> (篇) +
    +
    + +
    + + + +
    + +
    +
    + +
    + +
    + + +
    + +
    +
    +
    +
    +
    + + + +
    +
    + widget('Widget_Contents_Post_Recent', 'pageSize=5')->to($posts); + ?> + + next()): ?> + created; + $todayStart = strtotime('today'); + $yesterdayStart = strtotime('yesterday'); + + if ($postTime >= $todayStart) { + $timeText = '今天'; + } elseif ($postTime >= $yesterdayStart) { + $timeText = '昨天'; + } else { + $daysAgo = floor(($todayStart - $postTime) / (60 * 60 * 24)); + if ($daysAgo < 7) { + $timeText = $daysAgo . '天前'; + } elseif ($daysAgo < 30) { + $timeText = floor($daysAgo / 7) . '周前'; + } else { + $timeText = floor($daysAgo / 30) . '月前'; + } + } + + $postDate = date('Y-m-d', $postTime); + + // 获取文章分类信息 - 使用更可靠的方法 + $categoryName = ''; + $categoryUrl = ''; + $showImages = false; + + // 方法1:直接通过posts对象获取分类 + if ($posts->categories) { + $categories = $posts->categories; + if (!empty($categories)) { + $category = current($categories); // 获取第一个分类 + $categoryName = $category['name']; + $categoryUrl = $category['permalink']; + $showImages = in_array($categoryName, array('户外', '爸爸厨房', '探店')); + } + } + + // 方法2:如果方法1失败,使用备用方法 + if (empty($categoryName)) { + ob_start(); + $posts->category(); + $categoryOutput = ob_get_clean(); + + if (!empty($categoryOutput)) { + $categoryName = strip_tags($categoryOutput); + $showImages = in_array($categoryName, array('户外', '爸爸厨房', '探店')); + + // 尝试获取分类链接 + $db = Typecho_Db::get(); + $categoryRow = $db->fetchRow($db->select('mid') + ->from('table.metas') + ->where('name = ?', $categoryName) + ->where('type = ?', 'category')); + + if ($categoryRow) { + $categoryWidget = Typecho_Widget::widget('Widget_Metas_Category_List'); + while ($categoryWidget->next()) { + if ($categoryWidget->mid == $categoryRow['mid']) { + $categoryUrl = $categoryWidget->permalink; + break; + } + } + } + } + } + ?> + +
    +

    + title(); ?> +

    + +
    + fields->description; + if (!empty($customDescription)) { + // 如果有自定义描述,直接显示 + echo Typecho_Common::subStr(strip_tags($customDescription), 0, 150, '...'); + } else { + // 如果没有自定义描述,按现有方式截取 + if ($posts->excerpt) { + echo Typecho_Common::subStr(strip_tags($posts->excerpt), 0, 150, '...'); + } else { + echo Typecho_Common::subStr(strip_tags($posts->content), 0, 150, '...'); + } + } + ?> +
    + + + content; + preg_match_all('/]+src=["\']([^"\']+)["\'][^>]*>/i', $content, $matches); + $images = $matches[1] ?? []; + $displayImages = array_slice($images, 0, 4); + ?> + + +
    + + 文章图片 + +
    + + + + name; + $adminMail = $user->mail; + + $comments = $db->fetchAll($db->select('author', 'text', 'created', 'parent', 'mail') + ->from('table.comments') + ->where('cid = ?', $posts->cid) + ->where('status = ?', 'approved') + ->where('author != ?', $adminName) + ->where('mail != ?', $adminMail) + ->where('parent = ?', 0) + ->order('created', Typecho_Db::SORT_DESC) + ->limit(10)); + + $processedComments = array(); + foreach ($comments as $comment) { + $commentAuthor = htmlspecialchars($comment['author']); + $commentText = Typecho_Common::subStr(strip_tags($comment['text']), 0, 80, '...'); + + $processedComments[] = array( + 'author' => $commentAuthor, + 'text' => $commentText + ); + } + ?> + +
    + + + + + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + +
    +

    暂无往年今日的文章,今天是个开始新篇章的好日子!

    +
    + +
    +
    +
    +
    + + need("footer.php"); ?> +
    +
    + + \ No newline at end of file diff --git a/page.php b/page.php new file mode 100644 index 0000000..9603f68 --- /dev/null +++ b/page.php @@ -0,0 +1,22 @@ + + + +need("header.php"); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    + need("component/post-title.php"); ?> +
    + content);?> +
    + +
    +
    + +
    + need("footer.php");*/ ?> + + diff --git a/post.php b/post.php new file mode 100644 index 0000000..24decfc --- /dev/null +++ b/post.php @@ -0,0 +1,243 @@ + + +categories; + +// 定义需要特殊样式的分类slug或mid +$special_categories = array('探店', '户外', '爸爸厨房'); + +// 判断是否包含特殊分类 +$has_special_class = false; +foreach ($categories as $category) { + if (in_array($category['name'], $special_categories) || + in_array($category['slug'], $special_categories) || + in_array($category['mid'], $special_categories)) { + $has_special_class = true; + break; + } +} +?> + + + + + + + + + + +need("header.php"); ?> +need('assets/lantern.html'); ?> + +
    +
    + need("component/menu.php"); ?> +
    +
    + need("component/post-title.php"); ?> + +
    + + hasLogin()) { ?> + content); ?> + + hasLogin()) { ?> +
    +
    + + 已进入私人领地,请登录再阅读 + +
    +
    + +
    + +is('post')): ?> + + + + cid); ?> + + + + + +
    +

    往年今日 created); ?>

    +
    + +
    + created); ?> +
    + + +
    + + + fetchAll($db->select('mid, COUNT(cid) AS count') + ->from('table.relationships') + ->group('mid')); + $tagCountMap = array_column($tagCounts, 'count', 'mid'); + ?> + hasLogin()) { ?> + tags): ?> + tags as $tag): ?> + + [] + + + + + + +
    + +
    + authorId == $comments->ownerId) { ?> + widget("Widget_Comments_Recent", [])->to($newComments); ?> + have()): ?> + next()): ?> +
  • + " target="_blank" + class="line-clamp-2 text-sm dark:text-gray-400 jasmine-link-color-hover text-neutral-500"> + <?php $comments->author; ?> + +
  • + + + +
    +
    +
    + +
    + + + +is('single')): ?> + + + + + allow("comment")): ?> +
    +
    +
    + +
    +

    交流区

    +
    + hasLogin()) { ?> + +
    +
    + + 已开启深度、隐私交流模式,请登录后参与互动 + 已有 + <commentsNum() ?>> 条评论 + + +
    +
    + + user->hasLogin()): ?> +
    +
    + <?php $this->user->screenName(); ?> + user->screenName(); ?> + 您已成功登录,祝阅读愉快 + +
    +
    + +
    + need("comments.php"); ?> + +
    +
    + + +need("footer.php"); ?> + + + \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..02f0674 Binary files /dev/null and b/screenshot.png differ