diff --git a/assets/admin/src/schema/sections/post-list/feature.js b/assets/admin/src/schema/sections/post-list/feature.js index f4a9b6fd..b479281c 100644 --- a/assets/admin/src/schema/sections/post-list/feature.js +++ b/assets/admin/src/schema/sections/post-list/feature.js @@ -6,8 +6,6 @@ export const featureSchema = { defaults: { feature_pdf_export: false, feature_print: true, - feature_word_count: true, - feature_reading_time: true, }, groups: [ { @@ -16,8 +14,6 @@ export const featureSchema = { icon: 'fa fas fa-wrench', fields: [ { key: 'feature_print', label: '打印文章', type: 'switch', default: true }, - { key: 'feature_word_count', label: '字数统计', type: 'switch', default: true }, - { key: 'feature_reading_time', label: '预计阅读时间', type: 'switch', default: true }, { key: 'feature_pdf_export', label: 'PDF 导出', type: 'switch', default: false, help: '实验性功能' }, ], }, diff --git a/assets/css/build/single.css b/assets/css/build/single.css index c65f7150..c35a6cbd 100644 --- a/assets/css/build/single.css +++ b/assets/css/build/single.css @@ -336,22 +336,6 @@ body.single main.container { box-sizing: border-box; } -/* Reading facts below the author row. */ -.article-reading-meta { - display: flex; - flex-wrap: wrap; - gap: 8px 14px; - margin: 12px 0 2px; - color: var(--muted-color, #777); - font-size: 12px; -} - -.article-reading-meta span { - display: inline-flex; - align-items: center; - gap: 5px; -} - /* source: assets/css/frontend/single-post/content.css */ /* ========== Single Post ========== */ @@ -1332,10 +1316,24 @@ html.dark .post-drop-meta__item:hover { color: var(--key-color, #333); } -.article-header .article-avatar .relative { +.article-header .article-avatar .single-meta-row { margin-top: 20px; position: relative; - min-height: 1px; + min-height: 28px; + display: flex; + align-items: center; + justify-content: flex-end; +} + +.article-header .article-avatar .single-meta-row > .line-form-line { + bottom: 50%; +} + +.article-header .article-avatar .single-meta-row > .single-metabox { + position: relative; + inset: auto; + transform: none; + z-index: 1; } .single-metabox { @@ -1368,6 +1366,9 @@ html.dark .post-drop-meta__item:hover { .single-metabox .post-drop-meta { position: relative; display: inline-block; + --this-size: 1.73em; + --this-color: var(--meta-color); + --this-bg: var(--body-bg-color, #f5f5f5); } .single-metabox.cover-meta { diff --git a/assets/css/build/single.min.css b/assets/css/build/single.min.css index d99d7fe4..35da0beb 100644 --- a/assets/css/build/single.min.css +++ b/assets/css/build/single.min.css @@ -1 +1 @@ -.relative{position:relative}.flex{display:flex}.flex.ac,.ac{align-items:center}.flex.jc,.jc{justify-content:center}.flex.jsb,.jsb{justify-content:space-between}.flex.at,.at{align-items:flex-start}.flex.ae,.ae{align-items:flex-end}.flex0{flex:0 0 auto}.flex1{flex:1 1 auto;min-width:0}.flex.column{flex-direction:column}.flex.wrap{flex-wrap:wrap}.flex.flex-row,.flex-row{flex-direction:row}.flex.jse,.jse{justify-content:space-evenly}.flex.jsa,.jsa{justify-content:space-around}.flex>.flex1,.flex .flex1{flex:1;overflow:hidden;min-width:0}.relative-h{position:relative;height:100%}.padding-10{padding:10px}.font-bold{font-weight:700}.mt6{margin-top:6px}.gutters-5{margin:-5px}.gutters-5>*{padding:5px}@media(max-width:767px){.flex.flex-row.flex-col-sm-2{flex-wrap:wrap}.flex.flex-row.flex-col-sm-2>*{flex-basis:50%}}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}.abs-right{position:absolute;right:0;top:0}.abs-center{position:absolute;left:0;width:100%;top:50%;right:.7em;transform:translateY(-50%);z-index:1}.abs-center.left-top,.abs-center.right-top{transform:unset;top:0}.abs-center.right-top{left:auto;width:auto;text-align:right}.abs-center.left-top{text-align:left}.abs-center.conter-bottom,.abs-center.conter-conter{text-align:center}.abs-center.right-top,.abs-center.right-bottom,.abs-center.right-conter{text-align:right}.abs-center.conter-bottom,.abs-center.right-bottom,.abs-center.left-bottom{top:auto;transform:unset;bottom:0}.abs-center.left-bottom{left:0;right:auto;text-align:left}.abs-center.right-bottom,.abs-center.right-conter{left:auto;right:0;text-align:right}.graphic,.page-cover{text-shadow:0 0 5px rgba(0,0,0,.2);--main-color: #fff;color:#fff;position:relative;overflow:hidden;box-shadow:0 0 10px var(--main-shadow, rgba(116, 116, 116, .08));padding:0 0 70%;border-radius:var(--main-radius, var(--radius, 8px))}.graphic>.fit-cover,.graphic>img.fit-cover{position:absolute;width:100%;height:100%;object-fit:cover;inset:0}.fit-cover{object-fit:cover;max-width:100%}.title-h-left{position:relative;padding-bottom:8px}.title-h-left:before{transition:.4s;transform-origin:left;position:absolute;content:"";width:40px;height:3px;background:var(--theme-color, var(--focus-color, #f04494));left:0;bottom:3px;border-radius:5px;box-shadow:1px 1px 3px -1px var(--theme-color, var(--focus-color, #f04494))}.line-form-line,.line-form-line:before{position:absolute;bottom:0;left:0;height:1px;width:100%;transition:.8s;background:var(--main-border-color, rgba(50, 50, 50, .06))}.line-form-line:before{content:"";width:0;background:var(--focus-color, #f04494)}.avatar-img{position:relative;display:inline-block;flex-shrink:0;--this-size: 38px;width:var(--this-size);height:var(--this-size)}.avatar-img .avatar,.avatar-img img{width:100%;height:100%;border-radius:50%;object-fit:cover}.avatar-lg{--this-size: 80px}.avatar-md{--this-size: 55px}.avatar-mini{--this-size: 20px}.shrink0{flex-shrink:0}.opacity8{opacity:.8}.muted-color{color:var(--muted-color, var(--color-ink-3))}.muted-2-color{color:var(--muted-2-color, var(--color-ink-4))}.muted-3-color{color:var(--muted-3-color, #b1b1b1)}.muted-4-color{color:var(--muted-4-color, #d2d2d2)}.text-center{text-align:center}.em09{font-size:.9em}.em12{font-size:1.2em}.px12-sm{font-size:12px}.ml3{margin-left:3px}.ml6{margin-left:6px}.ml10{margin-left:10px}.mr3{margin-right:3px}.mr6{margin-right:6px}.mt10{margin-top:10px}.mt20{margin-top:20px}.mb10{margin-bottom:10px}.mb20{margin-bottom:20px}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.text-ellipsis-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.main-bg{background-color:var(--main-bg-color, var(--surface-1))}.separator{position:relative;letter-spacing:.08em}.icon-circle+.icon-circle:before{content:"·";display:inline-block;margin:0 .45em;opacity:.55}.article-avatar name,.article-avatar .name,.user-name{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:100%}.pull-right{float:right}.pull-left{float:left}body.single main.container .content-layout{display:block;min-width:0}body.single main.container .content-layout>*{min-width:0;max-width:100%}body.single main.container .content-layout>.breadcrumb,body.single main.container .content-layout>ul.breadcrumb,body.single main.container .content-layout>.breadcrumb-nav,body.single main.container .content-layout>.breadcrumbs-wrap{position:relative;z-index:1;margin-top:0;margin-bottom:12px;padding-top:2px}body.single .sidebar .aksrt-panel,body.single .sidebar .widget{margin-bottom:15px}body.single main.container{box-sizing:border-box}.article-reading-meta{display:flex;flex-wrap:wrap;gap:8px 14px;margin:12px 0 2px;color:var(--muted-color, #777);font-size:12px}.article-reading-meta span{display:inline-flex;align-items:center;gap:5px}.article,article.article.box-body,.article.main-bg.box-body{padding:0 30px;overflow:hidden}@media(max-width:767px){.article,article.article.box-body,.article.main-bg.box-body{padding:0 15px}.article-header .article-title{font-size:18px}}.entry-header,.article-header{margin-bottom:10px;padding-bottom:0;border-bottom:none;background:transparent;box-shadow:none;border-radius:0}.entry-title,.article-title{font-size:22px;font-weight:700;margin:0;line-height:1.4;letter-spacing:0;color:var(--key-color, var(--color-ink))}.article-title>a:hover{color:inherit}.article-header .article-title{font-size:22px;font-weight:700;color:var(--key-color, var(--color-ink));margin-top:15px}.article-header .article-avatar{margin-top:15px}.entry-meta{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:.875rem;color:var(--color-ink-4)}.entry-meta a{color:var(--color-ink-3)}.entry-meta a:hover{color:var(--color-primary)}.entry-thumb{margin:0 0 28px;border-radius:var(--radius-btn);overflow:hidden}.entry-content,.wp-posts-content{font-size:16px;line-height:2;color:var(--main-color, var(--color-ink));overflow-wrap:break-word;word-wrap:break-word;min-height:90px}.wp-posts-content>h1:not([class]),.wp-posts-content>h2:not([class]),.wp-posts-content>h3:not([class]),.wp-posts-content>h4:not([class]),.wp-posts-content>h1.wp-block-heading,.wp-posts-content>h2.wp-block-heading,.wp-posts-content>h3.wp-block-heading,.wp-posts-content>h4.wp-block-heading{position:relative;padding-bottom:8px}.wp-posts-content>h1:not([class]):before,.wp-posts-content>h2:not([class]):before,.wp-posts-content>h3:not([class]):before,.wp-posts-content>h4:not([class]):before,.wp-posts-content>h1.wp-block-heading:before,.wp-posts-content>h2.wp-block-heading:before,.wp-posts-content>h3.wp-block-heading:before,.wp-posts-content>h4.wp-block-heading:before{content:"";position:absolute;left:0;bottom:0;width:40px;height:3px;background:var(--theme-color, var(--focus-color, #f04494));border-radius:5px}.wp-posts-content>h3:not([class]):before,.wp-posts-content>h4:not([class]):before,.wp-posts-content>h3.wp-block-heading:before,.wp-posts-content>h4.wp-block-heading:before{width:28px;height:2px}:is(.entry-content,.wp-posts-content)>*:first-child{margin-top:0}:is(.entry-content,.wp-posts-content) p{margin:0 0 1.5em}:is(.entry-content,.wp-posts-content) h2{font-size:20px;font-weight:700;margin:28px 0 14px}:is(.entry-content,.wp-posts-content) h3{font-size:18px;font-weight:700;margin:24px 0 12px}:is(.entry-content,.wp-posts-content) h4{font-size:16px;font-weight:700;margin:22px 0 10px}:is(.entry-content,.wp-posts-content) blockquote{margin:0 0 24px;padding:18px 20px;border-left:4px solid var(--color-primary);background:var(--surface-4, rgba(0, 0, 0, .03));border-radius:0 var(--radius-lg) var(--radius-lg) 0;color:var(--color-ink-3)}:is(.entry-content,.wp-posts-content) img{margin:0 auto;display:block;max-width:100%;height:auto;border-radius:min(8px,var(--main-radius, 8px))}:is(.entry-content,.wp-posts-content) figure{max-width:100%;margin:1.5em auto}:is(.entry-content,.wp-posts-content) figcaption{margin-top:8px;color:var(--muted-color, #777);font-size:13px;line-height:1.6;text-align:center}:is(.entry-content,.wp-posts-content) .aksrt-lightbox-target{cursor:zoom-in}.lightbox-overlay{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;flex-direction:column;gap:12px;padding:24px;background:#000000d9}.lightbox-overlay.is-open{display:flex}.lightbox-img{max-width:90vw;max-height:85vh;width:auto;height:auto;border-radius:4px;object-fit:contain}.lightbox-caption{max-width:min(96vw,1200px);color:#fff;font-size:14px;line-height:1.5;text-align:center;opacity:.92}.lightbox-close{position:absolute;top:14px;right:14px;width:40px;height:40px;border:none;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:#ffffff1f;color:#fff;cursor:pointer;transition:background-color .2s ease}.lightbox-close:hover{background:#ffffff38}.lightbox-close i{pointer-events:none}:is(.entry-content,.wp-posts-content) iframe,:is(.entry-content,.wp-posts-content) .wp-block-embed iframe,:is(.entry-content,.wp-posts-content) video{max-width:100%;height:auto}:is(.entry-content,.wp-posts-content) .wp-block-embed{position:relative;width:100%;max-width:100%;overflow:hidden;margin:1.5em 0}:is(.entry-content,.wp-posts-content) code{font-family:var(--font-mono);font-size:.9em;color:#ff3c98;background:#fd999933;padding:2px 6px;border-radius:4px}:is(.entry-content,.wp-posts-content) ul,:is(.entry-content,.wp-posts-content) ol{padding-left:1.5em;margin:0 0 1.5em}:is(.entry-content,.wp-posts-content) ul li::marker{color:var(--color-primary)}.entry-footer{margin-top:40px;padding-top:24px;border-top:1px solid var(--color-line)}.post-tags{display:flex;flex-wrap:wrap;gap:8px}.post-tags a{padding:4px 10px;border-radius:50px;background:var(--muted-bg-color, #eee);border:1px solid var(--main-border-color, rgba(50, 50, 50, .06));font-size:13px;color:var(--muted-color, #777)}.post-tags a:hover{border-color:var(--color-primary);color:var(--color-primary)}.related-posts{margin-top:48px;padding:20px 0 0;border-top:1px solid var(--color-line-soft)}.related-posts__title{font-size:15px;font-weight:700;margin:0 0 10px;color:var(--key-color, #333)}.related-posts__title:before{content:"";display:inline-block;width:40px;height:3px;background:var(--theme-color, #f04494);border-radius:5px;vertical-align:middle;margin-right:8px}.related-posts__grid{display:flex;flex-direction:column;gap:0}.related-card{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--main-border-color, rgba(50, 50, 50, .06));transition:.15s}.related-card:last-child{border-bottom:none}.related-card a{display:flex;align-items:center;gap:12px;color:var(--key-color, #333);text-decoration:none;width:100%}.related-card:hover a{color:var(--focus-color, #f04494)}.related-card__thumb{width:96px;min-width:96px;height:64px;border-radius:var(--main-radius, 8px);overflow:hidden;flex-shrink:0}.related-card__thumb img{width:100%;height:100%;object-fit:cover;transition:transform .3s}.related-card:hover .related-card__thumb img{transform:scale(1.05)}.related-card h4{font-size:14px;font-weight:600;margin:0;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.article-author-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px}.article-author-bar__avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;flex-shrink:0}.article-author-bar__info{flex:1;min-width:0}.article-author-bar__name{font-weight:600;font-size:14px;color:var(--color-ink)}.article-author-bar__name:hover{color:var(--color-primary)}.article-author-bar__meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--color-ink-4, var(--color-ink-4));margin-top:2px}.article-author-bar__meta span{display:inline-flex;align-items:center;gap:3px}.article-author-bar__line{height:1px;background:var(--color-line);margin-bottom:20px}.article-footer{margin-top:32px;padding-top:20px;border-top:1px solid var(--color-line)}.article-copyright{font-size:13px;color:var(--color-ink-4, var(--color-ink-4));margin-bottom:16px}.article-end-separator{text-align:center;margin:16px 0;position:relative}.article-end-separator:before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:var(--color-line)}.article-end-separator span{position:relative;display:inline-block;padding:0 14px;background:var(--surface-page);font-size:11px;font-weight:600;color:var(--color-ink-4, var(--color-ink-4));letter-spacing:2px}.article-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.post-actions-wrap{position:relative;text-align:center;margin-bottom:16px}.post-actions-card,.post-actions{position:relative;text-align:center;margin-bottom:16px;padding-bottom:15px;display:block}.post-actions-wrap>.post-actions{margin-bottom:0}.post-actions-card__hint{font-size:13px;color:var(--color-ink-4, var(--color-ink-4));margin-bottom:12px}.post-actions-card__buttons{display:flex;justify-content:center;gap:10px;margin-bottom:12px}.article .action,.post-actions .action{width:80px;padding:10px 0;display:inline-block;opacity:.7;vertical-align:top;min-width:0;height:auto;border-radius:0;border:0;background:transparent;color:var(--muted-color, #777);cursor:pointer;font-size:14px;transition:opacity .15s ease,color .15s ease;gap:0;text-align:center}.article .action:hover,.post-actions .action:hover,.article .action.is-active,.post-actions .action.is-active{color:inherit;opacity:1;background:transparent;border-color:transparent}.article .action i,.post-actions .action i{font-size:20px;display:block;margin:0 auto 4px;line-height:1}.post-actions .action .action-btn__count,.post-actions .action .action-btn__label,.action-btn__count,.action-btn__label{display:block;font-size:12px;line-height:1.2;font-weight:500}.action-btn{display:inline-flex;align-items:center;gap:6px;padding:.38em 1.1em;border-radius:50px;border:1px solid transparent;background:var(--surface-4, rgba(136, 136, 136, .1));color:var(--color-ink-3);cursor:pointer;font-size:14px;transition:all .15s ease}.action-btn:hover{background:var(--color-primary-soft);color:var(--color-primary)}.action-btn.is-active{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-soft, rgba(240, 68, 148, .08))}.action-btn i{font-size:1.2em}.share-dropdown{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%);z-index:100;display:none!important}.share-dropdown[aria-hidden=false]{display:block!important;animation:shareDropdownIn .2s ease-out forwards}@keyframes shareDropdownIn{0%{opacity:0;transform:translate(-50%) translateY(8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.share-dropdown__grid{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--surface-page);border:1px solid var(--color-line);border-radius:var(--radius-lg, 8px);box-shadow:var(--shadow-md, 0 4px 16px rgba(0,0,0,.1))}.share-item{display:inline-flex;flex-direction:column;align-items:center;gap:4px;padding:8px 12px;border:none;border-radius:var(--radius-btn, 6px);background:transparent;color:var(--color-ink-2, var(--color-ink-3));cursor:pointer;font-size:11px;transition:background .15s,color .15s,transform .15s;white-space:nowrap}.share-item:hover{transform:none}.share-item i{font-size:18px}.share-item[data-platform=qq]:hover{background:#e8f4fd;color:#12b7f5}.share-item[data-platform=weibo]:hover{background:#fceae9;color:#ff6a00}.share-item[data-platform=twitter]:hover{background:#f0f0f0;color:#000}.share-item[data-platform=wechat]:hover{background:#e6f7ec;color:#07c160}.share-item[data-platform=copy]:hover{background:#f0f2f5;color:#555}.share-item[data-platform=poster]:hover{background:#fff4e8;color:#f59e0b}#share-qrcode-box{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%);padding:14px;background:var(--surface-page);border:1px solid var(--color-line);border-radius:var(--radius-lg, 8px);box-shadow:var(--shadow-md, 0 4px 16px rgba(0,0,0,.12));text-align:center;z-index:101;pointer-events:none;opacity:0;transition:opacity .2s ease,transform .2s ease}#share-qrcode-box.is-visible{pointer-events:auto;opacity:1}#share-qrcode-image{width:140px;height:140px;display:block}.theme-dark .share-dropdown__grid,html.dark .share-dropdown__grid{background:var(--surface-1);border-color:var(--color-line);box-shadow:0 4px 16px #00000059}.theme-dark #share-qrcode-box,html.dark #share-qrcode-box{background:var(--surface-1);border-color:var(--color-line)}.theme-dark .share-item,html.dark .share-item{color:var(--color-ink-2, #aaa)}.theme-dark .share-item[data-platform=qq]:hover{background:#12b7f51f;color:#12b7f5}.theme-dark .share-item[data-platform=weibo]:hover{background:#ff6a001f;color:#ff6a00}.theme-dark .share-item[data-platform=twitter]:hover{background:#ffffff14;color:#fff}.theme-dark .share-item[data-platform=wechat]:hover{background:#07c1601f;color:#07c160}.theme-dark .share-item[data-platform=copy]:hover{background:#ffffff0f;color:#ccc}.theme-dark .share-item[data-platform=poster]:hover{background:#f59e0b1f;color:#f59e0b}@media(max-width:767px){.share-dropdown{position:fixed;inset:auto 0 0;transform:none;width:100%;max-width:none;z-index:1200;padding:0 0 calc(12px + env(safe-area-inset-bottom,0px));background:transparent}.share-dropdown[aria-hidden=false]{animation:shareSheetIn .22s ease-out forwards}@keyframes shareSheetIn{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.share-dropdown__grid{justify-content:space-around;flex-wrap:wrap;gap:6px;margin:0 10px;padding:14px 12px 16px;border-radius:14px 14px 10px 10px;box-shadow:0 -6px 28px #00000029}.share-item{min-width:64px;flex:1 1 28%;max-width:33%}#share-qrcode-box{position:static;margin:10px auto 0;transform:none}body.aksrt-share-sheet-open{overflow:hidden}body.aksrt-share-sheet-open:before{content:"";position:fixed;inset:0;background:#00000059;z-index:1190}}.theme-dark .post-drop-meta__menu,html.dark .post-drop-meta__menu{background:var(--surface-1, #323335);border-color:var(--color-line);box-shadow:0 8px 24px #00000059}.theme-dark .post-drop-meta__item,html.dark .post-drop-meta__item{color:var(--color-ink-2, #ccc)}.theme-dark .post-drop-meta__item:hover,html.dark .post-drop-meta__item:hover{background:#ffffff0f;color:#fff}.author-box{margin-bottom:16px;padding:18px;background:var(--surface-1, #fff);border:none;border-radius:var(--radius-2xl, 16px);box-shadow:var(--shadow-sm)}.single-metabox{display:flex;align-items:center;justify-content:flex-end;gap:8px}.post-drop-meta{position:relative}.post-drop-meta__menu{position:absolute;top:calc(100% + 8px);right:0;min-width:150px;padding:8px;border-radius:var(--radius, 8px);border:1px solid var(--color-line);background:var(--surface-page, #fff);box-shadow:var(--shadow-md, 0 8px 24px rgba(0, 0, 0, .12));display:none;z-index:20}.post-drop-meta.is-open .post-drop-meta__menu{display:grid;gap:4px}.post-drop-meta__item{width:100%;display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:var(--color-ink-2, var(--color-ink));text-decoration:none;font-size:13px;text-align:left;cursor:pointer}.post-drop-meta__item:hover{background:var(--color-line, rgba(50, 50, 50, .06));color:var(--color-primary)}.post-drop-meta__item i{width:16px;text-align:center}.author-box__header{display:flex;align-items:flex-start;gap:14px}.author-box__avatar{width:56px;height:56px;border-radius:50%;object-fit:cover;flex-shrink:0;border:3px solid var(--color-primary-soft, rgba(240, 68, 148, .2))}.author-box__info{flex:1;min-width:0}.author-box__name{font-size:1rem;font-weight:700;color:var(--color-ink);display:block;margin-bottom:4px}.author-box__name:hover{color:var(--color-primary)}.author-box__bio{font-size:13px;color:var(--color-ink-3, var(--color-ink-4));line-height:1.5;margin:0 0 6px}.author-box__stats{font-size:12px;color:var(--color-ink-4, var(--color-ink-4))}.author-box__stats strong{color:var(--color-ink);margin-right:2px}.author-box__posts{margin-top:14px;padding-top:12px;border-top:1px solid var(--color-line)}.author-box__posts-title{font-size:12px;font-weight:600;color:var(--color-ink-3, var(--color-ink-4));margin:0 0 8px}.author-box__posts ul{list-style:none;margin:0;padding:0}.author-box__posts li{padding:3px 0}.author-box__posts a{font-size:13px;color:var(--color-ink);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.author-box__posts a:hover{color:var(--color-primary)}.author-box__posts a:before{content:"•";color:var(--color-primary)}.article-avatar .user-info{width:100%}.article-avatar .avatar-img{--this-size: 42px}.article-avatar .avatar-img img,.article-avatar .avatar{width:100%;height:100%;border-radius:50%;object-fit:cover}.article-avatar .display-name{font-weight:600;color:var(--key-color, #333)}.article-header .article-avatar .relative{margin-top:20px;position:relative;min-height:1px}.single-metabox{right:0;font-size:15px;--meta-color: var(--muted-color, #777)}.single-metabox .post-metas{background:var(--body-bg-color, #f5f5f5);right:0;padding:2px 6px;border-radius:100px;color:var(--meta-color);display:inline-flex;flex-wrap:wrap;align-items:center;gap:0}.single-metabox .post-metas item,.single-metabox .post-metas .item{margin:0 6px;font-size:13px;display:inline-flex;align-items:center;gap:4px}.single-metabox .post-drop-meta{position:relative;display:inline-block}.single-metabox.cover-meta{font-size:14px;right:1em;top:1.6em;--meta-color: rgba(255, 255, 255, .8);--body-bg-color: rgba(0, 0, 0, .3)}.article-avatar .line-form-line{display:block}.article-tags br{flex-basis:100%;width:100%;content:"";display:block;height:0}.article-tags .but.c-blue{color:#2196f3}.article-tags .but.c-yellow{color:#f0ad4e}.article-tags .but.c-green{color:#5cb85c}.article-tags .but.c-purple{color:#9c27b0}.article-tags .but.c-red{color:#f44336}.user-card.author{margin-bottom:16px;overflow:hidden}.user-card.author .user-avatar{display:flex;justify-content:center}.user-card.author .user-avatar .avatar,.user-card.author .user-avatar img{width:80px;height:80px;border-radius:50%;object-fit:cover}.user-card.author .user-name{display:flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:4px}.user-card.author .user-name .display-name{font-weight:700;color:var(--key-color, inherit)}.user-card.author .user-desc,.user-card.author .user-btns{text-align:center}.user-card.author .user-card-posts ul{list-style:none;margin:0;padding:0}.user-card.author .user-card-posts li{padding:6px 0;border-bottom:1px dashed var(--color-line, rgba(0,0,0,.06))}.user-card.author .user-card-posts li:last-child{border-bottom:0} +.relative{position:relative}.flex{display:flex}.flex.ac,.ac{align-items:center}.flex.jc,.jc{justify-content:center}.flex.jsb,.jsb{justify-content:space-between}.flex.at,.at{align-items:flex-start}.flex.ae,.ae{align-items:flex-end}.flex0{flex:0 0 auto}.flex1{flex:1 1 auto;min-width:0}.flex.column{flex-direction:column}.flex.wrap{flex-wrap:wrap}.flex.flex-row,.flex-row{flex-direction:row}.flex.jse,.jse{justify-content:space-evenly}.flex.jsa,.jsa{justify-content:space-around}.flex>.flex1,.flex .flex1{flex:1;overflow:hidden;min-width:0}.relative-h{position:relative;height:100%}.padding-10{padding:10px}.font-bold{font-weight:700}.mt6{margin-top:6px}.gutters-5{margin:-5px}.gutters-5>*{padding:5px}@media(max-width:767px){.flex.flex-row.flex-col-sm-2{flex-wrap:wrap}.flex.flex-row.flex-col-sm-2>*{flex-basis:50%}}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}.abs-right{position:absolute;right:0;top:0}.abs-center{position:absolute;left:0;width:100%;top:50%;right:.7em;transform:translateY(-50%);z-index:1}.abs-center.left-top,.abs-center.right-top{transform:unset;top:0}.abs-center.right-top{left:auto;width:auto;text-align:right}.abs-center.left-top{text-align:left}.abs-center.conter-bottom,.abs-center.conter-conter{text-align:center}.abs-center.right-top,.abs-center.right-bottom,.abs-center.right-conter{text-align:right}.abs-center.conter-bottom,.abs-center.right-bottom,.abs-center.left-bottom{top:auto;transform:unset;bottom:0}.abs-center.left-bottom{left:0;right:auto;text-align:left}.abs-center.right-bottom,.abs-center.right-conter{left:auto;right:0;text-align:right}.graphic,.page-cover{text-shadow:0 0 5px rgba(0,0,0,.2);--main-color: #fff;color:#fff;position:relative;overflow:hidden;box-shadow:0 0 10px var(--main-shadow, rgba(116, 116, 116, .08));padding:0 0 70%;border-radius:var(--main-radius, var(--radius, 8px))}.graphic>.fit-cover,.graphic>img.fit-cover{position:absolute;width:100%;height:100%;object-fit:cover;inset:0}.fit-cover{object-fit:cover;max-width:100%}.title-h-left{position:relative;padding-bottom:8px}.title-h-left:before{transition:.4s;transform-origin:left;position:absolute;content:"";width:40px;height:3px;background:var(--theme-color, var(--focus-color, #f04494));left:0;bottom:3px;border-radius:5px;box-shadow:1px 1px 3px -1px var(--theme-color, var(--focus-color, #f04494))}.line-form-line,.line-form-line:before{position:absolute;bottom:0;left:0;height:1px;width:100%;transition:.8s;background:var(--main-border-color, rgba(50, 50, 50, .06))}.line-form-line:before{content:"";width:0;background:var(--focus-color, #f04494)}.avatar-img{position:relative;display:inline-block;flex-shrink:0;--this-size: 38px;width:var(--this-size);height:var(--this-size)}.avatar-img .avatar,.avatar-img img{width:100%;height:100%;border-radius:50%;object-fit:cover}.avatar-lg{--this-size: 80px}.avatar-md{--this-size: 55px}.avatar-mini{--this-size: 20px}.shrink0{flex-shrink:0}.opacity8{opacity:.8}.muted-color{color:var(--muted-color, var(--color-ink-3))}.muted-2-color{color:var(--muted-2-color, var(--color-ink-4))}.muted-3-color{color:var(--muted-3-color, #b1b1b1)}.muted-4-color{color:var(--muted-4-color, #d2d2d2)}.text-center{text-align:center}.em09{font-size:.9em}.em12{font-size:1.2em}.px12-sm{font-size:12px}.ml3{margin-left:3px}.ml6{margin-left:6px}.ml10{margin-left:10px}.mr3{margin-right:3px}.mr6{margin-right:6px}.mt10{margin-top:10px}.mt20{margin-top:20px}.mb10{margin-bottom:10px}.mb20{margin-bottom:20px}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.text-ellipsis-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.main-bg{background-color:var(--main-bg-color, var(--surface-1))}.separator{position:relative;letter-spacing:.08em}.icon-circle+.icon-circle:before{content:"·";display:inline-block;margin:0 .45em;opacity:.55}.article-avatar name,.article-avatar .name,.user-name{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:100%}.pull-right{float:right}.pull-left{float:left}body.single main.container .content-layout{display:block;min-width:0}body.single main.container .content-layout>*{min-width:0;max-width:100%}body.single main.container .content-layout>.breadcrumb,body.single main.container .content-layout>ul.breadcrumb,body.single main.container .content-layout>.breadcrumb-nav,body.single main.container .content-layout>.breadcrumbs-wrap{position:relative;z-index:1;margin-top:0;margin-bottom:12px;padding-top:2px}body.single .sidebar .aksrt-panel,body.single .sidebar .widget{margin-bottom:15px}body.single main.container{box-sizing:border-box}.article,article.article.box-body,.article.main-bg.box-body{padding:0 30px;overflow:hidden}@media(max-width:767px){.article,article.article.box-body,.article.main-bg.box-body{padding:0 15px}.article-header .article-title{font-size:18px}}.entry-header,.article-header{margin-bottom:10px;padding-bottom:0;border-bottom:none;background:transparent;box-shadow:none;border-radius:0}.entry-title,.article-title{font-size:22px;font-weight:700;margin:0;line-height:1.4;letter-spacing:0;color:var(--key-color, var(--color-ink))}.article-title>a:hover{color:inherit}.article-header .article-title{font-size:22px;font-weight:700;color:var(--key-color, var(--color-ink));margin-top:15px}.article-header .article-avatar{margin-top:15px}.entry-meta{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:.875rem;color:var(--color-ink-4)}.entry-meta a{color:var(--color-ink-3)}.entry-meta a:hover{color:var(--color-primary)}.entry-thumb{margin:0 0 28px;border-radius:var(--radius-btn);overflow:hidden}.entry-content,.wp-posts-content{font-size:16px;line-height:2;color:var(--main-color, var(--color-ink));overflow-wrap:break-word;word-wrap:break-word;min-height:90px}.wp-posts-content>h1:not([class]),.wp-posts-content>h2:not([class]),.wp-posts-content>h3:not([class]),.wp-posts-content>h4:not([class]),.wp-posts-content>h1.wp-block-heading,.wp-posts-content>h2.wp-block-heading,.wp-posts-content>h3.wp-block-heading,.wp-posts-content>h4.wp-block-heading{position:relative;padding-bottom:8px}.wp-posts-content>h1:not([class]):before,.wp-posts-content>h2:not([class]):before,.wp-posts-content>h3:not([class]):before,.wp-posts-content>h4:not([class]):before,.wp-posts-content>h1.wp-block-heading:before,.wp-posts-content>h2.wp-block-heading:before,.wp-posts-content>h3.wp-block-heading:before,.wp-posts-content>h4.wp-block-heading:before{content:"";position:absolute;left:0;bottom:0;width:40px;height:3px;background:var(--theme-color, var(--focus-color, #f04494));border-radius:5px}.wp-posts-content>h3:not([class]):before,.wp-posts-content>h4:not([class]):before,.wp-posts-content>h3.wp-block-heading:before,.wp-posts-content>h4.wp-block-heading:before{width:28px;height:2px}:is(.entry-content,.wp-posts-content)>*:first-child{margin-top:0}:is(.entry-content,.wp-posts-content) p{margin:0 0 1.5em}:is(.entry-content,.wp-posts-content) h2{font-size:20px;font-weight:700;margin:28px 0 14px}:is(.entry-content,.wp-posts-content) h3{font-size:18px;font-weight:700;margin:24px 0 12px}:is(.entry-content,.wp-posts-content) h4{font-size:16px;font-weight:700;margin:22px 0 10px}:is(.entry-content,.wp-posts-content) blockquote{margin:0 0 24px;padding:18px 20px;border-left:4px solid var(--color-primary);background:var(--surface-4, rgba(0, 0, 0, .03));border-radius:0 var(--radius-lg) var(--radius-lg) 0;color:var(--color-ink-3)}:is(.entry-content,.wp-posts-content) img{margin:0 auto;display:block;max-width:100%;height:auto;border-radius:min(8px,var(--main-radius, 8px))}:is(.entry-content,.wp-posts-content) figure{max-width:100%;margin:1.5em auto}:is(.entry-content,.wp-posts-content) figcaption{margin-top:8px;color:var(--muted-color, #777);font-size:13px;line-height:1.6;text-align:center}:is(.entry-content,.wp-posts-content) .aksrt-lightbox-target{cursor:zoom-in}.lightbox-overlay{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;flex-direction:column;gap:12px;padding:24px;background:#000000d9}.lightbox-overlay.is-open{display:flex}.lightbox-img{max-width:90vw;max-height:85vh;width:auto;height:auto;border-radius:4px;object-fit:contain}.lightbox-caption{max-width:min(96vw,1200px);color:#fff;font-size:14px;line-height:1.5;text-align:center;opacity:.92}.lightbox-close{position:absolute;top:14px;right:14px;width:40px;height:40px;border:none;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:#ffffff1f;color:#fff;cursor:pointer;transition:background-color .2s ease}.lightbox-close:hover{background:#ffffff38}.lightbox-close i{pointer-events:none}:is(.entry-content,.wp-posts-content) iframe,:is(.entry-content,.wp-posts-content) .wp-block-embed iframe,:is(.entry-content,.wp-posts-content) video{max-width:100%;height:auto}:is(.entry-content,.wp-posts-content) .wp-block-embed{position:relative;width:100%;max-width:100%;overflow:hidden;margin:1.5em 0}:is(.entry-content,.wp-posts-content) code{font-family:var(--font-mono);font-size:.9em;color:#ff3c98;background:#fd999933;padding:2px 6px;border-radius:4px}:is(.entry-content,.wp-posts-content) ul,:is(.entry-content,.wp-posts-content) ol{padding-left:1.5em;margin:0 0 1.5em}:is(.entry-content,.wp-posts-content) ul li::marker{color:var(--color-primary)}.entry-footer{margin-top:40px;padding-top:24px;border-top:1px solid var(--color-line)}.post-tags{display:flex;flex-wrap:wrap;gap:8px}.post-tags a{padding:4px 10px;border-radius:50px;background:var(--muted-bg-color, #eee);border:1px solid var(--main-border-color, rgba(50, 50, 50, .06));font-size:13px;color:var(--muted-color, #777)}.post-tags a:hover{border-color:var(--color-primary);color:var(--color-primary)}.related-posts{margin-top:48px;padding:20px 0 0;border-top:1px solid var(--color-line-soft)}.related-posts__title{font-size:15px;font-weight:700;margin:0 0 10px;color:var(--key-color, #333)}.related-posts__title:before{content:"";display:inline-block;width:40px;height:3px;background:var(--theme-color, #f04494);border-radius:5px;vertical-align:middle;margin-right:8px}.related-posts__grid{display:flex;flex-direction:column;gap:0}.related-card{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--main-border-color, rgba(50, 50, 50, .06));transition:.15s}.related-card:last-child{border-bottom:none}.related-card a{display:flex;align-items:center;gap:12px;color:var(--key-color, #333);text-decoration:none;width:100%}.related-card:hover a{color:var(--focus-color, #f04494)}.related-card__thumb{width:96px;min-width:96px;height:64px;border-radius:var(--main-radius, 8px);overflow:hidden;flex-shrink:0}.related-card__thumb img{width:100%;height:100%;object-fit:cover;transition:transform .3s}.related-card:hover .related-card__thumb img{transform:scale(1.05)}.related-card h4{font-size:14px;font-weight:600;margin:0;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.article-author-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px}.article-author-bar__avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;flex-shrink:0}.article-author-bar__info{flex:1;min-width:0}.article-author-bar__name{font-weight:600;font-size:14px;color:var(--color-ink)}.article-author-bar__name:hover{color:var(--color-primary)}.article-author-bar__meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--color-ink-4, var(--color-ink-4));margin-top:2px}.article-author-bar__meta span{display:inline-flex;align-items:center;gap:3px}.article-author-bar__line{height:1px;background:var(--color-line);margin-bottom:20px}.article-footer{margin-top:32px;padding-top:20px;border-top:1px solid var(--color-line)}.article-copyright{font-size:13px;color:var(--color-ink-4, var(--color-ink-4));margin-bottom:16px}.article-end-separator{text-align:center;margin:16px 0;position:relative}.article-end-separator:before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background:var(--color-line)}.article-end-separator span{position:relative;display:inline-block;padding:0 14px;background:var(--surface-page);font-size:11px;font-weight:600;color:var(--color-ink-4, var(--color-ink-4));letter-spacing:2px}.article-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.post-actions-wrap{position:relative;text-align:center;margin-bottom:16px}.post-actions-card,.post-actions{position:relative;text-align:center;margin-bottom:16px;padding-bottom:15px;display:block}.post-actions-wrap>.post-actions{margin-bottom:0}.post-actions-card__hint{font-size:13px;color:var(--color-ink-4, var(--color-ink-4));margin-bottom:12px}.post-actions-card__buttons{display:flex;justify-content:center;gap:10px;margin-bottom:12px}.article .action,.post-actions .action{width:80px;padding:10px 0;display:inline-block;opacity:.7;vertical-align:top;min-width:0;height:auto;border-radius:0;border:0;background:transparent;color:var(--muted-color, #777);cursor:pointer;font-size:14px;transition:opacity .15s ease,color .15s ease;gap:0;text-align:center}.article .action:hover,.post-actions .action:hover,.article .action.is-active,.post-actions .action.is-active{color:inherit;opacity:1;background:transparent;border-color:transparent}.article .action i,.post-actions .action i{font-size:20px;display:block;margin:0 auto 4px;line-height:1}.post-actions .action .action-btn__count,.post-actions .action .action-btn__label,.action-btn__count,.action-btn__label{display:block;font-size:12px;line-height:1.2;font-weight:500}.action-btn{display:inline-flex;align-items:center;gap:6px;padding:.38em 1.1em;border-radius:50px;border:1px solid transparent;background:var(--surface-4, rgba(136, 136, 136, .1));color:var(--color-ink-3);cursor:pointer;font-size:14px;transition:all .15s ease}.action-btn:hover{background:var(--color-primary-soft);color:var(--color-primary)}.action-btn.is-active{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-soft, rgba(240, 68, 148, .08))}.action-btn i{font-size:1.2em}.share-dropdown{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%);z-index:100;display:none!important}.share-dropdown[aria-hidden=false]{display:block!important;animation:shareDropdownIn .2s ease-out forwards}@keyframes shareDropdownIn{0%{opacity:0;transform:translate(-50%) translateY(8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.share-dropdown__grid{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--surface-page);border:1px solid var(--color-line);border-radius:var(--radius-lg, 8px);box-shadow:var(--shadow-md, 0 4px 16px rgba(0,0,0,.1))}.share-item{display:inline-flex;flex-direction:column;align-items:center;gap:4px;padding:8px 12px;border:none;border-radius:var(--radius-btn, 6px);background:transparent;color:var(--color-ink-2, var(--color-ink-3));cursor:pointer;font-size:11px;transition:background .15s,color .15s,transform .15s;white-space:nowrap}.share-item:hover{transform:none}.share-item i{font-size:18px}.share-item[data-platform=qq]:hover{background:#e8f4fd;color:#12b7f5}.share-item[data-platform=weibo]:hover{background:#fceae9;color:#ff6a00}.share-item[data-platform=twitter]:hover{background:#f0f0f0;color:#000}.share-item[data-platform=wechat]:hover{background:#e6f7ec;color:#07c160}.share-item[data-platform=copy]:hover{background:#f0f2f5;color:#555}.share-item[data-platform=poster]:hover{background:#fff4e8;color:#f59e0b}#share-qrcode-box{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%);padding:14px;background:var(--surface-page);border:1px solid var(--color-line);border-radius:var(--radius-lg, 8px);box-shadow:var(--shadow-md, 0 4px 16px rgba(0,0,0,.12));text-align:center;z-index:101;pointer-events:none;opacity:0;transition:opacity .2s ease,transform .2s ease}#share-qrcode-box.is-visible{pointer-events:auto;opacity:1}#share-qrcode-image{width:140px;height:140px;display:block}.theme-dark .share-dropdown__grid,html.dark .share-dropdown__grid{background:var(--surface-1);border-color:var(--color-line);box-shadow:0 4px 16px #00000059}.theme-dark #share-qrcode-box,html.dark #share-qrcode-box{background:var(--surface-1);border-color:var(--color-line)}.theme-dark .share-item,html.dark .share-item{color:var(--color-ink-2, #aaa)}.theme-dark .share-item[data-platform=qq]:hover{background:#12b7f51f;color:#12b7f5}.theme-dark .share-item[data-platform=weibo]:hover{background:#ff6a001f;color:#ff6a00}.theme-dark .share-item[data-platform=twitter]:hover{background:#ffffff14;color:#fff}.theme-dark .share-item[data-platform=wechat]:hover{background:#07c1601f;color:#07c160}.theme-dark .share-item[data-platform=copy]:hover{background:#ffffff0f;color:#ccc}.theme-dark .share-item[data-platform=poster]:hover{background:#f59e0b1f;color:#f59e0b}@media(max-width:767px){.share-dropdown{position:fixed;inset:auto 0 0;transform:none;width:100%;max-width:none;z-index:1200;padding:0 0 calc(12px + env(safe-area-inset-bottom,0px));background:transparent}.share-dropdown[aria-hidden=false]{animation:shareSheetIn .22s ease-out forwards}@keyframes shareSheetIn{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.share-dropdown__grid{justify-content:space-around;flex-wrap:wrap;gap:6px;margin:0 10px;padding:14px 12px 16px;border-radius:14px 14px 10px 10px;box-shadow:0 -6px 28px #00000029}.share-item{min-width:64px;flex:1 1 28%;max-width:33%}#share-qrcode-box{position:static;margin:10px auto 0;transform:none}body.aksrt-share-sheet-open{overflow:hidden}body.aksrt-share-sheet-open:before{content:"";position:fixed;inset:0;background:#00000059;z-index:1190}}.theme-dark .post-drop-meta__menu,html.dark .post-drop-meta__menu{background:var(--surface-1, #323335);border-color:var(--color-line);box-shadow:0 8px 24px #00000059}.theme-dark .post-drop-meta__item,html.dark .post-drop-meta__item{color:var(--color-ink-2, #ccc)}.theme-dark .post-drop-meta__item:hover,html.dark .post-drop-meta__item:hover{background:#ffffff0f;color:#fff}.author-box{margin-bottom:16px;padding:18px;background:var(--surface-1, #fff);border:none;border-radius:var(--radius-2xl, 16px);box-shadow:var(--shadow-sm)}.single-metabox{display:flex;align-items:center;justify-content:flex-end;gap:8px}.post-drop-meta{position:relative}.post-drop-meta__menu{position:absolute;top:calc(100% + 8px);right:0;min-width:150px;padding:8px;border-radius:var(--radius, 8px);border:1px solid var(--color-line);background:var(--surface-page, #fff);box-shadow:var(--shadow-md, 0 8px 24px rgba(0, 0, 0, .12));display:none;z-index:20}.post-drop-meta.is-open .post-drop-meta__menu{display:grid;gap:4px}.post-drop-meta__item{width:100%;display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:var(--color-ink-2, var(--color-ink));text-decoration:none;font-size:13px;text-align:left;cursor:pointer}.post-drop-meta__item:hover{background:var(--color-line, rgba(50, 50, 50, .06));color:var(--color-primary)}.post-drop-meta__item i{width:16px;text-align:center}.author-box__header{display:flex;align-items:flex-start;gap:14px}.author-box__avatar{width:56px;height:56px;border-radius:50%;object-fit:cover;flex-shrink:0;border:3px solid var(--color-primary-soft, rgba(240, 68, 148, .2))}.author-box__info{flex:1;min-width:0}.author-box__name{font-size:1rem;font-weight:700;color:var(--color-ink);display:block;margin-bottom:4px}.author-box__name:hover{color:var(--color-primary)}.author-box__bio{font-size:13px;color:var(--color-ink-3, var(--color-ink-4));line-height:1.5;margin:0 0 6px}.author-box__stats{font-size:12px;color:var(--color-ink-4, var(--color-ink-4))}.author-box__stats strong{color:var(--color-ink);margin-right:2px}.author-box__posts{margin-top:14px;padding-top:12px;border-top:1px solid var(--color-line)}.author-box__posts-title{font-size:12px;font-weight:600;color:var(--color-ink-3, var(--color-ink-4));margin:0 0 8px}.author-box__posts ul{list-style:none;margin:0;padding:0}.author-box__posts li{padding:3px 0}.author-box__posts a{font-size:13px;color:var(--color-ink);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.author-box__posts a:hover{color:var(--color-primary)}.author-box__posts a:before{content:"•";color:var(--color-primary)}.article-avatar .user-info{width:100%}.article-avatar .avatar-img{--this-size: 42px}.article-avatar .avatar-img img,.article-avatar .avatar{width:100%;height:100%;border-radius:50%;object-fit:cover}.article-avatar .display-name{font-weight:600;color:var(--key-color, #333)}.article-header .article-avatar .single-meta-row{margin-top:20px;position:relative;min-height:28px;display:flex;align-items:center;justify-content:flex-end}.article-header .article-avatar .single-meta-row>.line-form-line{bottom:50%}.article-header .article-avatar .single-meta-row>.single-metabox{position:relative;inset:auto;transform:none;z-index:1}.single-metabox{right:0;font-size:15px;--meta-color: var(--muted-color, #777)}.single-metabox .post-metas{background:var(--body-bg-color, #f5f5f5);right:0;padding:2px 6px;border-radius:100px;color:var(--meta-color);display:inline-flex;flex-wrap:wrap;align-items:center;gap:0}.single-metabox .post-metas item,.single-metabox .post-metas .item{margin:0 6px;font-size:13px;display:inline-flex;align-items:center;gap:4px}.single-metabox .post-drop-meta{position:relative;display:inline-block;--this-size: 1.73em;--this-color: var(--meta-color);--this-bg: var(--body-bg-color, #f5f5f5)}.single-metabox.cover-meta{font-size:14px;right:1em;top:1.6em;--meta-color: rgba(255, 255, 255, .8);--body-bg-color: rgba(0, 0, 0, .3)}.article-avatar .line-form-line{display:block}.article-tags br{flex-basis:100%;width:100%;content:"";display:block;height:0}.article-tags .but.c-blue{color:#2196f3}.article-tags .but.c-yellow{color:#f0ad4e}.article-tags .but.c-green{color:#5cb85c}.article-tags .but.c-purple{color:#9c27b0}.article-tags .but.c-red{color:#f44336}.user-card.author{margin-bottom:16px;overflow:hidden}.user-card.author .user-avatar{display:flex;justify-content:center}.user-card.author .user-avatar .avatar,.user-card.author .user-avatar img{width:80px;height:80px;border-radius:50%;object-fit:cover}.user-card.author .user-name{display:flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:4px}.user-card.author .user-name .display-name{font-weight:700;color:var(--key-color, inherit)}.user-card.author .user-desc,.user-card.author .user-btns{text-align:center}.user-card.author .user-card-posts ul{list-style:none;margin:0;padding:0}.user-card.author .user-card-posts li{padding:6px 0;border-bottom:1px dashed var(--color-line, rgba(0,0,0,.06))}.user-card.author .user-card-posts li:last-child{border-bottom:0} diff --git a/assets/css/frontend/pages/submit.css b/assets/css/frontend/pages/submit.css index 3b6d0c6a..4cd84e46 100644 --- a/assets/css/frontend/pages/submit.css +++ b/assets/css/frontend/pages/submit.css @@ -91,6 +91,13 @@ border-top: 1px solid var(--main-border-color, rgba(50, 50, 50, 0.08)); } +.newposts-editor .aksrt-submit-word-count { + float: right; + margin-right: 24px; + color: var(--muted-color, #777); + line-height: 24px; +} + .newposts-editor .mce-toolbar .mce-btn-group .mce-btn, .newposts-editor .qt-dfw { margin: 4px; diff --git a/assets/css/frontend/single-post/author-actions.css b/assets/css/frontend/single-post/author-actions.css index 57e31274..0cb98478 100644 --- a/assets/css/frontend/single-post/author-actions.css +++ b/assets/css/frontend/single-post/author-actions.css @@ -576,10 +576,24 @@ html.dark .post-drop-meta__item:hover { color: var(--key-color, #333); } -.article-header .article-avatar .relative { +.article-header .article-avatar .single-meta-row { margin-top: 20px; position: relative; - min-height: 1px; + min-height: 28px; + display: flex; + align-items: center; + justify-content: flex-end; +} + +.article-header .article-avatar .single-meta-row > .line-form-line { + bottom: 50%; +} + +.article-header .article-avatar .single-meta-row > .single-metabox { + position: relative; + inset: auto; + transform: none; + z-index: 1; } .single-metabox { @@ -612,6 +626,9 @@ html.dark .post-drop-meta__item:hover { .single-metabox .post-drop-meta { position: relative; display: inline-block; + --this-size: 1.73em; + --this-color: var(--meta-color); + --this-bg: var(--body-bg-color, #f5f5f5); } .single-metabox.cover-meta { diff --git a/assets/css/frontend/single-post/shell.css b/assets/css/frontend/single-post/shell.css index c2eee2b6..0192ebc1 100644 --- a/assets/css/frontend/single-post/shell.css +++ b/assets/css/frontend/single-post/shell.css @@ -34,19 +34,3 @@ body.single .sidebar .widget { body.single main.container { box-sizing: border-box; } - -/* Reading facts below the author row. */ -.article-reading-meta { - display: flex; - flex-wrap: wrap; - gap: 8px 14px; - margin: 12px 0 2px; - color: var(--muted-color, #777); - font-size: 12px; -} - -.article-reading-meta span { - display: inline-flex; - align-items: center; - gap: 5px; -} diff --git a/assets/js/build/public.js b/assets/js/build/public.js index 23019298..3f08b8fb 100644 --- a/assets/js/build/public.js +++ b/assets/js/build/public.js @@ -1921,6 +1921,74 @@ tbquire.config({ }); } + var postMetaDocumentEventsBound = false; + + function setPostMetaMenuState(menuRoot, open) { + var toggle = menuRoot.querySelector(".post-drop-meta__toggle"); + var menu = menuRoot.querySelector(".post-drop-meta__menu"); + if (!toggle || !menu) return; + + menuRoot.classList.toggle("is-open", open); + toggle.setAttribute("aria-expanded", open ? "true" : "false"); + menu.setAttribute("aria-hidden", open ? "false" : "true"); + } + + function closePostMetaMenus(except, restoreFocus) { + document.querySelectorAll(".post-drop-meta.is-open").forEach(function (menuRoot) { + if (menuRoot === except) return; + var toggle = menuRoot.querySelector(".post-drop-meta__toggle"); + setPostMetaMenuState(menuRoot, false); + if (restoreFocus && toggle) toggle.focus(); + }); + } + + function initPostMetaMenus(root) { + var scope = root || document; + var menuRoots = []; + + if (scope.nodeType === 1 && scope.matches(".post-drop-meta")) { + menuRoots.push(scope); + } + scope.querySelectorAll(".post-drop-meta").forEach(function (menuRoot) { + menuRoots.push(menuRoot); + }); + + menuRoots.forEach(function (menuRoot) { + var toggle = menuRoot.querySelector(".post-drop-meta__toggle"); + var menu = menuRoot.querySelector(".post-drop-meta__menu"); + if (!toggle || !menu || toggle.dataset.postMetaMenuBound) return; + + toggle.dataset.postMetaMenuBound = "1"; + setPostMetaMenuState(menuRoot, false); + + toggle.addEventListener("click", function () { + var open = !menuRoot.classList.contains("is-open"); + closePostMetaMenus(menuRoot, false); + setPostMetaMenuState(menuRoot, open); + }); + + menu.addEventListener("click", function (event) { + if (event.target.closest(".post-drop-meta__item")) { + setPostMetaMenuState(menuRoot, false); + } + }); + }); + + if (menuRoots.length && !postMetaDocumentEventsBound) { + postMetaDocumentEventsBound = true; + document.addEventListener("click", function (event) { + if (!event.target.closest(".post-drop-meta")) { + closePostMetaMenus(null, false); + } + }); + document.addEventListener("keydown", function (event) { + if (event.key === "Escape") { + closePostMetaMenus(null, true); + } + }); + } + } + function getBaseStatCount(statName) { var statEl = document.querySelector('[data-stat-count="' + statName + '"][data-base-count]'); return statEl ? (parseInt(statEl.dataset.baseCount, 10) || 0) : 0; @@ -2104,6 +2172,7 @@ tbquire.config({ window.AksrtFrontend.register("aksrt-search-clear", function () { initSearchClear(); }); window.AksrtFrontend.register("aksrt-article-tools", function () { initArticleTools(); }); + window.AksrtFrontend.register("aksrt-post-meta-menus", function (root) { initPostMetaMenus(root); }); window.AksrtFrontend.register("aksrt-password-toggles", function (root) { initPasswordToggles(root); }); window.AksrtFrontend.register("aksrt-interaction-bar", function (root) { initInteractionBar(root); }); })(); diff --git a/assets/js/core/article.js b/assets/js/core/article.js index 2ec63c35..09a40e1b 100644 --- a/assets/js/core/article.js +++ b/assets/js/core/article.js @@ -78,6 +78,74 @@ }); } + var postMetaDocumentEventsBound = false; + + function setPostMetaMenuState(menuRoot, open) { + var toggle = menuRoot.querySelector(".post-drop-meta__toggle"); + var menu = menuRoot.querySelector(".post-drop-meta__menu"); + if (!toggle || !menu) return; + + menuRoot.classList.toggle("is-open", open); + toggle.setAttribute("aria-expanded", open ? "true" : "false"); + menu.setAttribute("aria-hidden", open ? "false" : "true"); + } + + function closePostMetaMenus(except, restoreFocus) { + document.querySelectorAll(".post-drop-meta.is-open").forEach(function (menuRoot) { + if (menuRoot === except) return; + var toggle = menuRoot.querySelector(".post-drop-meta__toggle"); + setPostMetaMenuState(menuRoot, false); + if (restoreFocus && toggle) toggle.focus(); + }); + } + + function initPostMetaMenus(root) { + var scope = root || document; + var menuRoots = []; + + if (scope.nodeType === 1 && scope.matches(".post-drop-meta")) { + menuRoots.push(scope); + } + scope.querySelectorAll(".post-drop-meta").forEach(function (menuRoot) { + menuRoots.push(menuRoot); + }); + + menuRoots.forEach(function (menuRoot) { + var toggle = menuRoot.querySelector(".post-drop-meta__toggle"); + var menu = menuRoot.querySelector(".post-drop-meta__menu"); + if (!toggle || !menu || toggle.dataset.postMetaMenuBound) return; + + toggle.dataset.postMetaMenuBound = "1"; + setPostMetaMenuState(menuRoot, false); + + toggle.addEventListener("click", function () { + var open = !menuRoot.classList.contains("is-open"); + closePostMetaMenus(menuRoot, false); + setPostMetaMenuState(menuRoot, open); + }); + + menu.addEventListener("click", function (event) { + if (event.target.closest(".post-drop-meta__item")) { + setPostMetaMenuState(menuRoot, false); + } + }); + }); + + if (menuRoots.length && !postMetaDocumentEventsBound) { + postMetaDocumentEventsBound = true; + document.addEventListener("click", function (event) { + if (!event.target.closest(".post-drop-meta")) { + closePostMetaMenus(null, false); + } + }); + document.addEventListener("keydown", function (event) { + if (event.key === "Escape") { + closePostMetaMenus(null, true); + } + }); + } + } + function getBaseStatCount(statName) { var statEl = document.querySelector('[data-stat-count="' + statName + '"][data-base-count]'); return statEl ? (parseInt(statEl.dataset.baseCount, 10) || 0) : 0; @@ -261,6 +329,7 @@ window.AksrtFrontend.register("aksrt-search-clear", function () { initSearchClear(); }); window.AksrtFrontend.register("aksrt-article-tools", function () { initArticleTools(); }); + window.AksrtFrontend.register("aksrt-post-meta-menus", function (root) { initPostMetaMenus(root); }); window.AksrtFrontend.register("aksrt-password-toggles", function (root) { initPasswordToggles(root); }); window.AksrtFrontend.register("aksrt-interaction-bar", function (root) { initInteractionBar(root); }); })(); diff --git a/assets/js/front-submit-editor.js b/assets/js/front-submit-editor.js index c37a793d..aa49e30f 100644 --- a/assets/js/front-submit-editor.js +++ b/assets/js/front-submit-editor.js @@ -531,6 +531,39 @@ }); } + function bindCharacterCount(editor) { + var counter = null; + + function getCounter() { + var container = editor.getContainer(); + var statusbar = container && container.querySelector('.mce-statusbar .mce-container-body'); + if (!statusbar) { + return null; + } + + counter = counter || statusbar.querySelector('[data-submit-word-count]'); + if (!counter) { + counter = document.createElement('span'); + counter.className = 'mce-wordcount aksrt-submit-word-count'; + counter.setAttribute('data-submit-word-count', ''); + counter.setAttribute('aria-live', 'polite'); + statusbar.appendChild(counter); + } + return counter; + } + + function updateCount() { + var count = String((editor.getBody() && editor.getBody().textContent) || '') + .replace(/\s+/g, '').length; + var element = getCounter(); + if (element) { + element.textContent = '字数:' + count; + } + } + + editor.on('init SetContent input keyup change Undo Redo', updateCount); + } + function openCodeModal(editor) { var selected = editor.dom.getParent(editor.selection.getNode(), 'pre.enlighter-pre'); var code = selected ? selected.querySelector('code') : null; @@ -591,6 +624,8 @@ } window.tinymce.PluginManager.add('aksrt_editor_tools', function (editor) { + bindCharacterCount(editor); + if (editorCfg.canUploadImage) { editor.addButton('aksrt_image', { text: '', diff --git a/assets/js/page-edit.js b/assets/js/page-edit.js index 17e17c51..6c7d81b5 100644 --- a/assets/js/page-edit.js +++ b/assets/js/page-edit.js @@ -3,7 +3,6 @@ * * 提供前台编辑页面的增强功能: * - 自动保存草稿 - * - 字数统计 * - 标签建议 * - 快捷键支持 * @@ -27,8 +26,6 @@ contentSelector: 'textarea[name="content"], textarea[name="topic_content"]', tagsSelector: 'input[name="tags"], input[name="topic_tags"]', autoSaveInterval: 30000, // 30秒 - maxTitleLength: 200, - maxContentLength: 100000, draftKey: '', }, options || {}); @@ -47,9 +44,6 @@ this.contentTextarea = this.form.querySelector(this.options.contentSelector); this.tagsInput = this.form.querySelector(this.options.tagsSelector); - // 字数统计 - this.initWordCount(); - // 自动保存草稿 this.initAutoSave(); @@ -73,49 +67,6 @@ }); }; - PageEdit.prototype.initWordCount = function () { - var self = this; - - // 创建字数统计显示 - this.wordCountEl = document.createElement('div'); - this.wordCountEl.className = 'aksrt-page-edit__word-count'; - - if (this.titleInput) { - var titleCount = document.createElement('span'); - titleCount.className = 'aksrt-page-edit__title-count'; - this.titleInput.parentNode.appendChild(titleCount); - - this.titleInput.addEventListener('input', function () { - var len = self.titleInput.value.length; - titleCount.textContent = len + '/' + self.options.maxTitleLength; - titleCount.classList.toggle('aksrt-page-edit__count--warn', len > self.options.maxTitleLength * 0.9); - titleCount.classList.toggle('aksrt-page-edit__count--error', len > self.options.maxTitleLength); - }); - } - - if (this.contentTextarea) { - this.contentTextarea.parentNode.appendChild(this.wordCountEl); - this.updateWordCount(); - - this.contentTextarea.addEventListener('input', function () { - self.updateWordCount(); - }); - } - }; - - PageEdit.prototype.updateWordCount = function () { - if (!this.contentTextarea || !this.wordCountEl) return; - - var text = this.contentTextarea.value; - var chars = text.length; - var words = text.trim() ? text.trim().split(/\s+/).length : 0; - var chinese = (text.match(/[一-鿿]/g) || []).length; - - this.wordCountEl.textContent = '字数: ' + chars + ' | 词数: ' + words + ' | 中文: ' + chinese; - this.wordCountEl.classList.toggle('aksrt-page-edit__count--warn', chars > this.options.maxContentLength * 0.9); - this.wordCountEl.classList.toggle('aksrt-page-edit__count--error', chars > this.options.maxContentLength); - }; - PageEdit.prototype.initAutoSave = function () { var self = this; diff --git a/inc/helpers/aksrt-frontend-tags.php b/inc/helpers/aksrt-frontend-tags.php index 3bb288c4..97863a21 100644 --- a/inc/helpers/aksrt-frontend-tags.php +++ b/inc/helpers/aksrt-frontend-tags.php @@ -1,60 +1,10 @@ post_content); - $han = 0; - if (preg_match_all('/\p{Han}/u', $text, $m)) { - $han = count($m[0]); - } - $words = str_word_count($text) + (int) ceil($han / 2); - if ($words < 1) { - $words = (int) max(1, strlen($text) / 4); - } - $minutes = (int) ceil($words / 220); - return max(1, $minutes); -} -endif; -if (!function_exists('aksrt_post_word_count')) : - /** - * Approximate visible word count for single-post meta display. - * - * @param int|null $post_id Post ID. - * @return int - */ - function aksrt_post_word_count($post_id = null): int { - $post = get_post($post_id); - if (!($post instanceof WP_Post)) { - return 0; - } - $text = wp_strip_all_tags((string) $post->post_content); - $han = 0; - if (preg_match_all('/\p{Han}/u', $text, $matches)) { - $han = count($matches[0]); - } - $latin_words = str_word_count($text); - $total = $latin_words + $han; - if ($total <= 0) { - $total = (int) ceil(strlen($text) / 2); - } - return max(0, $total); - } -endif; if (!function_exists('aksrt_resolve_single_post_display_settings')) : /** * Resolve single post/resource display settings, including post-meta overrides. @@ -104,8 +54,6 @@ if (!function_exists('aksrt_resolve_single_post_display_settings')) : 'yiyan_box' => false, 'print_enabled' => true, 'pdf_export_enabled' => false, - 'word_count_enabled' => true, - 'reading_time_enabled' => true, ]; // Normalize legacy aliases → canonical render keys (idempotent). if (!array_key_exists('share_enabled', $settings) && array_key_exists('share_s', $settings)) { diff --git a/inc/helpers/aksrt-single-components.php b/inc/helpers/aksrt-single-components.php index 7227526b..0e2598b2 100644 --- a/inc/helpers/aksrt-single-components.php +++ b/inc/helpers/aksrt-single-components.php @@ -99,11 +99,9 @@ if (!function_exists('aksrt_get_single_meta_box')) : /** * legacy equivalent. * - * @param string $class Extra class on wrapper. - * @param string $direction Unused (kept for API parity). * @param int|null $post_id Post ID. */ - function aksrt_get_single_meta_box(string $class = 'abs-right', string $direction = 'down', $post_id = null): string { + function aksrt_get_single_meta_box($post_id = null): string { if (!is_single() && !is_singular()) { return ''; } @@ -128,11 +126,12 @@ if (!function_exists('aksrt_get_single_meta_box')) : } $permalink = get_permalink($post_id); $login_url = function_exists('aksrt_get_login_url') ? aksrt_get_login_url() : wp_login_url($permalink ?: home_url('/')); + $menu_id = 'post-drop-meta-menu-' . $post_id; $more .= '