feat(widgets): replicate 12 reference widgets for full Zibll parity

- rewrite schemas for posts, tab_posts, oneline_posts, hot_posts,
  term_cards, term_aggregation, media_cards, combo_info, partners,
  recent_comments, posts_toc and slider_media_combo to mirror the
  modern reference modules field by field (options, defaults,
  dependencies, min/max/step, subheadings)
- port reference renderers: hot ranking with TOP badges, category
  aggregation card, graphic cover cards, partners CSS marquee,
  combo info cards with auto band palette, recent comment list
- rename 分类与标签聚合卡片 to 分类聚合卡片 and restrict it to
  categories (no tags/topics branch in this project)
- drop topics filter fields and the topics query branch; align
  orderby value domain with supported post meta
- add searchable sortable terms admin field type and spinner unit
  suffix rendering
- unify widget pagination and lazy loading on the REST client with
  the runtime-owned ias reveal trigger; remove the legacy
  post_ajax_trigger dual path
- align section-navs TOC with the reference contract (wznav ids,
  3-heading minimum, zib-widget box)
This commit is contained in:
2026-09-05 11:28:00 +08:00
parent 9dc278bd83
commit b639d57c5b
25 changed files with 1388 additions and 446 deletions
+52 -52
View File
@@ -3932,11 +3932,11 @@ body:has(.modal.in) .float-btn,
}
/**------小工具:复合信息卡片模块--------**/
.aksrt-combo-info-card {
.zib-combo-info-card {
--zci-radius: 12px;
--zci-band-h: 80px;
}
.aksrt-combo-info-card .zci-card {
.zib-combo-info-card .zci-card {
position: relative;
height: 100%;
min-height: 180px;
@@ -3946,11 +3946,11 @@ body:has(.modal.in) .float-btn,
transition: transform 0.25s ease, box-shadow 0.25s ease;
box-shadow: 0 1px 3px var(--main-shadow);
}
.aksrt-combo-info-card .zci-card:hover {
.zib-combo-info-card .zci-card:hover {
transform: translateY(-3px);
box-shadow: 0 12px 32px var(--main-shadow);
}
.aksrt-combo-info-card .zci-card::before {
.zib-combo-info-card .zci-card::before {
content: '';
position: absolute;
left: 0;
@@ -3961,33 +3961,33 @@ body:has(.modal.in) .float-btn,
transition: opacity 0.3s ease;
pointer-events: none;
}
.aksrt-combo-info-card.zci-has-band .zci-card::before {
.zib-combo-info-card.zci-has-band .zci-card::before {
opacity: 1;
}
/* 色带配色(仅保留关键的渐变,无法用主题变量简写) */
.aksrt-combo-info-card .zci-card.zci-band-blue::before {
.zib-combo-info-card .zci-card.zci-band-blue::before {
background: linear-gradient(170deg, rgba(114, 160, 255, 0.3), rgba(196, 174, 255, 0.2) 15%, transparent 60%);
}
.aksrt-combo-info-card .zci-card.zci-band-cyan::before {
.zib-combo-info-card .zci-card.zci-band-cyan::before {
background: linear-gradient(170deg, rgba(82, 196, 214, 0.3), rgba(130, 200, 255, 0.18) 15%, transparent 60%);
}
.aksrt-combo-info-card .zci-card.zci-band-green::before {
.zib-combo-info-card .zci-card.zci-band-green::before {
background: linear-gradient(170deg, rgba(92, 209, 158, 0.3), rgba(180, 230, 170, 0.2) 15%, transparent 60%);
}
.aksrt-combo-info-card .zci-card.zci-band-yellow::before {
.zib-combo-info-card .zci-card.zci-band-yellow::before {
background: linear-gradient(170deg, rgba(255, 190, 102, 0.3), rgba(255, 220, 132, 0.22) 15%, transparent 60%);
}
.aksrt-combo-info-card .zci-card.zci-band-pink::before {
.zib-combo-info-card .zci-card.zci-band-pink::before {
background: linear-gradient(170deg, rgba(255, 146, 181, 0.3), rgba(255, 190, 220, 0.2) 15%, transparent 60%);
}
.aksrt-combo-info-card .zci-card.zci-band-purple::before {
.zib-combo-info-card .zci-card.zci-band-purple::before {
background: linear-gradient(170deg, rgba(170, 140, 255, 0.36), rgba(220, 180, 255, 0.22) 15%, transparent 60%);
}
.aksrt-combo-info-card .zci-card.zci-band-gray::before {
.zib-combo-info-card .zci-card.zci-band-gray::before {
background: linear-gradient(170deg, rgba(140, 150, 170, 0.22), rgba(190, 195, 210, 0.14) 15%, transparent 60%);
}
/* 内容区:只控 padding 和层级,flex 布局由 HTML class 完成 */
.aksrt-combo-info-card .zci-body {
.zib-combo-info-card .zci-body {
position: relative;
z-index: 1;
padding: 20px;
@@ -4001,7 +4001,7 @@ body:has(.modal.in) .float-btn,
}
/* 图标盒子:尺寸与圆角,背景沿用卡片主色自动适配暗色 */
.aksrt-combo-info-card .zci-icon {
.zib-combo-info-card .zci-icon {
width: 44px;
height: 44px;
border-radius: 8px;
@@ -4009,65 +4009,65 @@ body:has(.modal.in) .float-btn,
font-size: 42px;
}
.aksrt-combo-info-card .zci-icon img {
.zib-combo-info-card .zci-icon img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* 标题字号(font-bold / text-ellipsis-2 / mb10 已走工具类) */
.aksrt-combo-info-card .zci-title {
.zib-combo-info-card .zci-title {
font-size: 16px;
}
/* CTA 行动链接:仅保留颜色 + hover 行为 + 箭头动效 */
.aksrt-combo-info-card .zci-cta {
.zib-combo-info-card .zci-cta {
margin-top: 20px;
color: var(--this-color, --key-color);
font-weight: 500;
transition: 0.2s;
}
.aksrt-combo-info-card .zci-cta:hover {
.zib-combo-info-card .zci-cta:hover {
gap: 10px;
color: var(--focus-color);
text-decoration: none;
}
.aksrt-combo-info-card .zci-cta .zci-arrow {
.zib-combo-info-card .zci-cta .zci-arrow {
transform: rotate(-45deg);
font-size: 11px;
transition: transform 0.25s ease;
}
.aksrt-combo-info-card .zci-cta:hover .zci-arrow {
.zib-combo-info-card .zci-cta:hover .zci-arrow {
transform: rotate(-45deg) translateX(2px);
}
@media (max-width: 767px) {
.aksrt-combo-info-card .zci-card {
.zib-combo-info-card .zci-card {
min-height: 160px;
}
.aksrt-combo-info-card .zci-body {
.zib-combo-info-card .zci-body {
padding: 14px;
}
.col-xs-12 .zci-card .zci-body {
padding: 20px;
}
.aksrt-combo-info-card .zci-title {
.zib-combo-info-card .zci-title {
font-size: 15px;
}
}
.sidebar .aksrt-combo-info-card > * {
.sidebar .zib-combo-info-card > * {
width: 100% !important;
}
.sidebar .aksrt-combo-info-card .zci-card {
.sidebar .zib-combo-info-card .zci-card {
min-height: 160px;
}
.sidebar .aksrt-combo-info-card .zci-body {
.sidebar .zib-combo-info-card .zci-body {
padding: 14px;
}
.sidebar .col-xs-12 .zci-card .zci-body {
padding: 20px;
}
.sidebar .aksrt-combo-info-card .zci-title {
.sidebar .zib-combo-info-card .zci-title {
font-size: 15px;
}
@@ -4397,7 +4397,7 @@ body:has(.modal.in) .float-btn,
}
/**------小工具:横向滚动合作伙伴模块--------**/
.aksrt-partners-scroll {
.zib-partners-scroll {
--zps-card-w: 220px;
--zps-card-h: 90px;
--zps-card-radius: 10px;
@@ -4407,42 +4407,42 @@ body:has(.modal.in) .float-btn,
width: 100%;
overflow: hidden;
}
.aksrt-partners-scroll .zps-row {
.zib-partners-scroll .zps-row {
position: relative;
overflow: hidden;
margin-bottom: var(--zps-gap);
}
.aksrt-partners-scroll .zps-row:last-child {
.zib-partners-scroll .zps-row:last-child {
margin-bottom: 0;
}
.aksrt-partners-scroll .zps-track {
.zib-partners-scroll .zps-track {
display: flex;
width: max-content;
will-change: transform;
animation: zps-scroll-left var(--zps-duration, 30s) linear infinite;
animation-play-state: paused;
}
.aksrt-partners-scroll .zps-dir-right .zps-track {
.zib-partners-scroll .zps-dir-right .zps-track {
animation-name: zps-scroll-right;
}
.aksrt-partners-scroll .zps-track[data-zps-ready] {
.zib-partners-scroll .zps-track[data-zps-ready] {
animation-play-state: running;
}
.aksrt-partners-scroll .zps-group {
.zib-partners-scroll .zps-group {
gap: var(--zps-gap);
padding-right: var(--zps-gap);
}
.aksrt-partners-scroll.zps-pause-hover .zps-row:hover .zps-track {
.zib-partners-scroll.zps-pause-hover .zps-row:hover .zps-track {
animation-play-state: paused;
}
.aksrt-partners-scroll .zps-item {
.zib-partners-scroll .zps-item {
width: var(--zps-card-w);
height: var(--zps-card-h);
overflow: hidden;
padding: 8px 10px;
color: inherit;
}
.aksrt-partners-scroll .zps-img {
.zib-partners-scroll .zps-img {
max-width: 100%;
max-height: 100%;
width: auto;
@@ -4450,34 +4450,34 @@ body:has(.modal.in) .float-btn,
object-fit: contain;
display: block;
}
.aksrt-partners-scroll.zps-card-bg .zps-item {
.zib-partners-scroll.zps-card-bg .zps-item {
background: var(--main-bg-color);
border-radius: var(--zps-card-radius);
}
.aksrt-panel .aksrt-partners-scroll.zps-card-bg .zps-item {
.aksrt-panel .zib-partners-scroll.zps-card-bg .zps-item {
background: var(--muted-border-color);
}
/* 图文卡片模式 */
.aksrt-partners-scroll.zps-style-card .zps-card-icon {
.zib-partners-scroll.zps-style-card .zps-card-icon {
width: calc(var(--zps-card-h) - 30px);
height: calc(var(--zps-card-h) - 30px);
min-width: 40px;
min-height: 40px;
overflow: hidden;
}
.aksrt-partners-scroll.zps-style-card .zps-img {
.zib-partners-scroll.zps-style-card .zps-img {
object-fit: cover;
border-radius: calc(var(--zps-card-radius) - 4px);
width: 100%;
}
/* 纯 Logo 模式:高度固定、宽度自适应,图片保持原始比例 */
.aksrt-partners-scroll.zps-style-logo .zps-item {
.zib-partners-scroll.zps-style-logo .zps-item {
width: auto;
min-width: 0;
justify-content: center;
padding: 0 20px;
}
.aksrt-partners-scroll.zps-style-logo .zps-img {
.zib-partners-scroll.zps-style-logo .zps-img {
height: calc(var(--zps-card-h) - 24px);
max-height: calc(var(--zps-card-h) - 24px);
width: auto;
@@ -4485,28 +4485,28 @@ body:has(.modal.in) .float-btn,
filter: grayscale(40%);
transition: filter 0.25s ease, transform 0.25s ease;
}
.aksrt-partners-scroll.zps-style-logo .zps-item:hover .zps-img {
.zib-partners-scroll.zps-style-logo .zps-item:hover .zps-img {
filter: grayscale(0);
transform: scale(1.04);
}
/* 精简胶囊模式 */
.aksrt-partners-scroll.zps-style-chip .zps-item {
.zib-partners-scroll.zps-style-chip .zps-item {
min-height: 40px;
width: auto;
height: auto;
padding: 8px 14px;
}
.aksrt-partners-scroll.zps-card-bg.zps-style-chip .zps-item {
.zib-partners-scroll.zps-card-bg.zps-style-chip .zps-item {
padding: 8px 16px 8px 10px;
}
.aksrt-partners-scroll.zps-style-chip .zps-chip-icon .zps-img {
.zib-partners-scroll.zps-style-chip .zps-chip-icon .zps-img {
height: 22px;
border-radius: 4px;
}
.aksrt-partners-scroll.zps-card-bg.zps-style-chip .zps-chip-icon .zps-img {
.zib-partners-scroll.zps-card-bg.zps-style-chip .zps-chip-icon .zps-img {
border-radius: calc(var(--zps-card-radius) - 4px);
}
.aksrt-partners-scroll.zps-style-chip .zps-chip-title {
.zib-partners-scroll.zps-style-chip .zps-chip-title {
max-width: 180px;
}
.zps-end-fade {
@@ -4551,11 +4551,11 @@ body:has(.modal.in) .float-btn,
}
}
@media (max-width: 767px) {
.aksrt-partners-scroll {
.zib-partners-scroll {
--zps-card-w: 160px;
--zps-card-h: 70px;
}
.aksrt-partners-scroll.zps-style-logo .zps-item {
.zib-partners-scroll.zps-style-logo .zps-item {
padding: 0 12px;
}
.zps-end-fade::after {
@@ -4563,7 +4563,7 @@ body:has(.modal.in) .float-btn,
}
}
@media (prefers-reduced-motion: reduce) {
.aksrt-partners-scroll .zps-track {
.zib-partners-scroll .zps-track {
animation: none !important;
}
}