chore(branding): remove leftover upstream theme identifiers

The theme was renamed Zibll/子比 → AKSRT → Jio, but upstream branding
survived the sweeps in CSS classes, the SVG sprite prefix, a persisted
widget field ID, JS events, admin Vue class names, test infrastructure
and docblocks.

Renames:
- zib-widget / zib-widget-wrap / zib-slider → jio-widget-box /
  jio-widget-box-wrap / jio-slider-box (jio-widget is taken by the modern
  widget shell, jio-box-* by the card primitives)
- zib-partners-scroll + zps-* → jio-partners-scroll + jps-*
- zib-combo-info-card + zci-* → jio-combo-info-card + jci-*
- zibsvg- → jiosvg-, including the exported picker helpers and the
  fa-zibsvg- family-prefix guard
- zibpay_type → pay_type; the dual-read fallback in PostQuery collapses
  to a single key
- [zibajax="submit"] dropped (no PHP emitter); zib_ajax.success →
  jio_ajax.success
- aks-* admin Vue classes → jio-*
- zib_palette() → palette()

User-facing vendor traces are gone: the floating "more" button default no
longer ships a zibll.com link or 子比主题 marketing copy, the notice
widget ships no preset promo entries, and the four 官网教程 links are
removed from the post-list admin schema.

Test infrastructure renamed to neutral names (docker-compose.reference.yml,
Caddyfile, article-baseline.json, modern-widgets-contract.test.cjs) with
their DB/volume/env/slug identifiers following.

Kept intentionally, documented in tests/fixtures/README.md: the golden
fixture reference fingerprint (a SHA-256 record of an external directory,
read by validate-widget-golden / generate-widget-golden-fixture /
audit-widget-system), the doesNotMatch guards that prove the old tokens are
gone, and the reference theme's own meta key in the visual fixtures.

No backward-compat or data migration: saved widget configs holding old
icon keys or the old field ID silently lose them, per the project's
rewrite-over-compatibility rule.

Verified: 132/132 node contract tests, php tests/widget-system/run.php
(146 assertions), audit-admin-contracts, audit-psr4-paths and
validate-widget-golden all green; tracked bundles regenerated and in sync.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-02 00:06:54 +08:00
1 parent 42cc64106d
commit 427968a721
188 files changed
+915 -967

No files matched your search

@@ -16,32 +16,21 @@ export const FLOAT_BTN_META = {
more: { title: '更多按钮', panel: '添加更多自定义按钮' },
}
const themeUri = (window.jioAdminData?.themeUri || '').replace(/\/$/, '')
/** 「更多按钮」出厂默认项(对齐参考主题 float_btn.more 默认值)。 */
/** 「更多按钮」出厂默认项:不预设任何第三方指向,只给一个图标按钮。 */
export function giftMoreButton() {
return {
desc: '本站同款主题模板',
icon: 'zibsvg-gift-color',
desc: '',
icon: 'jiosvg-gift-color',
link: { url: '', target: '' },
hover: `<a href="https://www.zibll.com/" target="_blank">
<div class="flex c-red">
<img class="flex0" alt="zibll子比主题" src="${themeUri}/assets/img/logo.png" height="30">
<div class="flex1 ml10">
<dt>本站同款主题模板</dt>
<div class="px12 mt10 muted-color">zibll子比主题是一款漂亮优雅的网站主题模板,功能强大,配置简单。</div>
<div class="but mt10 p2-10 c-blue btn-block px12">查看详情</div>
</div>
</div>
</a>`,
hover_width: 240,
hover: '',
hover_width: 200,
pc_s: true,
m_s: true,
color: { color: '', bg: 'rgba(255, 111, 6, 0.2)' },
}
}
/** 「添加按钮」新增项默认值(参考主题 group 字段默认值)。 */
/** 「添加按钮」新增项默认值。 */
export function defaultMoreButton() {
return {
desc: '',
@@ -81,7 +81,7 @@
<span
v-else
class="jio-icon-picker__preview-svg"
v-html="zibsvgMarkup(`zibsvg-${icon}`)"
v-html="jiosvgMarkup(`jiosvg-${icon}`)"
></span>
</div>
<div v-if="filteredIcons.length === 0" class="jio-icon-picker__empty">
@@ -105,7 +105,7 @@ import IconValue from './IconValue.vue'
import api from '@/api/index.js'
import {
cleanSvg,
zibsvgMarkup,
jiosvgMarkup,
composeIconValue,
} from '@/utils/icons.js'
@@ -120,7 +120,7 @@ const FALLBACK_TABS = [
{ id: 'fas', title: 'Solid', type: 'fa', icons: [] },
{ id: 'far', title: 'Regular', type: 'fa', icons: [] },
{ id: 'fab', title: 'Brands', type: 'fa', icons: [] },
{ id: 'zibsvg', title: '内置 SVG', type: 'svg', icons: [] },
{ id: 'jiosvg', title: '内置 SVG', type: 'svg', icons: [] },
{ id: 'custom', title: '自定义', type: 'custom', icons: [] },
]
@@ -3,9 +3,9 @@
<i v-if="isFaValue(value)" :class="faClass" aria-hidden="true"></i>
<!-- Built-in sprite value -->
<span
v-else-if="isZibsvgValue(value)"
v-else-if="isJiosvgValue(value)"
class="jio-icon-value__svg"
v-html="zibsvgMarkup(value)"
v-html="jiosvgMarkup(value)"
></span>
<!-- Inline custom SVG value -->
<span
@@ -17,11 +17,11 @@
<script setup>
/**
* IconValue — renders any icon-picker value ("fa fas fa-star", "zibsvg-key",
* IconValue — renders any icon-picker value ("fa fas fa-star", "jiosvg-key",
* "customsvg-<svg>") as inline preview markup.
*/
import { computed } from 'vue'
import { cleanSvg, isFaValue, isZibsvgValue, isCustomSvgValue, zibsvgMarkup } from '@/utils/icons.js'
import { cleanSvg, isFaValue, isJiosvgValue, isCustomSvgValue, jiosvgMarkup } from '@/utils/icons.js'
const props = defineProps({
value: { type: String, default: '' },
@@ -1,5 +1,5 @@
<template>
<div ref="editorRef" class="aks-code-editor" :class="{ 'is-disabled': disabled }" />
<div ref="editorRef" class="jio-code-editor" :class="{ 'is-disabled': disabled }" />
</template>
<script setup>
@@ -86,19 +86,19 @@ onBeforeUnmount(() => {
</script>
<style scoped>
.aks-code-editor {
.jio-code-editor {
border: 1px solid var(--n-border-color, #e0e0e6);
border-radius: 4px;
overflow: hidden;
min-height: calc(var(--rows, 8) * 22px);
}
.aks-code-editor :deep(.cm-editor) {
.jio-code-editor :deep(.cm-editor) {
font-size: 13px;
}
.aks-code-editor :deep(.cm-editor.cm-focused) {
.jio-code-editor :deep(.cm-editor.cm-focused) {
outline: none;
}
.aks-code-editor.is-disabled {
.jio-code-editor.is-disabled {
opacity: 0.6;
pointer-events: none;
}
@@ -1,5 +1,5 @@
<template>
<div class="aks-native-ops-redirect">
<div class="jio-native-ops-redirect">
<h2>{{ title }}</h2>
<p class="desc">
此运营功能已迁移到 WordPress 原生后台侧栏(对齐 legacy)。正在跳转…
@@ -33,13 +33,13 @@ onMounted(() => {
</script>
<style scoped>
.aks-native-ops-redirect {
.jio-native-ops-redirect {
max-width: 640px;
margin: 48px auto;
padding: 24px;
background: var(--aks-surface, #fff);
background: var(--jio-surface, #fff);
border-radius: 8px;
border: 1px solid var(--aks-border, #e5e7eb);
border: 1px solid var(--jio-border, #e5e7eb);
}
.desc {
color: #646970;
@@ -1,5 +1,5 @@
/**
* VIP会员 — 结构 1:1 对照参考主题 Zibll:会员等级(开关)、会员权益
* VIP会员 — 结构 1:1 对照既有实现:会员等级(开关)、会员权益
* (普通/一级/二级 tab)、会员购买选项(一级/二级/续费/升级 tab)、
* 积分兑换会员与界面文案。
*
@@ -22,24 +22,8 @@ export const featureSchema = {
title: '',
fields: [
{ key: 'article_nav', label: '文章目录树', type: 'switch', default: true, description: '默认开关,每篇文章可单独设置。开启后请自行添加文章目录树模块到侧边栏(文章内标题超过3个才会显示)' },
{
key: 'article_nav_tutorial',
label: '',
type: 'content',
ui_only: true,
dependsOn: { key: 'article_nav', value: true },
content: '<p class="jio-hint"><a href="https://www.zibll.com/1717.html" target="_blank">【查看官网教程】</a></p>',
},
{ key: 'article_nav_mobile_nav_s', label: '在移动端弹出菜单内显示', type: 'switch', default: true, dependsOn: { key: 'article_nav', value: true }, description: '如需显示在侧边栏等其它位置,请使用小工具模块添加' },
{ key: 'imagelightbox', label: '图片灯箱', type: 'switch', default: true, description: '点击图片查看原图功能,共两种模式' },
{
key: 'imagelightbox_tutorial',
label: '',
type: 'content',
ui_only: true,
dependsOn: { key: 'imagelightbox', value: true },
content: '<p class="jio-hint"><a href="https://www.zibll.com/683.html" target="_blank">【查看官网教程】</a></p>',
},
{
key: 'imagelightbox_type',
label: '图片灯箱模式',
@@ -18,7 +18,7 @@ export const filterSchema = {
key: 'filter_intro',
type: 'content',
ui_only: true,
content: '<p class="jio-hint"><b>文章高级筛选功能:</b>通过此功能可实现更加复杂、精细化的内容筛选<br/>添加筛选类型和内容值之后,编写文章时候,可以进行选择,且在前台也可以实现精准筛选<br/>例如影视网站:[类型]有[剧情/喜剧/悬疑/惊悚/犯罪],[地区]有[大陆/美国/日韩/港台/印度],[年份]有[2022/2021/2020/10年代/00年代]等<br/><span class="jio-warn">注意事项:添加类型key时候,只能使用英文加下划线,不能有空格,且尽量复杂一点(不能为tag,category等系统已存在的类型),避免与其他mate_key重复!类型名称不能为分类、标签等系统已存在的类型</span><br/><a href="https://www.zibll.com/15886.html" target="_blank">查看官网教程</a></p>',
content: '<p class="jio-hint"><b>文章高级筛选功能:</b>通过此功能可实现更加复杂、精细化的内容筛选<br/>添加筛选类型和内容值之后,编写文章时候,可以进行选择,且在前台也可以实现精准筛选<br/>例如影视网站:[类型]有[剧情/喜剧/悬疑/惊悚/犯罪],[地区]有[大陆/美国/日韩/港台/印度],[年份]有[2022/2021/2020/10年代/00年代]等<br/><span class="jio-warn">注意事项:添加类型key时候,只能使用英文加下划线,不能有空格,且尽量复杂一点(不能为tag,category等系统已存在的类型),避免与其他mate_key重复!类型名称不能为分类、标签等系统已存在的类型</span></p>',
},
{
key: 'custom_filter_show',
@@ -129,7 +129,7 @@ export const pageSchema = {
type: 'fieldset',
default: { scale: 0 },
dependsOn: { key: 'article_video_cover', value: true },
description: '视频封面配置 <a href="https://www.zibll.com/1900.html" target="_blank">【查看官方封面配置教程】</a>',
description: '视频封面配置',
fields: [
{ key: 'scale', label: '固定长宽比例', type: 'number', default: 0, min: 0, max: 200, step: 5, unit: '%', description: '为0则不固定长宽比例' },
],
+1 -1
View File
@@ -544,7 +544,7 @@
}
}
/* zibll-legacy "fa fab / fa far" double-prefix beats FA5's own single-class
/* A legacy "fa fab / fa far" double-prefix beats FA5's own single-class
declarations in the cascade — re-assert the brand family/regular weight. */
.fa.fab{font-family:"Font Awesome 5 Brands";font-weight:400}
.fa.far{font-weight:400}
+9 -9
View File
@@ -3,7 +3,7 @@
*
* Supported stored formats:
* "fa fas fa-star" — FA5 class string
* "zibsvg-hot" — theme built-in SVG sprite key (window.jio_svgs)
* "jiosvg-hot" — theme built-in SVG sprite key (window.jio_svgs)
* "customsvg-<svg>" — inline user SVG markup
*/
@@ -32,31 +32,31 @@ export function isFaValue(value) {
return /^fa[\s-]/.test(String(value || '').trim())
}
export function isZibsvgValue(value) {
return String(value || '').trim().startsWith('zibsvg-')
export function isJiosvgValue(value) {
return String(value || '').trim().startsWith('jiosvg-')
}
export function isCustomSvgValue(value) {
return String(value || '').trim().startsWith('customsvg-')
}
/** Sprite key of a zibsvg value, e.g. "zibsvg-hot" → "hot". */
export function zibsvgKey(value) {
/** Sprite key of a jiosvg value, e.g. "jiosvg-hot" → "hot". */
export function jiosvgKey(value) {
return String(value || '')
.trim()
.slice(7)
.replace(/[^a-zA-Z0-9_-]/g, '')
}
/** Inline markup for a zibsvg sprite preview (sprite injected by svg-icon.js). */
export function zibsvgMarkup(value) {
const key = zibsvgKey(value)
/** Inline markup for a jiosvg sprite preview (sprite injected by svg-icon.js). */
export function jiosvgMarkup(value) {
const key = jiosvgKey(value)
return key ? `<svg class="icon" aria-hidden="true"><use xlink:href="#icon-${key}"></use></svg>` : ''
}
/** Value of a picker selection composed from a catalog group + icon name. */
export function composeIconValue(group, name) {
if (group.type === 'fa') return `fa ${group.id} fa-${name}`
if (group.type === 'svg') return `zibsvg-${name}`
if (group.type === 'svg') return `jiosvg-${name}`
return String(name || '')
}
+1 -1
View File
@@ -200,7 +200,7 @@
min-width: 0;
}
/* zibll-legacy "fa fab / fa far" double-prefix beats FA5's own single-class
/* A legacy "fa fab / fa far" double-prefix beats FA5's own single-class
declarations in the cascade — re-assert the brand family/regular weight. */
.fa.fab{font-family:"Font Awesome 5 Brands";font-weight:400}
.fa.far{font-weight:400}
+2 -2
View File
@@ -679,7 +679,7 @@
color: var(--color-primary, #f04494);
}
/* .widget a 的链接色不得覆盖 .but / .img-badge 自身配色(zibll 的 zib-widget 不设置链接色) */
/* .widget a 的链接色不得覆盖 .but / .img-badge 自身配色(jio-widget-box 不设置链接色) */
.widget a.but,
.widget a.img-badge {
color: var(--this-color, #fff);
@@ -818,7 +818,7 @@ ul.breadcrumb > li:last-child,
/* Video footer breadcrumb — legacy .single-video .breadcrumb:标题在下方
footer(flex jsb at 行)不叠加封面,只归零内边距,保留基础弱化样式
(opacity .6 与 12px 下边距),对齐 zibll main.css。 */
(opacity .6 与 12px 下边距)。 */
.single-video .breadcrumb {
padding: 0;
}
+3 -3
View File
@@ -5697,8 +5697,8 @@ body.jio-modal-runtime-open {
transition: opacity 0.15s ease;
}
/* ---- 禁封用户弹窗(参考主题 set_user_ban 模态框几何 1:1)----
参考主题 zib_get_edit_user_ban_link 未传 data-class → 走 Bootstrap 默认
/* ---- 禁封用户弹窗(set_user_ban 模态框几何 1:1)----
编辑入口未传 data-class → 走 Bootstrap 默认
.modal-dialog(>=768px 宽 600px);data-height=360 → .modal-content 初始
高度 360 后动画至内容高度;mobile-bottom → <769px 底部抽屉。
此处以 min-height:360px 复刻初始高度契约,桌面宽取 600px。 */
@@ -5750,7 +5750,7 @@ body.jio-modal-runtime-open {
padding: 2px 6px;
}
/* 解封视图多彩横幅(参考主题 zib_get_modal_colorful_header('c-yellow', ...)):
/* 解封视图多彩横幅(多彩横幅头契约:c-yellow 配色变体):
120px 高绝对定位横幅 + 旋转彩斑,后续表单整体下移 120px。 */
.jio-user-ban-modal .modal-colorful-header,
.jio-user-ban-modal .colorful-bg,
+1 -1
View File
@@ -83,7 +83,7 @@ ul.breadcrumb > li:last-child,
/* Video footer breadcrumb — legacy .single-video .breadcrumb:标题在下方
footer(flex jsb at 行)不叠加封面,只归零内边距,保留基础弱化样式
(opacity .6 与 12px 下边距),对齐 zibll main.css。 */
(opacity .6 与 12px 下边距)。 */
.single-video .breadcrumb {
padding: 0;
}
+3 -3
View File
@@ -286,8 +286,8 @@ body.jio-modal-runtime-open {
transition: opacity 0.15s ease;
}
/* ---- 禁封用户弹窗(参考主题 set_user_ban 模态框几何 1:1)----
参考主题 zib_get_edit_user_ban_link 未传 data-class → 走 Bootstrap 默认
/* ---- 禁封用户弹窗(set_user_ban 模态框几何 1:1)----
编辑入口未传 data-class → 走 Bootstrap 默认
.modal-dialog(>=768px 宽 600px);data-height=360 → .modal-content 初始
高度 360 后动画至内容高度;mobile-bottom → <769px 底部抽屉。
此处以 min-height:360px 复刻初始高度契约,桌面宽取 600px。 */
@@ -339,7 +339,7 @@ body.jio-modal-runtime-open {
padding: 2px 6px;
}
/* 解封视图多彩横幅(参考主题 zib_get_modal_colorful_header('c-yellow', ...)):
/* 解封视图多彩横幅(多彩横幅头契约:c-yellow 配色变体):
120px 高绝对定位横幅 + 旋转彩斑,后续表单整体下移 120px。 */
.jio-user-ban-modal .modal-colorful-header,
.jio-user-ban-modal .colorful-bg,
+2 -2
View File
@@ -4,7 +4,7 @@
display: flow-root;
}
#jio-submit-form .zib-widget {
#jio-submit-form .jio-widget-box {
margin-bottom: 15px;
padding: 15px;
border-radius: var(--main-radius, 8px);
@@ -726,7 +726,7 @@ body.jio-editor-media-open {
}
@media (max-width: 767px) {
.newposts-wrap .zib-widget {
.newposts-wrap .jio-widget-box {
border-radius: 0;
}
+2 -2
View File
@@ -1,5 +1,5 @@
/* Canonical Zibll 9.0 paid-content card shell. */
.zib-widget.pay-box {
/* Paid-content card shell. */
.jio-widget-box.pay-box {
clear: both;
margin-bottom: 20px;
padding: 15px;
+1 -1
View File
@@ -50,7 +50,7 @@
color: var(--color-primary, #f04494);
}
/* .widget a 的链接色不得覆盖 .but / .img-badge 自身配色(zibll 的 zib-widget 不设置链接色) */
/* .widget a 的链接色不得覆盖 .but / .img-badge 自身配色(jio-widget-box 不设置链接色) */
.widget a.but,
.widget a.img-badge {
color: var(--this-color, #fff);
+1 -1
View File
@@ -94,7 +94,7 @@
/* ===== Video footer (legacy single-video-footer) ===== */
/* 内边距沿用 legacy 契约 .single-video-footer{padding:15px}(与 zibll 一致),
/* 内边距沿用 legacy 契约 .single-video-footer{padding:15px},
面包屑在 flex jsb at 行首,不再额外包装。 */
.single-head-cover .single-video-footer .article-title {
font-size: clamp(1.1rem, 2.4vw, 1.45rem); font-weight: 700; margin: 8px 0 0; line-height: 1.35;
@@ -383,8 +383,8 @@ html.dark .article-end-separator span {
/* ===== Zibll .zib-widget base (正文下方卡片堆栈依赖) ===== */
.zib-widget {
/* ===== .jio-widget-box base (正文下方卡片堆栈依赖) ===== */
.jio-widget-box {
clear: both;
background-color: var(--main-bg-color);
padding: 15px;
@@ -392,7 +392,7 @@ html.dark .article-end-separator span {
border-radius: var(--main-radius);
margin-bottom: 20px;
}
.zib-widget.nobottom.notop {
.jio-widget-box.nobottom.notop {
padding-top: 0;
padding-bottom: 0;
}
+1 -1
View File
@@ -3,7 +3,7 @@
*/
/* VIP now uses the shared modal runtime host.
壳几何 1:1 对齐 Zibll modal_pay_uservip:
壳几何 1:1 对齐 modal_pay_uservip:
- 宽度 = bootstrap3 ≥768px 的 .modal-dialog 600px,配合
.modal.flex .modal-dialog 的 max-width: calc(100% - 20px)
- 高度 = .modal.flex .modal-content 的 max-height: calc(100vh - 20px)
+102 -102
View File
@@ -3957,11 +3957,11 @@ body:has(.modal.in) .float-btn,
}
/**------小工具:复合信息卡片模块--------**/
.zib-combo-info-card {
--zci-radius: 12px;
--zci-band-h: 80px;
.jio-combo-info-card {
--jci-radius: 12px;
--jci-band-h: 80px;
}
.zib-combo-info-card .zci-card {
.jio-combo-info-card .jci-card {
position: relative;
height: 100%;
min-height: 180px;
@@ -3971,62 +3971,62 @@ body:has(.modal.in) .float-btn,
transition: transform 0.25s ease, box-shadow 0.25s ease;
box-shadow: 0 1px 3px var(--main-shadow);
}
.zib-combo-info-card .zci-card:hover {
.jio-combo-info-card .jci-card:hover {
transform: translateY(-3px);
box-shadow: 0 12px 32px var(--main-shadow);
}
.zib-combo-info-card .zci-card::before {
.jio-combo-info-card .jci-card::before {
content: '';
position: absolute;
left: 0;
right: 0;
top: 0;
height: calc(var(--zci-band-h) * 1.5);
height: calc(var(--jci-band-h) * 1.5);
opacity: 0;
transition: opacity 0.3s ease;
pointer-events: none;
}
.zib-combo-info-card.zci-has-band .zci-card::before {
.jio-combo-info-card.jci-has-band .jci-card::before {
opacity: 1;
}
/* 色带配色(仅保留关键的渐变,无法用主题变量简写) */
.zib-combo-info-card .zci-card.zci-band-blue::before {
.jio-combo-info-card .jci-card.jci-band-blue::before {
background: linear-gradient(170deg, rgba(114, 160, 255, 0.3), rgba(196, 174, 255, 0.2) 15%, transparent 60%);
}
.zib-combo-info-card .zci-card.zci-band-cyan::before {
.jio-combo-info-card .jci-card.jci-band-cyan::before {
background: linear-gradient(170deg, rgba(82, 196, 214, 0.3), rgba(130, 200, 255, 0.18) 15%, transparent 60%);
}
.zib-combo-info-card .zci-card.zci-band-green::before {
.jio-combo-info-card .jci-card.jci-band-green::before {
background: linear-gradient(170deg, rgba(92, 209, 158, 0.3), rgba(180, 230, 170, 0.2) 15%, transparent 60%);
}
.zib-combo-info-card .zci-card.zci-band-yellow::before {
.jio-combo-info-card .jci-card.jci-band-yellow::before {
background: linear-gradient(170deg, rgba(255, 190, 102, 0.3), rgba(255, 220, 132, 0.22) 15%, transparent 60%);
}
.zib-combo-info-card .zci-card.zci-band-pink::before {
.jio-combo-info-card .jci-card.jci-band-pink::before {
background: linear-gradient(170deg, rgba(255, 146, 181, 0.3), rgba(255, 190, 220, 0.2) 15%, transparent 60%);
}
.zib-combo-info-card .zci-card.zci-band-purple::before {
.jio-combo-info-card .jci-card.jci-band-purple::before {
background: linear-gradient(170deg, rgba(170, 140, 255, 0.36), rgba(220, 180, 255, 0.22) 15%, transparent 60%);
}
.zib-combo-info-card .zci-card.zci-band-gray::before {
.jio-combo-info-card .jci-card.jci-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 完成 */
.zib-combo-info-card .zci-body {
.jio-combo-info-card .jci-body {
position: relative;
z-index: 1;
padding: 20px;
}
.zci-tags {
.jci-tags {
margin: -4px;
margin-bottom: 10px;
}
.zci-tags > span {
.jci-tags > span {
margin: 4px;
}
/* 图标盒子:尺寸与圆角,背景沿用卡片主色自动适配暗色 */
.zib-combo-info-card .zci-icon {
.jio-combo-info-card .jci-icon {
width: 44px;
height: 44px;
border-radius: 8px;
@@ -4034,65 +4034,65 @@ body:has(.modal.in) .float-btn,
font-size: 42px;
}
.zib-combo-info-card .zci-icon img {
.jio-combo-info-card .jci-icon img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* 标题字号(font-bold / text-ellipsis-2 / mb10 已走工具类) */
.zib-combo-info-card .zci-title {
.jio-combo-info-card .jci-title {
font-size: 16px;
}
/* CTA 行动链接:仅保留颜色 + hover 行为 + 箭头动效 */
.zib-combo-info-card .zci-cta {
.jio-combo-info-card .jci-cta {
margin-top: 20px;
color: var(--this-color, --key-color);
font-weight: 500;
transition: 0.2s;
}
.zib-combo-info-card .zci-cta:hover {
.jio-combo-info-card .jci-cta:hover {
gap: 10px;
color: var(--focus-color);
text-decoration: none;
}
.zib-combo-info-card .zci-cta .zci-arrow {
.jio-combo-info-card .jci-cta .jci-arrow {
transform: rotate(-45deg);
font-size: 11px;
transition: transform 0.25s ease;
}
.zib-combo-info-card .zci-cta:hover .zci-arrow {
.jio-combo-info-card .jci-cta:hover .jci-arrow {
transform: rotate(-45deg) translateX(2px);
}
@media (max-width: 767px) {
.zib-combo-info-card .zci-card {
.jio-combo-info-card .jci-card {
min-height: 160px;
}
.zib-combo-info-card .zci-body {
.jio-combo-info-card .jci-body {
padding: 14px;
}
.col-xs-12 .zci-card .zci-body {
.col-xs-12 .jci-card .jci-body {
padding: 20px;
}
.zib-combo-info-card .zci-title {
.jio-combo-info-card .jci-title {
font-size: 15px;
}
}
.sidebar .zib-combo-info-card > * {
.sidebar .jio-combo-info-card > * {
width: 100% !important;
}
.sidebar .zib-combo-info-card .zci-card {
.sidebar .jio-combo-info-card .jci-card {
min-height: 160px;
}
.sidebar .zib-combo-info-card .zci-body {
.sidebar .jio-combo-info-card .jci-body {
padding: 14px;
}
.sidebar .col-xs-12 .zci-card .zci-body {
.sidebar .col-xs-12 .jci-card .jci-body {
padding: 20px;
}
.sidebar .zib-combo-info-card .zci-title {
.sidebar .jio-combo-info-card .jci-title {
font-size: 15px;
}
@@ -4422,52 +4422,52 @@ body:has(.modal.in) .float-btn,
}
/**------小工具:横向滚动合作伙伴模块--------**/
.zib-partners-scroll {
--zps-card-w: 220px;
--zps-card-h: 90px;
--zps-card-radius: 10px;
--zps-speed: 3;
--zps-gap: 10px;
.jio-partners-scroll {
--jps-card-w: 220px;
--jps-card-h: 90px;
--jps-card-radius: 10px;
--jps-speed: 3;
--jps-gap: 10px;
position: relative;
width: 100%;
overflow: hidden;
}
.zib-partners-scroll .zps-row {
.jio-partners-scroll .jps-row {
position: relative;
overflow: hidden;
margin-bottom: var(--zps-gap);
margin-bottom: var(--jps-gap);
}
.zib-partners-scroll .zps-row:last-child {
.jio-partners-scroll .jps-row:last-child {
margin-bottom: 0;
}
.zib-partners-scroll .zps-track {
.jio-partners-scroll .jps-track {
display: flex;
width: max-content;
will-change: transform;
animation: zps-scroll-left var(--zps-duration, 30s) linear infinite;
animation: jps-scroll-left var(--jps-duration, 30s) linear infinite;
animation-play-state: paused;
}
.zib-partners-scroll .zps-dir-right .zps-track {
animation-name: zps-scroll-right;
.jio-partners-scroll .jps-dir-right .jps-track {
animation-name: jps-scroll-right;
}
.zib-partners-scroll .zps-track[data-zps-ready] {
.jio-partners-scroll .jps-track[data-jps-ready] {
animation-play-state: running;
}
.zib-partners-scroll .zps-group {
gap: var(--zps-gap);
padding-right: var(--zps-gap);
.jio-partners-scroll .jps-group {
gap: var(--jps-gap);
padding-right: var(--jps-gap);
}
.zib-partners-scroll.zps-pause-hover .zps-row:hover .zps-track {
.jio-partners-scroll.jps-pause-hover .jps-row:hover .jps-track {
animation-play-state: paused;
}
.zib-partners-scroll .zps-item {
width: var(--zps-card-w);
height: var(--zps-card-h);
.jio-partners-scroll .jps-item {
width: var(--jps-card-w);
height: var(--jps-card-h);
overflow: hidden;
padding: 8px 10px;
color: inherit;
}
.zib-partners-scroll .zps-img {
.jio-partners-scroll .jps-img {
max-width: 100%;
max-height: 100%;
width: auto;
@@ -4475,71 +4475,71 @@ body:has(.modal.in) .float-btn,
object-fit: contain;
display: block;
}
.zib-partners-scroll.zps-card-bg .zps-item {
.jio-partners-scroll.jps-card-bg .jps-item {
background: var(--main-bg-color);
border-radius: var(--zps-card-radius);
border-radius: var(--jps-card-radius);
}
.jio-panel .zib-partners-scroll.zps-card-bg .zps-item {
.jio-panel .jio-partners-scroll.jps-card-bg .jps-item {
background: var(--muted-border-color);
}
/* 图文卡片模式 */
.zib-partners-scroll.zps-style-card .zps-card-icon {
width: calc(var(--zps-card-h) - 30px);
height: calc(var(--zps-card-h) - 30px);
.jio-partners-scroll.jps-style-card .jps-card-icon {
width: calc(var(--jps-card-h) - 30px);
height: calc(var(--jps-card-h) - 30px);
min-width: 40px;
min-height: 40px;
overflow: hidden;
}
.zib-partners-scroll.zps-style-card .zps-img {
.jio-partners-scroll.jps-style-card .jps-img {
object-fit: cover;
border-radius: calc(var(--zps-card-radius) - 4px);
border-radius: calc(var(--jps-card-radius) - 4px);
width: 100%;
}
/* 纯 Logo 模式:高度固定、宽度自适应,图片保持原始比例 */
.zib-partners-scroll.zps-style-logo .zps-item {
.jio-partners-scroll.jps-style-logo .jps-item {
width: auto;
min-width: 0;
justify-content: center;
padding: 0 20px;
}
.zib-partners-scroll.zps-style-logo .zps-img {
height: calc(var(--zps-card-h) - 24px);
max-height: calc(var(--zps-card-h) - 24px);
.jio-partners-scroll.jps-style-logo .jps-img {
height: calc(var(--jps-card-h) - 24px);
max-height: calc(var(--jps-card-h) - 24px);
width: auto;
max-width: none;
filter: grayscale(40%);
transition: filter 0.25s ease, transform 0.25s ease;
}
.zib-partners-scroll.zps-style-logo .zps-item:hover .zps-img {
.jio-partners-scroll.jps-style-logo .jps-item:hover .jps-img {
filter: grayscale(0);
transform: scale(1.04);
}
/* 精简胶囊模式 */
.zib-partners-scroll.zps-style-chip .zps-item {
.jio-partners-scroll.jps-style-chip .jps-item {
min-height: 40px;
width: auto;
height: auto;
padding: 8px 14px;
}
.zib-partners-scroll.zps-card-bg.zps-style-chip .zps-item {
.jio-partners-scroll.jps-card-bg.jps-style-chip .jps-item {
padding: 8px 16px 8px 10px;
}
.zib-partners-scroll.zps-style-chip .zps-chip-icon .zps-img {
.jio-partners-scroll.jps-style-chip .jps-chip-icon .jps-img {
height: 22px;
border-radius: 4px;
}
.zib-partners-scroll.zps-card-bg.zps-style-chip .zps-chip-icon .zps-img {
border-radius: calc(var(--zps-card-radius) - 4px);
.jio-partners-scroll.jps-card-bg.jps-style-chip .jps-chip-icon .jps-img {
border-radius: calc(var(--jps-card-radius) - 4px);
}
.zib-partners-scroll.zps-style-chip .zps-chip-title {
.jio-partners-scroll.jps-style-chip .jps-chip-title {
max-width: 180px;
}
.zps-end-fade {
.jps-end-fade {
position: relative;
--zps-end-fade-color: var(--body-bg-color);
--jps-end-fade-color: var(--body-bg-color);
}
.zps-end-fade::before,
.zps-end-fade::after {
.jps-end-fade::before,
.jps-end-fade::after {
content: '';
z-index: 1;
position: absolute;
@@ -4547,48 +4547,48 @@ body:has(.modal.in) .float-btn,
width: 160px;
height: 100%;
}
.zps-end-fade::before {
.jps-end-fade::before {
left: -10px;
background: linear-gradient(to left, rgba(255, 255, 255, 0), var(--zps-end-fade-color) 90%);
background: linear-gradient(to left, rgba(255, 255, 255, 0), var(--jps-end-fade-color) 90%);
}
.zps-end-fade::after {
.jps-end-fade::after {
right: -10px;
background: linear-gradient(to right, rgba(255, 255, 255, 0), var(--zps-end-fade-color) 90%);
background: linear-gradient(to right, rgba(255, 255, 255, 0), var(--jps-end-fade-color) 90%);
}
.jio-panel .zps-end-fade {
--zps-end-fade-color: var(--main-bg-color);
.jio-panel .jps-end-fade {
--jps-end-fade-color: var(--main-bg-color);
}
@keyframes zps-scroll-left {
@keyframes jps-scroll-left {
from {
transform: translate3d(0, 0, 0);
}
to {
transform: translate3d(var(--zps-shift, -50%), 0, 0);
transform: translate3d(var(--jps-shift, -50%), 0, 0);
}
}
@keyframes zps-scroll-right {
@keyframes jps-scroll-right {
from {
transform: translate3d(var(--zps-shift, -50%), 0, 0);
transform: translate3d(var(--jps-shift, -50%), 0, 0);
}
to {
transform: translate3d(0, 0, 0);
}
}
@media (max-width: 767px) {
.zib-partners-scroll {
--zps-card-w: 160px;
--zps-card-h: 70px;
.jio-partners-scroll {
--jps-card-w: 160px;
--jps-card-h: 70px;
}
.zib-partners-scroll.zps-style-logo .zps-item {
.jio-partners-scroll.jps-style-logo .jps-item {
padding: 0 12px;
}
.zps-end-fade::after {
.jps-end-fade::after {
width: 60px;
}
}
@media (prefers-reduced-motion: reduce) {
.zib-partners-scroll .zps-track {
.jio-partners-scroll .jps-track {
animation: none !important;
}
}
@@ -4810,7 +4810,7 @@ body:has(.modal.in) .float-btn,
line-height: 1.42857143;
}
.posts-nav-box .zib-widget {
.posts-nav-box .jio-widget-box {
clear: both;
margin-bottom: 20px;
padding: 15px;
@@ -5134,7 +5134,7 @@ body:has(.modal.in) .float-btn,
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}
/*-----zib.media-文件管理-图片上传---*/
/*-----媒体文件管理-图片上传---*/
.mini-media-my-box .drop-mask {
position: absolute;
background: rgba(33, 55, 81, 0.7);
@@ -5755,8 +5755,8 @@ body:has(.modal.in) .float-btn,
.payment-method-radio img {
height: 35px;
/* 抵消 bootstrap 全局 img{display:block;max-width:100%;height:auto}
(Jio bootstrap 将 BS3 .img-responsive 选择器组误并入了裸 img,
Zibll 的裸 img 不在该组):flex 压缩时 max-width:100% 会把图标
(本主题 bootstrap 将 BS3 .img-responsive 选择器组误并入了裸 img):
flex 压缩时 max-width:100% 会把图标
钳制到被压窄的项宽(实测 5 渠道 400px 弹窗图标被压成 16x35 细
条),flex:none 防不住 max-width,必须显式还原。 */
width: auto;
@@ -11210,7 +11210,7 @@ body.error404 {
margin-bottom: 30px;
}
.mobile-navbar .posts-nav-box .zib-widget {
.mobile-navbar .posts-nav-box .jio-widget-box {
background: var(--muted-border-color);
box-shadow: none;
}
@@ -11991,7 +11991,7 @@ body.error404 {
}
/* =============================================================================
* 销售页小工具(主题并入,源自 zibaut-access widgets.css)
* 销售页小工具(销售页访问控制相关样式并入)
* ============================================================================= */
/* =============================================================
@@ -14150,7 +14150,7 @@ body.error404 {
/*--------------OVER---over---------OVER---over---------OVER---over---------OVER---over-----------*/
/*--------------FA5 family-prefix compatibility---------FA5 family-prefix compatibility-------------*/
/* zibll-legacy "fa fab / fa far" double-prefix values beat FA5's own single-class
/* Legacy "fa fab / fa far" double-prefix values beat FA5's own single-class
declarations in the cascade, blanking brand icons and bolding regular ones. */
.fa.fab{font-family:"Font Awesome 5 Brands";font-weight:400}
.fa.far{font-weight:400}
+1 -1
View File
@@ -1 +1 @@
body{--mian-max-width: 1200px;--posts-card-scale: 70%;--posts-list-scale: 70%;--theme-color: #f04494;--focus-color: var(--theme-color);--focus-shadow-color: rgba(253, 83, 161, .4);--key-color: #333;--main-color: #4e5358;--main-shadow: rgba(116, 116, 116, .08);--muted-color: #777;--muted-2-color: #999;--muted-3-color: #b1b1b1;--muted-4-color: #d2d2d2;--body-bg-color: #f5f6f7;--main-bg-color: #fff;--muted-bg-color: #eee;--muted-bg-2-color: #f6f7f8;--main-border-color: rgba(50, 50, 50, .06);--muted-border-color: rgba(0, 0, 0, .03);--main-radius: 8px;--mini-radius: calc(var(--main-radius) / 1.4);--blur-bg: rgba(255, 255, 255, .8);--float-btn-bg: rgba(200, 200, 200, .4);--header-bg: var(--blur-bg);--header-color: var(--main-color);--footer-bg: var(--main-bg-color);--footer-color: var(--muted-2-color)}.dark-theme{--key-color: #f8fafc;--main-color: #e5eef7;--main-shadow: rgba(24, 24, 24, .1);--muted-color: #b4b6bb;--muted-2-color: #888a8f;--muted-3-color: #636469;--muted-4-color: #43454a;--body-bg-color: #292a2d;--main-bg-color: #323335;--muted-bg-color: #2d2e31;--muted-bg-2-color: #37383a;--main-border-color: rgba(114, 114, 114, .1);--muted-border-color: rgba(184, 184, 184, .02);--blur-bg: rgba(50, 51, 53, .8);--float-btn-bg: rgba(70, 70, 70, .4);--header-bg: var(--blur-bg);--header-color: var(--main-color);--footer-bg: var(--main-bg-color);--footer-color: var(--muted-2-color)}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}.dark::view-transition-old(root){z-index:1}.dark::view-transition-new(root){z-index:2147483646}::view-transition-old(root){z-index:2147483646}::view-transition-new(root){z-index:1}@supports not ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){body{--blur-bg: #ffffff}body.dark-theme{--blur-bg: #37383a}}body:has(.modal.in),body.modal-open{--blur-bg: #ffffff}body.dark-theme:has(.modal.in),body.dark-theme.modal-open{--blur-bg: #37383a}body.fps-accelerat{--blur-bg: #ffffff}body.fps-accelerat.dark-theme{--blur-bg: #37383a}body.fps-accelerat *{-webkit-backdrop-filter:unset!important;backdrop-filter:unset!important}a[href],.relates-thumb li a>.post-info,.more-posts a>span{transition:color .2s,background .3s,opacity .3s,box-shadow .3s,transform .3s}.main-shadow{transition:box-shadow .3s}.but:focus,.but:hover,.progress,.navbar-nav>li:before{transition:.3s}.navbar-top .sub-menu,.theme-popover,.hover-show .hover-show-con{opacity:0;transform:translateY(6px);transition:.4s}.navbar-top li:hover>.sub-menu,.hover-show:hover .hover-show-con,.hover-show:hover~.hover-show-con,.hover-show:hover~.sub-menu{opacity:1;transform:translateY(0)}.hover-show{position:relative;cursor:pointer;z-index:10}.hover-show .hover-show-con{position:absolute;visibility:hidden}.hover-show:hover .hover-show-con,.hover-show:hover~.hover-show-con,.hover-show:hover~.sub-menu{visibility:unset}.match-ok,.navbar-top .sub-menu li>a,.ic-close{transition:.3s}.ic-close:hover{transform:rotate(270deg);color:inherit}.social_loginbar a,.item-thumbnail img,.dosc-nav .fa{transition:.2s ease-out}.hover-zoom:hover,.hover-zoom-img:hover img,.social_loginbar .xh-social-item:hover,.social_loginbar .social-login-item:hover{transform:scale(1.05)}.hover-zoom-sm:hover,.hover-zoom-img-sm:hover img,.posts-mini:hover img,.posts-item:hover .item-thumbnail img,.posts-item.mult-thumb .thumb-items>span>img:hover{transform:scale(1.02)}.main-min-height{min-height:calc(100vh - 280px)}.main-shadow{box-shadow:0 0 10px var(--main-shadow)}.key-color{color:var(--key-color)}.focus-color{--this-color: var(--focus-color);color:var(--focus-color)}.muted-color{color:var(--muted-color)}.muted-2-color{color:var(--muted-2-color)}.muted-3-color{color:var(--muted-3-color)}.main-bg{background:var(--main-bg-color)}.placeholder{background:linear-gradient(118deg,#7979791a 25%,#79797933 37%,#7979791a 63%);opacity:1;border-radius:4px;-webkit-animation:placeholder 1.5s ease infinite!important;animation:placeholder 1.5s ease infinite!important;background-size:400% 100%!important}.placeholder.img{height:119px}.placeholder.t1{height:24px;width:80%}.placeholder.k1{height:20px;width:60%}.placeholder.k2{height:20px}.placeholder.k3{height:15px}.placeholder.s1{width:70px;height:15px;display:inline-block}@-webkit-keyframes placeholder{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes placeholder{0%{background-position:100% 50%}to{background-position:0 50%}}@-webkit-keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes fade{0%{opacity:0}to{opacity:1}}.ani.shake{-webkit-animation:shake .3s ease-in!important;animation:shake .3s ease-in!important}@-webkit-keyframes shake{20%{transform:translate(2px)}40%{transform:translate(-4px)}60%{transform:translate(5px)}80%{transform:translate(3px)}to{transform:translate(0)}}@keyframes shake{20%{transform:translate(2px)}40%{transform:translate(-4px)}60%{transform:translate(5px)}80%{transform:translate(3px)}to{transform:translate(0)}}.obs-animate{opacity:0;transition:opacity .6sLine truncated
body{--mian-max-width: 1200px;--posts-card-scale: 70%;--posts-list-scale: 70%;--theme-color: #f04494;--focus-color: var(--theme-color);--focus-shadow-color: rgba(253, 83, 161, .4);--key-color: #333;--main-color: #4e5358;--main-shadow: rgba(116, 116, 116, .08);--muted-color: #777;--muted-2-color: #999;--muted-3-color: #b1b1b1;--muted-4-color: #d2d2d2;--body-bg-color: #f5f6f7;--main-bg-color: #fff;--muted-bg-color: #eee;--muted-bg-2-color: #f6f7f8;--main-border-color: rgba(50, 50, 50, .06);--muted-border-color: rgba(0, 0, 0, .03);--main-radius: 8px;--mini-radius: calc(var(--main-radius) / 1.4);--blur-bg: rgba(255, 255, 255, .8);--float-btn-bg: rgba(200, 200, 200, .4);--header-bg: var(--blur-bg);--header-color: var(--main-color);--footer-bg: var(--main-bg-color);--footer-color: var(--muted-2-color)}.dark-theme{--key-color: #f8fafc;--main-color: #e5eef7;--main-shadow: rgba(24, 24, 24, .1);--muted-color: #b4b6bb;--muted-2-color: #888a8f;--muted-3-color: #636469;--muted-4-color: #43454a;--body-bg-color: #292a2d;--main-bg-color: #323335;--muted-bg-color: #2d2e31;--muted-bg-2-color: #37383a;--main-border-color: rgba(114, 114, 114, .1);--muted-border-color: rgba(184, 184, 184, .02);--blur-bg: rgba(50, 51, 53, .8);--float-btn-bg: rgba(70, 70, 70, .4);--header-bg: var(--blur-bg);--header-color: var(--main-color);--footer-bg: var(--main-bg-color);--footer-color: var(--muted-2-color)}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}.dark::view-transition-old(root){z-index:1}.dark::view-transition-new(root){z-index:2147483646}::view-transition-old(root){z-index:2147483646}::view-transition-new(root){z-index:1}@supports not ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){body{--blur-bg: #ffffff}body.dark-theme{--blur-bg: #37383a}}body:has(.modal.in),body.modal-open{--blur-bg: #ffffff}body.dark-theme:has(.modal.in),body.dark-theme.modal-open{--blur-bg: #37383a}body.fps-accelerat{--blur-bg: #ffffff}body.fps-accelerat.dark-theme{--blur-bg: #37383a}body.fps-accelerat *{-webkit-backdrop-filter:unset!important;backdrop-filter:unset!important}a[href],.relates-thumb li a>.post-info,.more-posts a>span{transition:color .2s,background .3s,opacity .3s,box-shadow .3s,transform .3s}.main-shadow{transition:box-shadow .3s}.but:focus,.but:hover,.progress,.navbar-nav>li:before{transition:.3s}.navbar-top .sub-menu,.theme-popover,.hover-show .hover-show-con{opacity:0;transform:translateY(6px);transition:.4s}.navbar-top li:hover>.sub-menu,.hover-show:hover .hover-show-con,.hover-show:hover~.hover-show-con,.hover-show:hover~.sub-menu{opacity:1;transform:translateY(0)}.hover-show{position:relative;cursor:pointer;z-index:10}.hover-show .hover-show-con{position:absolute;visibility:hidden}.hover-show:hover .hover-show-con,.hover-show:hover~.hover-show-con,.hover-show:hover~.sub-menu{visibility:unset}.match-ok,.navbar-top .sub-menu li>a,.ic-close{transition:.3s}.ic-close:hover{transform:rotate(270deg);color:inherit}.social_loginbar a,.item-thumbnail img,.dosc-nav .fa{transition:.2s ease-out}.hover-zoom:hover,.hover-zoom-img:hover img,.social_loginbar .xh-social-item:hover,.social_loginbar .social-login-item:hover{transform:scale(1.05)}.hover-zoom-sm:hover,.hover-zoom-img-sm:hover img,.posts-mini:hover img,.posts-item:hover .item-thumbnail img,.posts-item.mult-thumb .thumb-items>span>img:hover{transform:scale(1.02)}.main-min-height{min-height:calc(100vh - 280px)}.main-shadow{box-shadow:0 0 10px var(--main-shadow)}.key-color{color:var(--key-color)}.focus-color{--this-color: var(--focus-color);color:var(--focus-color)}.muted-color{color:var(--muted-color)}.muted-2-color{color:var(--muted-2-color)}.muted-3-color{color:var(--muted-3-color)}.main-bg{background:var(--main-bg-color)}.placeholder{background:linear-gradient(118deg,#7979791a 25%,#79797933 37%,#7979791a 63%);opacity:1;border-radius:4px;-webkit-animation:placeholder 1.5s ease infinite!important;animation:placeholder 1.5s ease infinite!important;background-size:400% 100%!important}.placeholder.img{height:119px}.placeholder.t1{height:24px;width:80%}.placeholder.k1{height:20px;width:60%}.placeholder.k2{height:20px}.placeholder.k3{height:15px}.placeholder.s1{width:70px;height:15px;display:inline-block}@-webkit-keyframes placeholder{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes placeholder{0%{background-position:100% 50%}to{background-position:0 50%}}@-webkit-keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes fade{0%{opacity:0}to{opacity:1}}.ani.shake{-webkit-animation:shake .3s ease-in!important;animation:shake .3s ease-in!important}@-webkit-keyframes shake{20%{transform:translate(2px)}40%{transform:translate(-4px)}60%{transform:translate(5px)}80%{transform:translate(3px)}to{transform:translate(0)}}@keyframes shake{20%{transform:translate(2px)}40%{transform:translate(-4px)}60%{transform:translate(5px)}80%{transform:translate(3px)}to{transform:translate(0)}}.obs-animate{opacity:0;transition:opacity .6sLine truncated
+1 -1
View File
@@ -1,4 +1,4 @@
/* Shared Zibll-source authentication contract: modal and /sign/. */
/* Shared authentication contract: modal and /sign/. */
.sign {
max-width: 330px;
margin: auto;
+14 -14
View File
@@ -157,23 +157,23 @@
margin-left: 6px;
}
/* ===== 余额充值弹窗 — Zibll balance-charge modal parity =====
.zib-widget 基础卡样式与 .vip-product/.vip-tag 的 Zibll 原值仅在充值表单内生效
(vip-modal.css 在全局以同类名覆盖了它们,这里按 Zibll main.css 5962/5928/5990 回位)。 */
/* ===== 余额充值弹窗 — balance-charge modal parity =====
.jio-widget-box 基础卡样式与 .vip-product/.vip-tag 的原值仅在充值表单内生效
(vip-modal.css 在全局以同类名覆盖了它们,这里在充值表单内按同名原值回位)。 */
/* 弹窗壳静止态必须隐藏。Zibll 无此问题:它的 bootstrap 无 .modal 基础规则,
且弹窗壳由 refresh_modal JS 按需创建;本主题是服务端静态输出,若不在此
/* 弹窗壳静止态必须隐藏。此处不存在 .modal 基础规则带来的冲突,
且弹窗壳由服务端静态输出;若不在此
显式隐藏,main.css 的 .flex{display:flex}(后加载、与 bootstrap 的
.modal{display:none} 同特异性)会让弹窗永久 display:flex 铺满全屏,
叠加 .fade 的 opacity:0 形成隐形遮罩,拦截整页点击。 */
.modal[data-jio-charge-modal] {
display: none;
}
/* 打开态必须是 flex(而非 bootstrap 的内联 display:block):无头 Chrome
对 Zibll 真实 CSS 的几何实证显示,display:block 下 .modal.flex
.modal-dialog{margin:0} 使对话框顶在左上角;flex 下由壳上的 .flex.jc
(align-items:center;justify-content:center)双轴居中——Zibll 生产环境
即此形态(其 jQuery .show() 对 computed≠none 的壳是空操作,内联
/* 打开态必须是 flex(而非 bootstrap 的内联 display:block):实测
显示 display:block 下 .modal.flex .modal-dialog{margin:0} 使对话框顶在左上角;
flex 下由壳上的 .flex.jc
(align-items:center;justify-content:center)双轴居中,即此形态(jQuery
.show() 对 computed≠none 的壳是空操作,内联
display 从未写入)。 */
.modal[data-jio-charge-modal].in {
display: flex;
@@ -209,7 +209,7 @@
border-radius: 5em;
}
.balance-charge-form .zib-widget {
.balance-charge-form .jio-widget-box {
clear: both;
background-color: var(--main-bg-color);
padding: 15px;
@@ -245,7 +245,7 @@
.balance-charge-form .vip-product.active::before {
content: '\f058';
/* 本主题打包的是 FA5(族名 'Font Awesome 5 Free',solid 字形需 900),
Zibll 遗留的 FA4 族名在本主题不存在 → 豆腐块(被误认破图)。 */
legacy FA4 族名在本主题不存在 → 豆腐块(被误认破图)。 */
font: normal normal 900 16px/1 'Font Awesome 5 Free';
color: var(--focus-color);
position: absolute;
@@ -1361,9 +1361,9 @@ body.uc-modal-open {
line-height: 1;
}
/* 积分兑换会员入口(参考主题用户中心 VIP 页 1:1:两张档位购买卡下方的全宽横条,
/* 积分兑换会员入口(用户中心 VIP 页 1:1:两张档位购买卡下方的全宽横条,
左侧 points-color 图标 + 「积分兑换会员」,右侧「立即兑换」badg + 右箭头;
结构与配色由 zibll 工具类(flex/ac/jsb/flex1/em12/c-yellow/badg)承担,
结构与配色由工具类(flex/ac/jsb/flex1/em12/c-yellow/badg)承担,
此处只提供与 .uc-vip-level-card 同一变量体系的表面与间距)。 */
.uc-vip-points-entry {
margin-top: 12px;
+2 -2
View File
@@ -1,4 +1,4 @@
/* User level panel — zibll-aligned single-path layout. */
/* User level panel — single-path layout. */
.jio-user-level-icon--admin { height: 22px; }
/* The level page owns its cards; do not wrap it in the generic dashboard card. */
@@ -50,7 +50,7 @@
pointer-events: none;
}
/* Match zibll .colorful-bg / .jb-vip1, scoped to the level summary card. */
/* Match .colorful-bg / .jb-vip1, scoped to the level summary card. */
.jio-level-card--summary.colorful-bg {
background: var(--this-bg);
background-size: 120%;
+2 -2
View File
@@ -785,7 +785,7 @@
/* ==================== 官方认证面板 ==================== */
/* 面板内容为 Zibll 同款 colorful-bg hero 卡片(参考主题 1:1),去掉外层白卡壳 */
/* 面板内容为 colorful-bg hero 卡片(1:1 同构),去掉外层白卡壳 */
.uc-content #panel-auth.dashboard-panel {
padding: 0;
border: 0;
@@ -794,7 +794,7 @@
box-shadow: none;
}
/* 认证按钮(Zibll .but.jb-blue.padding-lg.btn-block 工具类) */
/* 认证按钮(.but.jb-blue.padding-lg.btn-block 工具类) */
.uc-content #panel-auth .but[data-auth-modal-open] {
width: 100%;
margin: 20px 0 0;
+19 -19
View File
@@ -175,12 +175,12 @@ body.jio-user-center .uc-content,
}
/* 侧栏卡片间距:1:1 参考主题。参考侧栏是普通块流,每张卡片自带 mb20
(zib-widget 默认也是 20px),≤640px 由 mb10-sm 收到 10px。
(jio-widget-box 默认也是 20px),≤640px 由 mb10-sm 收到 10px。
本站侧栏不用 gap,间距全部由卡片自己的 margin-bottom 承担。 */
.uc-sidebar > .uc-sidebar-statistics,
.uc-sidebar > .uc-sidebar-vip,
.uc-sidebar > .uc-sidebar__pair,
.uc-sidebar-centers > .zib-widget,
.uc-sidebar-centers > .jio-widget-box,
.uc-sidebar > .uc-sidebar-iconbox {
margin-bottom: 20px;
}
@@ -189,7 +189,7 @@ body.jio-user-center .uc-content,
.uc-sidebar > .uc-sidebar-statistics,
.uc-sidebar > .uc-sidebar-vip,
.uc-sidebar > .uc-sidebar__pair,
.uc-sidebar-centers > .zib-widget,
.uc-sidebar-centers > .jio-widget-box,
.uc-sidebar > .uc-sidebar-iconbox {
margin-bottom: 10px;
}
@@ -410,11 +410,11 @@ body.jio-user-center .uc-content,
}
/* 文章 / 评论 / 收藏 / 粉丝:1:1 参考主题 zib_user_center_page_sidebar_statistics()。
参考主题没有给 .user-statistics-item 写专门样式,外观全部来自 zib-widget padding-10
/* 文章 / 评论 / 收藏 / 粉丝:1:1 同构 sidebar statistics。
侧栏统计项没有专门样式,外观全部来自 jio-widget-box padding-10
与 em14 / em09 opacity5 mt6;链接交互来自全局 a / a:hover 与 a[href] 过渡:
常态正文色,悬停/聚焦切到 --focus-color,color 0.2s 过渡,无下划线、无 outline。 */
.uc-sidebar-statistics.zib-widget {
.uc-sidebar-statistics.jio-widget-box {
clear: both;
line-height: 1.42857143;
background-color: var(--main-bg-color);
@@ -443,7 +443,7 @@ body.jio-user-center .uc-content,
}
}
/* VIP 入口:1:1 参考主题 zib_user_center_page_sidebar_vip(),外观全部来自
/* VIP 入口:1:1 同构 sidebar vip,外观全部来自
payvip-icon / badg / btn-block / abs-right。这里只补 <a> 与侧栏 gap 带来的差异。 */
.uc-sidebar .uc-sidebar-vip,
.uc-sidebar .uc-sidebar-vip:hover,
@@ -452,7 +452,7 @@ body.jio-user-center .uc-content,
text-decoration: none;
}
/* legacy-utilities 把 .abs-right 改成 top:0/right:0,恢复参考主题的垂直居中几何。 */
/* legacy-utilities 把 .abs-right 改成 top:0/right:0,恢复垂直居中几何。 */
.uc-sidebar-vip > .abs-right {
top: 50%;
right: 0.7em;
@@ -465,9 +465,9 @@ body.jio-user-center .uc-content,
vertical-align: -0.1em;
}
/* 创作中心 / 推广中心:1:1 参考主题 zib_user_center_page_sidebar_income_rebate()。
.zib-widget 在本站不是全局类,在侧栏内按参考原值落地。 */
.uc-sidebar-centers > .zib-widget {
/* 创作中心 / 推广中心:1:1 同构 sidebar income/rebate 入口。
.jio-widget-box 在本站不是全局类,在侧栏内按同名原值落地。 */
.uc-sidebar-centers > .jio-widget-box {
clear: both;
background-color: var(--main-bg-color);
padding: 10px;
@@ -477,8 +477,8 @@ body.jio-user-center .uc-content,
text-decoration: none;
}
.uc-sidebar-centers > .zib-widget:hover,
.uc-sidebar-centers > .zib-widget:focus {
.uc-sidebar-centers > .jio-widget-box:hover,
.uc-sidebar-centers > .jio-widget-box:focus {
color: var(--main-color);
}
@@ -542,13 +542,13 @@ body.jio-user-center .uc-content,
.uc-summary-card--wallet .uc-summary-card__body { color: #3978d6; }
.uc-summary-card--points .uc-summary-card__body { color: #ba7a0a; }
/* 我的服务 / 功能设置:1:1 参考主题 zib_user_center_page_sidebar_button_1/2()。
外壳为 zib-widget padding-6,标题为普通字重的 padding-6 ml3;
网格项只继承正文色,参考主题没有 hover / 选中变色。
参考主题正文行高是 bootstrap 的 1.42857143,本站 body 为 1.6,
/* 我的服务 / 功能设置:1:1 同构 sidebar button 1/2。
外壳为 jio-widget-box padding-6,标题为普通字重的 padding-6 ml3;
网格项只继承正文色,无 hover / 选中变色。
正文行高是 bootstrap 的 1.42857143,本站 body 为 1.6,
标题、图标、文字三行会各自被撑高,这里恢复参考行高。 */
/* widgets/frontend.css 在 main.min.css 之后加载,其 .zib-widget{padding:15px} 会盖掉 .padding-6,这里按参考值锁回 6px。 */
.uc-sidebar-iconbox.zib-widget {
/* widgets/frontend.css 在 main.min.css 之后加载,其 .jio-widget-box{padding:15px} 会盖掉 .padding-6,这里按参考值锁回 6px。 */
.uc-sidebar-iconbox.jio-widget-box {
clear: both;
padding: 6px;
line-height: 1.42857143;
+10 -11
View File
@@ -281,7 +281,7 @@
color: var(--color-ink-3);
}
/* 内容区卡片 — Zibll .author-tab.zib-widget parity(padding 15px / radius 8px) */
/* 内容区卡片 — .author-tab.jio-widget-box parity(padding 15px / radius 8px) */
.jio-user-home .dashboard--public {
max-width: none;
background: var(--main-bg-color, #fff);
@@ -291,7 +291,7 @@
border: none;
}
/* Tab 栏 — Zibll .author-tab .tab-nav-theme parity:纯文字导航、
/* Tab 栏 — .author-tab .tab-nav-theme parity:纯文字导航、
* 激活项加粗 + 主题色 + 20px 短横线,计数为小号内联文字。 */
.jio-user-home .dashboard--public .dashboard-tabs {
display: flex;
@@ -368,16 +368,16 @@
animation: panel-fade-in 0.25s ease;
}
/* Public author posts/favorites follow Zibll's author-tab list
* (zibll css/main.css: .author-tab .posts-item + the ≥992px no-sidebar
/* Public author posts/favorites follow the author-tab list
* (.author-tab .posts-item + the ≥992px no-sidebar
* two-column rule .site-layout-1 .posts-item:not(.card)). */
.jio-user-home .jio-user-home__post-list[data-view="list"] .posts-item {
background: transparent;
box-shadow: none;
}
/* 宽屏双列:无侧边栏全文宽时文章卡片并排两列,视觉同 zibll site-layout-1
* (zibll 用 inline-flex+calc(50%),对标记空白敏感,此处用等几何的 grid) */
/* 宽屏双列:无侧边栏全文宽时文章卡片并排两列,视觉同 site-layout-1
* (原实现对标记空白敏感,此处用等几何的 grid) */
@media (min-width: 992px) {
.jio-user-home .jio-user-home__post-list[data-view="list"] {
display: grid;
@@ -474,11 +474,10 @@
}
}
/* User-home follow tab — Zibll parity
* 子切换复刻 zibll inc/functions/zib-author.php:407-410(list-inline splitters
* 居中文字链接,激活 focus-color);列表项为 .author-minicard inline-block
* 三列卡片流(卡片规则、640px 单列均在 vendored main.css),容器居中对齐
* zibll pane 的 text-center。 */
/* User-home follow tab
* 子切换为居中文字链接(list-inline splitters,激活 focus-color);列表项为
* .author-minicard inline-block 三列卡片流(卡片规则、640px 单列均在 vendored
* main.css),容器居中对齐 pane 的 text-center。 */
.jio-user-home .uh-follow__subtabs {
display: flex;
justify-content: center;
+3 -3
View File
@@ -1,6 +1,6 @@
/**
* Jio universal icon picker — shared admin modal for FA5, the built-in
* SVG sprite and inline custom SVG values ("fa fas fa-star" / "zibsvg-key" /
* SVG sprite and inline custom SVG values ("fa fas fa-star" / "jiosvg-key" /
* "customsvg-<svg>").
*
* Any admin screen: call jio_icon_picker_assets() (PHP) and render fields
@@ -62,7 +62,7 @@
value = String(value || '').trim();
if (!value) return '';
if (value.indexOf('customsvg-') === 0) return cleanSvg(value.slice(10));
if (value.indexOf('zibsvg-') === 0) {
if (value.indexOf('jiosvg-') === 0) {
const key = value.slice(7).replace(/[^a-zA-Z0-9_-]/g, '');
return key ? `<svg class="icon" aria-hidden="true"><use xlink:href="#icon-${key}"></use></svg>` : '';
}
@@ -101,7 +101,7 @@
// Style-class-only preview: immune to the .fa family override in FA5's css.
$grid.append(itemButton(value, name, `<i class="${group.id} fa-${escapeText(name)}" aria-hidden="true"></i>`));
} else if (group.type === 'svg') {
const value = `zibsvg-${name}`;
const value = `jiosvg-${name}`;
const key = escapeText(name).replace(/[^a-zA-Z0-9_-]/g, '');
$grid.append(itemButton(value, name, `<svg class="icon" aria-hidden="true"><use xlink:href="#icon-${key}"></use></svg>`));
}
+2 -2
View File
@@ -357,8 +357,8 @@
if (link.closest("[data-jio-ajax-list='off']")) return;
// The canonical pagination engine exclusively owns these controls.
if (link.closest("[data-jio-pagination], .jio-comment-pagination")) return;
// 排序菜单与 pane 触发器是 runtime post_ajax 管线(zib_ajax_option_menu /
// zib_index_tab 契约)的专属控件,这里不能并行处理造成双请求。
// 排序菜单与 pane 触发器是 runtime post_ajax 管线(option-menu /
// index-tab 契约)的专属控件,这里不能并行处理造成双请求。
if (link.closest(".ajax-option, .post_ajax_trigger")) return;
var href = link.getAttribute("href") || link.getAttribute("ajax-href") || link.getAttribute("data-jio-ajax-url");
+1 -1
View File
@@ -51,7 +51,7 @@
}
// 文章骨架:与 runtime/main.js 的 .ajax-next 处理器、jio_render_placeholder()
// 同源同款(1:1 对齐参考主题 zib_get_post_placeholder)。刻意不写 ajax-item:
// 同源同款(1:1 对齐 post placeholder 契约)。刻意不写 ajax-item:
// 否则会被 inject() / find('.ajax-item') 当成真实条目删除或定位。
var CARD_ITEM =
'<div class="posts-item card"><div class="item-thumbnail">' +
+1 -1
View File
@@ -239,7 +239,7 @@
canvas.height = height;
var ctx = canvas.getContext('2d');
var imgHeight = height / 2; // rebate 分支:顶部主图占上半屏
// 站点名走「周」前缀,与参考主题 zib__('week_prefix') 一致。
// 站点名走「周」前缀。
var weekLabel = '周' + '日一二三四五六'.charAt(new Date().getDay());
// 推荐人标签:参考主题 tags = `推荐人: {昵称}`,缺昵称时整层不画。
var tags = referrerName ? '推荐人: ' + String(referrerName) : '';
+3 -3
View File
@@ -337,7 +337,7 @@
closeChargeModal();
}
});
// Zibll data-for/data-value 选中模型:余额档位(.vip-product.product-box)
// data-for/data-value 选中模型:余额档位(.vip-product.product-box)
// 选中变化不产生 change 事件(隐藏 input 由程序赋值),需显式重置幂等键。
var customInput = modal.querySelector('input[name="custom_price"]');
function selectProduct(value) {
@@ -621,7 +621,7 @@
});
}
// ===== 购买积分(Zibll points-pay modal 1:1:商品/自定义 + 余额/卡密支付) =====
// ===== 购买积分(points-pay modal:商品/自定义 + 余额/卡密支付) =====
function initPointsPay() {
var modal = document.querySelector('[data-jio-points-pay-modal]');
if (!modal || modal.dataset.jioPointsPayInitialized === '1') return;
@@ -665,7 +665,7 @@
if (e.key === 'Escape' && modal.classList.contains('in')) closePointsModal();
});
// Zibll data-for/data-value 选中模型:积分商品档位。
// data-for/data-value 选中模型:积分商品档位。
function selectProduct(value) {
modal.querySelectorAll('[data-for="points_product"]').forEach(function (el) {
el.classList.toggle('active', el.getAttribute('data-value') === value);
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* Jio Enhancements — 全局 UI 增强
*
* 图片灯箱由 assets/js/runtime/imgbox.js(Miniimgbox,zibll 风格)唯一负责,
* 图片灯箱由 assets/js/runtime/imgbox.js(Miniimgbox)唯一负责,
* 此文件仅保留滚动方向感知的 legacy class 同步。
*
* @package Jio
+17 -18
View File
@@ -64,7 +64,7 @@
return "";
}
// 会员图标(Zibll zibpay_get_vip_icon:vip_N.svg 或自定义 img_icon)。
// 会员图标:vip_N.svg 或自定义 img_icon。
function vipIcon(levelInfo) {
if (levelInfo && levelInfo.img_icon) {
var img = node("img", "img-icon");
@@ -76,7 +76,7 @@
return node("i", "fa fas fa-gem");
}
// 价格行(Zibll:mark 小号 px12 前缀 + 数字;原价 original-price.relative)。
// 价格行:mark 小号 px12 前缀 + 数字;原价 original-price.relative。
function priceRow(mark, priceLabel, showLabel) {
var row = node("div", "flex abl gap6");
var price = node("div", "product-price c-red");
@@ -120,10 +120,10 @@
input.checked = index === 0;
append(label, input);
// Zibll 套餐卡:zib-widget vip-product relative text-center product-box
// 套餐卡:jio-widget-box vip-product relative text-center product-box
// (右上 tag + 价格行 + 时长 badge,无标题行)。
var product = node("div", "zib-widget vip-product relative text-center product-box");
// 标签颜色取后台「标签颜色」配置,未配置时回退参考主题默认的 jb-yellow。
var product = node("div", "jio-widget-box vip-product relative text-center product-box");
// 标签颜色取后台「标签颜色」配置,未配置时回退默认的 jb-yellow。
if (item.discount_tag) append(product, htmlNode("div", "abs-right vip-tag badg " + (item.tag_class || "jb-yellow"), item.discount_tag));
append(product, priceRow(mark, item.price_label || "", item.show_price_label || ""));
if (item.days_label) append(product, node("div", "muted-2-color c-blue em09 p2-10 badg radius", item.days_label));
@@ -135,11 +135,11 @@
function renderMethods(parent, methods, cardPass, wallet) {
methods = Array.isArray(methods) ? methods : [];
if (!methods.length) return; // 无可用支付方式:由按钮区渲染 Zibll 同款 badg 提示。
if (!methods.length) return; // 无可用支付方式:由按钮区渲染 badg 提示。
wallet = wallet || {};
var defaultMethod = text(methods[0].id || "balance");
// 支付方式选择行(Zibll zibpay_get_initiate_pay_input 同构:
// 支付方式选择行(与余额充值/购买积分弹窗同构:
// .payment-method-radio.hollow-radio + logo 图 + data-for 选中模型;
// 与余额充值/购买积分弹窗完全一致的组件)。
if (methods.length > 1) {
@@ -163,7 +163,7 @@
append(parent, row);
}
// 我的余额盒(Zibll user_balance_box 同构:选中余额渠道时显示)。
// 我的余额盒(选中余额渠道时显示)。
if (methods.some(function (m) { return text(m.id) === "balance"; })) {
var balanceBox = node("div", "mb10 muted-box padding-h10");
balanceBox.setAttribute("data-controller", "payment_method");
@@ -180,7 +180,7 @@
append(parent, balanceBox);
}
// 卡密盒(Zibll password_box 同构:mb10 padding-h10 padding-w6 +
// 卡密盒(mb10 padding-h10 padding-w6 +
// data-controller="payment_method" 契约 + form-control 输入)。
if (cardPass) {
var box = node("div", "mb10 padding-h10 padding-w6");
@@ -372,7 +372,7 @@
modal.setAttribute("data-jio-vip-modal", "");
if (view.version && view.version.catalog) modal.setAttribute("data-jio-vip-version", view.version.catalog);
// 关闭按钮(Zibll 原版内联 SVG close 图标)。
// 关闭按钮(内联 SVG close 图标)。
var close = document.createElement("button");
close.type = "button";
close.className = "close";
@@ -388,7 +388,7 @@
close.appendChild(closeSvg);
append(modal, close);
// 用户信息(Zibll:list-inline user-box)。
// 用户信息(list-inline user-box)。
var userBox = node("ul", "list-inline user-box");
var avatarItem = node("li");
var avatarWrap = node("div", "avatar-img");
@@ -412,7 +412,7 @@
append(userBox, userInfo);
append(modal, userBox);
// 会员缩略卡 tabs(Zibll vip-cardminis:vip-card.vip-cardmini + active-icon 勾)。
// 会员缩略卡 tabs(vip-cardminis:vip-card.vip-cardmini + active-icon 勾)。
var tabs = node("ul", "flex jsb mt10 mb20 vip-cardminis gutters-5");
var content = node("div", "tab-content mt10");
var activeIndex = -1;
@@ -455,7 +455,7 @@
append(tabItem, activeIcon);
append(tabs, tabItem);
// pane(Zibll tab-pane fade active in)。
// pane(tab-pane fade active in)。
var pane = node("div", "tab-pane fade jio-vip-pane" + (active ? " active in" : ""));
pane.id = tabId;
pane.hidden = !active;
@@ -463,7 +463,7 @@
form.setAttribute("onsubmit", "return false;");
var row = node("div", "pay-vip-form-row");
// 左侧会员信息(Zibll zibpay_get_pay_vip_info_box)。
// 会员信息卡(v-info 区块)。
var info = node("div", "text-center pay-vip-info");
var iconbox = node("div", "v-iconbox mb10 flex jc gap10");
var vicon = node("div", "v-icon flex jc");
@@ -487,7 +487,7 @@
renderProducts(products, group.items, wallet.mark);
var points = catalog.points_exchange || {};
if (allowed.points_exchange !== false && points.enabled && Array.isArray(points.packages) && points.packages.length) {
// 参考主题 zibpay_get_pay_uservip_modal 的积分兑换入口:
// 积分兑换入口:
// btn-block but mb10 padding-lg c-green mini-radius + points-color 图标 +
// fa-angle-right;点击开服务端静态兑换弹窗(不再跳转用户中心)。
var pointsLink = node("a", "btn-block but mb10 padding-lg c-green mini-radius");
@@ -508,9 +508,8 @@
var noMethod = methods.length === 0;
var reason = actionReason(reasons[actionName]);
var canPurchase = actionAllowed && !noMethod;
// 按钮字样对齐参考主题:会员弹窗即 zibpay_get_initiate_pay_input(4)
// 默认文案「立即支付」(开通/续费场景一致);无可用支付方式时渲染
// Zibll 同款 badg 提示,而非禁用按钮。
// 按钮字样对齐会员弹窗默认文案「立即支付」(开通/续费场景一致);无可用支付方式时渲染
// badg 提示,而非禁用按钮。
if (noMethod) {
append(products, node("span", "badg px12 c-yellow-2", "暂时无法支付,请与客服联系"));
} else {
+16 -16
View File
@@ -3703,11 +3703,11 @@ _win.bd.on('click', '.single-pay-tabbar', function () {
/**wp-ajax-action */
_win.bd.on('submit', '[ajax-submit]', function () {
var _this = jQuery(this);
var but = _this.attr('ajax-submit') || '.wp-ajax-submit,[zibajax="submit"]';
var but = _this.attr('ajax-submit') || '.wp-ajax-submit';
return _this.find(but).click(), !1;
});
_win.bd.on('click', '.wp-ajax-submit,[zibajax="submit"]', function () {
_win.bd.on('click', '.wp-ajax-submit', function () {
var _this = jQuery(this);
var confirm_text = _this.attr('data-confirm');
if (confirm_text && !confirm(confirm_text)) {
@@ -3776,7 +3776,7 @@ function jio_ajax(_this, data, success, noty, no_loading) {
notyf(n.msg, ys);
}
_this.attr('disabled', false).html(_text).trigger('zib_ajax.success', n); //完成
_this.attr('disabled', false).html(_text).trigger('jio_ajax.success', n); //完成
jQuery.isFunction(success) && success(n, _this, data);
if (n.hide_modal) {
@@ -3795,7 +3795,7 @@ function jio_ajax(_this, data, success, noty, no_loading) {
}
//AJAX执行完成后自动切换到下一个tab
_win.bd.on('zib_ajax.success', '[next-tab]', function (e, n) {
_win.bd.on('jio_ajax.success', '[next-tab]', function (e, n) {
var _next = jQuery(this).attr('next-tab');
if (_next && n && !n.error) {
jQuery('a[href="#' + _next + '"]').tab('show');
@@ -3940,14 +3940,14 @@ function partners_scroll_init() {
* 然后让 CSS 动画精确按照"一组宽度"进行位移,达成无缝无断层循环
*/
function init(widget) {
if (!widget || widget.dataset.zpsReady === '1') return;
var speed = parseFloat(widget.style.getPropertyValue('--zps-speed')) || 3;
var rows = widget.querySelectorAll('[data-zps-row]');
if (!widget || widget.dataset.jpsReady === '1') return;
var speed = parseFloat(widget.style.getPropertyValue('--jps-speed')) || 3;
var rows = widget.querySelectorAll('[data-jps-row]');
rows.forEach(function (row) {
var track = row.querySelector('[data-zps-track]');
var track = row.querySelector('[data-jps-track]');
if (!track) return;
var seed = track.querySelector('.zps-group');
var seed = track.querySelector('.jps-group');
if (!seed) return;
/**
@@ -3956,7 +3956,7 @@ function partners_scroll_init() {
*/
var setup = function () {
//先移除之前克隆的额外 group,保留最原始的那一组作为基准
var extras = track.querySelectorAll('.zps-group.zps-clone');
var extras = track.querySelectorAll('.jps-group.jps-clone');
extras.forEach(function (el) {
el.remove();
});
@@ -3974,21 +3974,21 @@ function partners_scroll_init() {
//克隆到目标数量(当前只有 1 份种子 group,需要再克隆 copies - 1 份)
for (var i = 1; i < copies; i++) {
var clone = seed.cloneNode(true);
clone.classList.add('zps-clone');
clone.classList.add('jps-clone');
clone.setAttribute('aria-hidden', 'true');
track.appendChild(clone);
}
//精确位移:每次循环移动"一组宽度",保证内容完美对齐
track.style.setProperty('--zps-shift', '-' + groupWidth + 'px');
track.style.setProperty('--jps-shift', '-' + groupWidth + 'px');
//按"每 100px 所需秒数"计算动画时长,让视觉滚动速度与卡片数量无关
var duration = (groupWidth / 100) * speed;
if (duration < 4) duration = 4;
track.style.setProperty('--zps-duration', duration.toFixed(2) + 's');
track.style.setProperty('--jps-duration', duration.toFixed(2) + 's');
//显示出来(避免闪烁)
track.setAttribute('data-zps-ready', '1');
track.setAttribute('data-jps-ready', '1');
};
//初次执行
@@ -4016,11 +4016,11 @@ function partners_scroll_init() {
});
});
widget.dataset.zpsReady = '1';
widget.dataset.jpsReady = '1';
}
function initAll() {
document.querySelectorAll('.zib-partners-scroll').forEach(init);
document.querySelectorAll('.jio-partners-scroll').forEach(init);
}
initAll();
+1 -1
View File
@@ -1 +1 @@
(function($,window2,document2){"use strict";function closeNotyf($element){$element.addClass("notyn-out"),window2.setTimeout(function(){$element.remove()},1e3)}function notyf2(message,type,time,id){var $body=jQuery(document2.body);jQuery(".notyn").length||$body.append('<div class="notyn"></div>'),type=type||"success",type==="error"&&(type="danger"),time=time||5e3,time=time<100?time*1e3:time;var idAttribute=id?' id="'+id+'"':"",$notification=jQuery('<div class="noty1"'+idAttribute+'><div class="notyf '+type+'">'+message+"</div></div>"),shouldClose=!id;id&&jQuery("#"+id).length?(jQuery("#"+id).find(".notyf").removeClass().addClass("notyf "+type).html(message),$notification=jQuery("#"+id),shouldClose=!0):jQuery(".notyn").append($notification),shouldClose&&window2.setTimeout(function(){closeNotyf($notification)},time)}jQuery(document2.body).on("click",".noty1",function(){closeNotyf(jQuery(this))}),window2.notyf=notyf2})(jQuery,window,document),(function(window2){"use strict";var allowedKinds={identity:!0,badges:!0,orders:!0,vip:!0},allowedEvents={click:!0,shell:!0,"first-content":!0,ready:!0,"action-start":!0,"action-end":!0,unauthorized:!0,error:!0},sessions=Object.create(null),sequence=0,maxSessions=100;function normalize(value,fallback){var normalized=String(value||fallback||"").toLowerCase().replace(/[^a-z0-9-]/g,"");return normalized||fallback}function now(){return window2.performance&&typeof window2.performance.now=="function"?window2.performance.now():0}function markName(session,event){return"jio-modal-"+session.kind+"-"+session.id+"-"+event}function emit(session,event){if(!(!window2.performance||typeof window2.performance.mark!="function")){var name=markName(session,event);if(window2.performance.mark(name),session.marks[event]=name,typeof window2.performance.measure=="function"&&session.marks.click&&event!=="click")try{window2.performance.measure("jio-modal-"+session.kind+"-"+session.id+"-click-to-"+event,session.marks.click,name)}catch{}}}function start(kind){var safeKind=normalize(kind,"unknown");allowedKinds[safeKind]||(safeKind="unknown"),sequence+=1;var id=String(sequence),session={id,kind:safeKind,startedAt:now(),marks:Object.create(null)};sessions[id]=session,emit(session,"click");for(var ids=Object.keys(sessions);ids.length>maxSessions;)delete sessions[ids.shift()];return id}function mark(id,event){var session=sessions[String(id||"")],safeEvent=normalize(event,"error");!session||!allowedEvents[safeEvent]||emit(session,safeEvent)}function finish(id){mark(id,"ready")}function fail(id){mark(id,"error")}window2.JioModalTelemetry={start,mark,finish,error:fail}})(window),(function(window2){"use strict";function data(){return window2.jioData||window2.jio||{}}function createIdempotencyKey(){if(window2.crypto&&typeof window2.crypto.randomUUID=="function")return window2.crypto.randomUUID();if(!window2.crypto||typeof window2.crypto.getRandomValues!="function")throw new Error("当前浏览器无法生成安全的操作标识");var bytes=new Uint8Array(16);window2.crypto.getRandomValues(bytes),bytes[6]=bytes[6]&15|64,bytes[8]=bytes[8]&63|128;var hex=Array.prototype.map.call(bytes,function(value){return value.toString(16).padStart(2,"0")}).join("");return hex.slice(0,8)+"-"+hex.slice(8,12)+"-"+hex.slice(12,16)+"-"+hex.slice(16,20)+"-"+hex.slice(20)}function restBase(){var config=data(),raw=config.restUrl||config.apiUrl||config.rest_url||"",siteUrl=config.siteUrl||config.homeUrl||window2.location.origin+"/";return window2.location.protocol==="https:"&&siteUrl.substring(0,5)==="http:"&&(siteUrl="https:"+siteUrl.substring(5)),raw?String(raw).replace(/\/$/,""):String(siteUrl).replace(/\/$/,"")+"/index.php?rest_route=/jio/v1"}function appendQuery(url2,query){if(!query)return url2;var parts=[];return typeof query=="string"?parts=query.replace(/^\?/,"").split("&").filter(Boolean):typeof query=="object"&&Object.keys(query).forEach(function(key){query[key]===void 0||query[key]===null||parts.push(encodeURIComponent(key)+"="+encodeURIComponent(String(query[key])))}),parts.length?url2+(url2.indexOf("?")>=0?"&":"?")+parts.join("&"):url2}function url(path,query){path=String(path||"");var inlineQuery="",queryIndex=path.indexOf("?");if(queryIndex>=0&&(inlineQuery=path.slice(queryIndex+1),path=path.slice(0,queryIndex)),/^https?:\/\//i.test(path))return appendQuery(path,query||inlineQuery);path.charAt(0)!=="/"&&(path="/"+path);var base=restBase(),result=(base.indexOf("rest_route=")>=0,base+path);return appendQuery(result,query||inlineQuery)}function headers(options){var config=data(),source=options&&options.headers||{},result={},nonce=config.restNonce||config.nonce||"";return Object.keys(source).forEach(function(key){result[key]=source[key]}),result.Accept||(result.Accept="application/json, text/html;q=0.9, */*;q=0.8"),nonce&&!result["X-WP-Nonce"]&&(result["X-WP-Nonce"]=nonce),options&&options.body!==void 0&&options.body!==null&&!(window2.FormData&&options.body instanceof window2.FormData)&&!result["Content-Type"]&&(result["CoLine truncated
(function($,window2,document2){"use strict";function closeNotyf($element){$element.addClass("notyn-out"),window2.setTimeout(function(){$element.remove()},1e3)}function notyf2(message,type,time,id){var $body=jQuery(document2.body);jQuery(".notyn").length||$body.append('<div class="notyn"></div>'),type=type||"success",type==="error"&&(type="danger"),time=time||5e3,time=time<100?time*1e3:time;var idAttribute=id?' id="'+id+'"':"",$notification=jQuery('<div class="noty1"'+idAttribute+'><div class="notyf '+type+'">'+message+"</div></div>"),shouldClose=!id;id&&jQuery("#"+id).length?(jQuery("#"+id).find(".notyf").removeClass().addClass("notyf "+type).html(message),$notification=jQuery("#"+id),shouldClose=!0):jQuery(".notyn").append($notification),shouldClose&&window2.setTimeout(function(){closeNotyf($notification)},time)}jQuery(document2.body).on("click",".noty1",function(){closeNotyf(jQuery(this))}),window2.notyf=notyf2})(jQuery,window,document),(function(window2){"use strict";var allowedKinds={identity:!0,badges:!0,orders:!0,vip:!0},allowedEvents={click:!0,shell:!0,"first-content":!0,ready:!0,"action-start":!0,"action-end":!0,unauthorized:!0,error:!0},sessions=Object.create(null),sequence=0,maxSessions=100;function normalize(value,fallback){var normalized=String(value||fallback||"").toLowerCase().replace(/[^a-z0-9-]/g,"");return normalized||fallback}function now(){return window2.performance&&typeof window2.performance.now=="function"?window2.performance.now():0}function markName(session,event){return"jio-modal-"+session.kind+"-"+session.id+"-"+event}function emit(session,event){if(!(!window2.performance||typeof window2.performance.mark!="function")){var name=markName(session,event);if(window2.performance.mark(name),session.marks[event]=name,typeof window2.performance.measure=="function"&&session.marks.click&&event!=="click")try{window2.performance.measure("jio-modal-"+session.kind+"-"+session.id+"-click-to-"+event,session.marks.click,name)}catch{}}}function start(kind){var safeKind=normalize(kind,"unknown");allowedKinds[safeKind]||(safeKind="unknown"),sequence+=1;var id=String(sequence),session={id,kind:safeKind,startedAt:now(),marks:Object.create(null)};sessions[id]=session,emit(session,"click");for(var ids=Object.keys(sessions);ids.length>maxSessions;)delete sessions[ids.shift()];return id}function mark(id,event){var session=sessions[String(id||"")],safeEvent=normalize(event,"error");!session||!allowedEvents[safeEvent]||emit(session,safeEvent)}function finish(id){mark(id,"ready")}function fail(id){mark(id,"error")}window2.JioModalTelemetry={start,mark,finish,error:fail}})(window),(function(window2){"use strict";function data(){return window2.jioData||window2.jio||{}}function createIdempotencyKey(){if(window2.crypto&&typeof window2.crypto.randomUUID=="function")return window2.crypto.randomUUID();if(!window2.crypto||typeof window2.crypto.getRandomValues!="function")throw new Error("当前浏览器无法生成安全的操作标识");var bytes=new Uint8Array(16);window2.crypto.getRandomValues(bytes),bytes[6]=bytes[6]&15|64,bytes[8]=bytes[8]&63|128;var hex=Array.prototype.map.call(bytes,function(value){return value.toString(16).padStart(2,"0")}).join("");return hex.slice(0,8)+"-"+hex.slice(8,12)+"-"+hex.slice(12,16)+"-"+hex.slice(16,20)+"-"+hex.slice(20)}function restBase(){var config=data(),raw=config.restUrl||config.apiUrl||config.rest_url||"",siteUrl=config.siteUrl||config.homeUrl||window2.location.origin+"/";return window2.location.protocol==="https:"&&siteUrl.substring(0,5)==="http:"&&(siteUrl="https:"+siteUrl.substring(5)),raw?String(raw).replace(/\/$/,""):String(siteUrl).replace(/\/$/,"")+"/index.php?rest_route=/jio/v1"}function appendQuery(url2,query){if(!query)return url2;var parts=[];return typeof query=="string"?parts=query.replace(/^\?/,"").split("&").filter(Boolean):typeof query=="object"&&Object.keys(query).forEach(function(key){query[key]===void 0||query[key]===null||parts.push(encodeURIComponent(key)+"="+encodeURIComponent(String(query[key])))}),parts.length?url2+(url2.indexOf("?")>=0?"&":"?")+parts.join("&"):url2}function url(path,query){path=String(path||"");var inlineQuery="",queryIndex=path.indexOf("?");if(queryIndex>=0&&(inlineQuery=path.slice(queryIndex+1),path=path.slice(0,queryIndex)),/^https?:\/\//i.test(path))return appendQuery(path,query||inlineQuery);path.charAt(0)!=="/"&&(path="/"+path);var base=restBase(),result=(base.indexOf("rest_route=")>=0,base+path);return appendQuery(result,query||inlineQuery)}function headers(options){var config=data(),source=options&&options.headers||{},result={},nonce=config.restNonce||config.nonce||"";return Object.keys(source).forEach(function(key){result[key]=source[key]}),result.Accept||(result.Accept="application/json, text/html;q=0.9, */*;q=0.8"),nonce&&!result["X-WP-Nonce"]&&(result["X-WP-Nonce"]=nonce),options&&options.body!==void 0&&options.body!==null&&!(window2.FormData&&options.body instanceof window2.FormData)&&!result["Content-Type"]&&(result["CoLine truncated
+1 -1
View File
@@ -82,7 +82,7 @@
box.appendChild(titleBody);
}
var widget = document.createElement('div');
widget.className = 'zib-widget';
widget.className = 'jio-widget-box';
var nav = document.createElement('div');
nav.className = 'posts-nav-lists scroll-y mini-scrollbar list-unstyled';
var list = document.createElement('ul');
+21 -21
View File
@@ -1,20 +1,20 @@
/**
* Jio User Ban — 前台“禁封/解封用户”弹窗
*
* 1:1 复刻参考主题 Zibll 前台禁封能力:
* - zib_get_edit_user_ban_link → [data-jio-ban] 委托入口(三点菜单内)
* - zib_get_set_user_ban_modal → REST /user-ban/modal 拉取弹窗内容
* - zib_ajax_set_user_ban → REST /user-ban/set 提交
* - zib_get_ban_info_modal → [data-jio-ban-info](查看禁封状态)
* - zib_get_user_ban_appeal_modal → [data-jio-ban-appeal](禁封申诉)
* - zib_get_ban_log_modal → [data-jio-ban-log](禁封记录)
* - zib_user_ban_appeal(wp-ajax) → admin-ajax jio_ban_appeal_submit 提交
* 前台用户禁封能力:
* - 编辑禁封链接 → [data-jio-ban] 委托入口(三点菜单内)
* - 禁封弹窗内容 → REST /user-ban/modal 拉取
* - 禁封提交 → REST /user-ban/set
* - 查看禁封状态弹窗 → [data-jio-ban-info]
* - 禁封申诉弹窗 → [data-jio-ban-appeal]
* - 禁封记录弹窗 → [data-jio-ban-log]
* - 禁封申诉提交 → admin-ajax jio_ban_appeal_submit
*
* 弹窗经 JioModalRuntime.openRemote 打开(与参考主题 refresh_modal 每次刷新
* 同语义):桌面 600px 宽(参考主题未传 data-class → Bootstrap .modal-dialog
* 弹窗经 JioModalRuntime.openRemote 打开(每次刷新同语义):桌面 600px 宽
* (未传 data-class → Bootstrap .modal-dialog
* 默认宽 600px)/ min-height 360px(data-height=360 → .modal-content 初始高度),
* 移动端底部抽屉(mobileBottom)。提交成功语义与参考主题 zib_ajax_set_user_ban
* 返回值一致:禁封 → reload:true(整页刷新),解封 → hide_modal:true(仅关闭弹窗)。
* 移动端底部抽屉(mobileBottom)。提交成功语义:
* 禁封 → reload:true(整页刷新),解封 → hide_modal:true(仅关闭弹窗)。
*
* @package Jio
*/
@@ -33,7 +33,7 @@
|| '/wp-admin/admin-ajax.php';
var MODAL_HEIGHT = 360;
// 参考主题 data_class='modal-mini' + data-height=240:400px 宽、初始高 240。
// data_class='modal-mini' + data-height=240:400px 宽、初始高 240。
var MINI_MODAL_HEIGHT = 240;
function ajaxUrl() {
@@ -64,7 +64,7 @@
});
}
// 查看禁封状态弹窗(参考主题 zib_get_ban_info_modal / user_ban_info_modal)。
// 查看禁封状态弹窗。
function openInfoModal(userId) {
openRemoteModal({
url: API_ROOT + '/user-ban/info-modal',
@@ -78,7 +78,7 @@
});
}
// 禁封申诉弹窗(参考主题 zib_get_user_ban_appeal_modal;表单走 admin-ajax)。
// 禁封申诉弹窗(表单走 admin-ajax)。
function openAppealModal(userId) {
openRemoteModal({
url: API_ROOT + '/user-ban/appeal-modal',
@@ -95,7 +95,7 @@
});
}
// 禁封记录弹窗(参考主题 zib_get_ban_log_modal)。
// 禁封记录弹窗。
function openLogModal(userId) {
openRemoteModal({
url: API_ROOT + '/user-ban/log-modal',
@@ -114,7 +114,7 @@
if (!form || form.dataset.jioAppealBound === '1') return;
form.dataset.jioAppealBound = '1';
// autoHeight 仅对显式声明 autoHeight/maxHeight 的文本框生效:
// 申诉说明框(1:1 参考主题)为 rows=3 自然高度 + 容器滚动,
// 申诉说明框为 rows=3 自然高度 + 容器滚动,
// 无 maxHeight 时执行 grow 会被压成 0px。
Array.prototype.forEach.call(
form.querySelectorAll('textarea[autoHeight], textarea[maxHeight]'),
@@ -219,7 +219,7 @@
.then(function (result) {
if (result && result.success) {
notyf(result.message || '操作成功', 'success');
// 参考主题 zib_ajax_set_user_ban 返回值语义:
// 提交返回值语义:
// 禁封 → reload:true(整页刷新,入口按钮状态随页面重渲染);
// 解封 → hide_modal:true(仅关闭弹窗)。
if (window.JioModalRuntime && typeof window.JioModalRuntime.close === 'function') {
@@ -242,9 +242,9 @@
}
function bindAutoHeight(textarea) {
// 1:1 复刻参考主题 textarea[autoHeight] 行为(input/focus 触发):
// textarea[autoHeight] 行为(input/focus 触发):
// 高度 = scrollHeight + 上下边框;超过 maxHeight 属性则锁定 maxHeight 并
// 打开自身滚动条(参考主题 main.js autoHeight 同语义)。
// 打开自身滚动条(main.js autoHeight 同语义)。
if (!textarea || textarea.dataset.jioAutoHeight === '1') return;
textarea.dataset.jioAutoHeight = '1';
var grow = function () {
@@ -291,7 +291,7 @@
}
/**
* 收起封面三点菜单面板(参考主题 author_header_drop_lists 菜单项点击后
* 收起封面三点菜单面板(作者头部下拉菜单项点击后
* 不自动收起,需手动关闭;评论区与文章作者下拉由各自脚本点击项后自动收起)。
*/
function closeCoverMenu(trigger) {
+1 -1
View File
@@ -1,4 +1,4 @@
/* Sidebar toolbar: per-area export / import / template import (zibll WIE flow). */
/* Sidebar toolbar: per-area export / import / template import. */
(function ($) {
'use strict';
+13 -13
View File
@@ -55,18 +55,18 @@
.jio-widget-quote .yiyan .en { font-size: .9em; opacity: .8; }
.jio-widget-quote.is-loading { opacity: .65; }
/* The Jio base stylesheet already carries Zibll's icon-card and utility rules.
/* The Jio base stylesheet already carries the icon-card and utility rules.
* Restore the one renamed primitive used verbatim by these two widget renderers. */
.zib-widget { clear:both; margin-bottom:20px; padding:15px; border-radius:var(--main-radius,8px); background:var(--main-bg-color,#fff); box-shadow:0 0 10px var(--main-shadow,rgba(116,116,116,.08)); }
.zib-widget.padding-10 { padding:10px; }
.zib-widget.nobottom.notop { padding-top:0; padding-bottom:0; }
.zib-widget.posts-mini-lists { padding:5px; }
.zib-widget.posts-mini-lists .relative > .tab-nav-theme ~ .scroll-x-prev,
.zib-widget.posts-mini-lists .relative > .tab-nav-theme ~ .scroll-x-next { top:10px; }
.jio-widget-box { clear:both; margin-bottom:20px; padding:15px; border-radius:var(--main-radius,8px); background:var(--main-bg-color,#fff); box-shadow:0 0 10px var(--main-shadow,rgba(116,116,116,.08)); }
.jio-widget-box.padding-10 { padding:10px; }
.jio-widget-box.nobottom.notop { padding-top:0; padding-bottom:0; }
.jio-widget-box.posts-mini-lists { padding:5px; }
.jio-widget-box.posts-mini-lists .relative > .tab-nav-theme ~ .scroll-x-prev,
.jio-widget-box.posts-mini-lists .relative > .tab-nav-theme ~ .scroll-x-next { top:10px; }
.zib-widget-wrap { padding:var(--jio-widget-space-top,0) var(--jio-widget-space-right,0) var(--jio-widget-space-bottom,0) var(--jio-widget-space-left,0); background-color:var(--jio-widget-bg-light,transparent); background-image:var(--jio-widget-bg-image-light,none); background-position:center; background-size:cover; }
.dark-theme .zib-widget-wrap, [data-theme="dark"] .zib-widget-wrap { background-color:var(--jio-widget-bg-dark,var(--jio-widget-bg-light,transparent)); background-image:var(--jio-widget-bg-image-dark,var(--jio-widget-bg-image-light,none)); }
.zib-widget-wrap .widget-container { position:relative; }
.jio-widget-box-wrap { padding:var(--jio-widget-space-top,0) var(--jio-widget-space-right,0) var(--jio-widget-space-bottom,0) var(--jio-widget-space-left,0); background-color:var(--jio-widget-bg-light,transparent); background-image:var(--jio-widget-bg-image-light,none); background-position:center; background-size:cover; }
.dark-theme .jio-widget-box-wrap, [data-theme="dark"] .jio-widget-box-wrap { background-color:var(--jio-widget-bg-dark,var(--jio-widget-bg-light,transparent)); background-image:var(--jio-widget-bg-image-dark,var(--jio-widget-bg-image-light,none)); }
.jio-widget-box-wrap .widget-container { position:relative; }
.jio-user-widget-wrap :where(a, button, input, select, textarea, [tabindex]):focus-visible,
.jio-tab-posts-wrap :where(a, button, input, select, textarea, [tabindex]):focus-visible,
.jio-posts-wrap :where(a, button, input, select, textarea, [tabindex]):focus-visible { outline:3px solid var(--focus-color,#ff5473) !important; outline-offset:3px; }
@@ -74,12 +74,12 @@
.dark-theme .jio-posts-wrap :where(a, button, input, select, textarea, [tabindex]):focus-visible,
[data-theme="dark"] :is(.jio-user-widget-wrap, .jio-tab-posts-wrap, .jio-posts-wrap) :where(a, button, input, select, textarea, [tabindex]):focus-visible { outline-color:#ffd166 !important; }
.user-card.zib-widget { padding:0; overflow:hidden; }
.user-card.jio-widget-box { padding:0; overflow:hidden; }
.user-card.widget .user-info > .text-center > p:not(.muted-color) { white-space:nowrap; }
.user-card.widget .user-info > .text-center > p:not(.muted-color) .but { white-space:nowrap; }
@media (max-width:767px) {
.zib-widget-wrap { padding:var(--jio-widget-space-m-top,0) var(--jio-widget-space-m-right,0) var(--jio-widget-space-m-bottom,0) var(--jio-widget-space-m-left,0); }
.jio-widget-box-wrap { padding:var(--jio-widget-space-m-top,0) var(--jio-widget-space-m-right,0) var(--jio-widget-space-m-bottom,0) var(--jio-widget-space-m-left,0); }
}
.jio-widget-video { position: relative; overflow: hidden; border-radius: var(--jio-widget-radius); background: #000; aspect-ratio: 16 / 9; }
@@ -155,7 +155,7 @@
}
.jio-widget--animate { animation: jio-widget-fade .55s both; }.jio-widget--animate-slideup { animation-name: jio-widget-slideup; }.jio-widget--animate-slidedown { animation-name: jio-widget-slidedown; }.jio-widget--animate-slideright { animation-name: jio-widget-slideright; }.jio-widget--animate-slideleft { animation-name: jio-widget-slideleft; }.jio-widget--animate-zoomin { animation-name: jio-widget-zoomin; }.jio-widget--animate-zoomout { animation-name: jio-widget-zoomout; }.jio-widget--animate-repeat { animation-iteration-count: infinite; animation-duration: 2s; }
/* Zibll modern widget contracts */
/* Modern widget contracts */
.widget-tab-post .tab-content > .tab-pane { display: none; }
.widget-tab-post .tab-content > .tab-pane.active { display: block; }
.widget-tab-post, .term-aggregation { line-height:1.42857143; }
+2 -2
View File
@@ -333,10 +333,10 @@
}
/* 幻灯片加图文视频卡片:以左侧幻灯片实际高度重算右侧卡片比例。
* 合作伙伴滚动由运行时 main.js 初始化(.zib-partners-scroll 唯一所有者)。 */
* 合作伙伴滚动由运行时 main.js 初始化(.jio-partners-scroll 唯一所有者)。 */
function measureSliderGraphic(widget) {
if (once(widget, 'Combo')) return;
var slider = widget.querySelector('.slider-col .zib-slider') || widget.querySelector('.slider-col');
var slider = widget.querySelector('.slider-col .jio-slider-box') || widget.querySelector('.slider-col');
var covers = widget.querySelector('.cover-col');
if (!slider || !covers) return;
var row = Number(widget.dataset.row || 2);