/* source: assets/css/frontend/legacy-utilities.css */ /** * legacy utility class bridge * * Single / author / meta markup still uses legacy utility class names * (.flex / .ac / .jsb / .abs-right / .muted-2-color / …). Without these * helpers the author bar and meta row collapse into a vertical mess. * * Keep this file tiny and pure utility — domain styles stay in single-post/*. */ /* Layout helpers */ .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; } /* Nested flex1 (legacy .flex .flex1) — allow both direct and descendant */ .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: bold; } .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; } /* legacy .abs-center: full-width vertical center (translateY only). * Header search and slide-text rely on this model. Point-center * (left:50% + translate(-50%,-50%)) is NOT used for these layers. */ .abs-center { position: absolute; left: 0; width: 100%; top: 50%; right: 0.7em; transform: translateY(-50%); z-index: 1; } /* legacy abs-center position variants (main.css) */ .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 ratio box (cover / related thumbs) — legacy .graphic */ .graphic, .page-cover { text-shadow: 0 0 5px rgba(0, 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, 0.08)); padding: 0; padding-bottom: 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 underline bar (legacy) */ .title-h-left { position: relative; padding-bottom: 8px; } .title-h-left:before { transition: 0.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 — legacy absolute bottom rule (author meta separator) */ .line-form-line, .line-form-line:before { position: absolute; bottom: 0; left: 0; height: 1px; width: 100%; transition: 0.8s; background: var(--main-border-color, rgba(50, 50, 50, 0.06)); } .line-form-line:before { content: ""; width: 0; background: var(--focus-color, #f04494); } /* Avatar size primitive */ .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: 0.8; } /* Typography / color helpers */ .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: 0.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; } /* Surfaces used by single article shell */ .main-bg { background-color: var(--main-bg-color, var(--surface-1)); } .separator { position: relative; letter-spacing: 0.08em; } /* Compact inline separators inside meta/time rows */ .icon-circle + .icon-circle::before { content: "·"; display: inline-block; margin: 0 0.45em; opacity: 0.55; } /* Author name row (was a non-standard element) */ .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; } /* source: assets/css/frontend/single-post/shell.css */ /* Single page shell — relies on body.site-layout-1/2/3 float dual-column * defined in layout.css (legacy 1:1). Page-owned overrides stay minimal. */ /* Single article stack lives inside .content-layout as direct children; * do not re-enable the legacy primary/aside grid here. */ body.single main.container .content-layout { display: block; min-width: 0; } body.single main.container .content-layout > * { min-width: 0; max-width: 100%; } /* Breadcrumb sits under fixed header (body.nav-fixed already pads top). */ 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; } /* Geometry owned by base/layout — keep single shell free of float overrides. */ body.single main.container { box-sizing: border-box; } /* source: assets/css/frontend/single-post/content.css */ /* ========== Single Post ========== */ /* legacy .article — card body padding wins over .box-body (main.css order) */ .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; /* theme-box is spacing only — never paint a nested card here */ background: transparent; box-shadow: none; border-radius: 0; } /* 标题 — 对齐 legacy: 22px, bold, line-height 1.4 */ .entry-title, .article-title { font-size: 22px; font-weight: bold; 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: bold; 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: 0.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; } /* 内容区 — 对齐 legacy: 16px, line-height 2 */ .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; } /* legacy content heading bars */ .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; } /* 段落首行缩进(参考主题 post_p_indent_s:开启后正文段落首行缩进 2em)。 */ .wp-posts-content.p-indent p { text-indent: 2em; } :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, 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) 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; } /* 行内代码 — 对齐 legacy: 粉色文字 + 粉色背景 */ :is(.entry-content, .wp-posts-content) code { font-family: var(--font-mono); font-size: 0.9em; color: #ff3c98; background: rgba(253, 153, 153, 0.2); 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, 0.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, 0.06)); transition: 0.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 0.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; } /* source: assets/css/frontend/single-post/author-actions.css */ /* ===== Content Footer ===== */ .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; } /* ===== Action Buttons Card ===== */ .post-actions-wrap { position: relative; text-align: center; margin-bottom: 16px; } /* legacy .post-actions — text/icon column buttons, not pill chips */ .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; } /* Legacy card-buttons flex only for non-legacy card variant */ .post-actions-card__buttons { display: flex; justify-content: center; gap: 10px; margin-bottom: 12px; } /* legacy: .article .action { width:80px; padding:10px 0; inline-block; opacity:.7 } */ .article .action, .post-actions .action { width: 80px; padding: 10px 0; display: inline-block; opacity: 0.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 0.15s ease, color 0.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; } /* Keep pill style for non-article .action-btn if used elsewhere */ .action-btn { display: inline-flex; align-items: center; gap: 6px; padding: 0.38em 1.1em; border-radius: 50px; border: 1px solid transparent; background: var(--surface-4, rgba(136, 136, 136, 0.1)); color: var(--color-ink-3); cursor: pointer; font-size: 14px; transition: all 0.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, 0.08)); } .action-btn i { font-size: 1.2em; } .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 rgba(0, 0, 0, 0.35); } .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: rgba(255,255,255,0.06); color: #fff; } /* ===== Author Card — 对齐 legacy 卡片容器 ===== */ /* 原 .author-box 卡片规则已删除:全站仅评论区使用 .author-box(无装饰 flex 行, 由 comments/layout.css 接管),文章作者条使用 .article-author-bar。 */ .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, 0.12)); display: none; z-index: 20; } .post-drop-meta.is-open .post-drop-meta__menu { display: grid; gap: 4px; } .article-header:has(.post-drop-meta.is-open) { z-index: 30; } .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, 0.06)); color: var(--color-primary); } .post-drop-meta__item i { width: 16px; text-align: center; } /* ===== legacy single-metabox / author bar ===== */ .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); } /* line-form-line owned by legacy-utilities.css — only context here */ .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; }