Files
kate522andClaude Opus 5 35bb96e82f refactor: rename the theme brand and every identifier from AKSRT to Jio
Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.

Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
  cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
  window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)

Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
  so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
  (dropped 3 stale entries, added the 17 missing ones)

Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
  get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
  when it is empty

Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.

Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-11-01 20:05:04 +08:00

334 lines
7.4 KiB
CSS

/* ============================================================
* 9. 公告跑马灯 Widget
* ============================================================ */
.jio-announcement {
position: relative;
overflow: hidden;
padding: 10px 12px;
background: var(--surface-2, #F4F5F7);
border-radius: var(--radius, 10px);
}
.jio-announcement__icon {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: var(--color-primary, var(--color-primary));
font-size: 14px;
z-index: 1;
}
.jio-announcement__track {
margin-left: 24px;
overflow: hidden;
height: 20px;
}
.jio-announcement__list {
margin: 0;
padding: 0;
list-style: none;
animation: jio-marquee 10s linear infinite;
}
.jio-announcement__item {
height: 20px;
line-height: 20px;
font-size: 13px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.jio-announcement__item a {
color: var(--color-ink-2);
text-decoration: none;
}
.jio-announcement__item a:hover {
color: var(--color-primary, var(--color-primary));
}
@keyframes jio-marquee {
0% { transform: translateY(0); }
100% { transform: translateY(-100%); }
}
.jio-announcement:hover .jio-announcement__list {
animation-play-state: paused;
}
/* ============================================================
* 11. 滚动触发动画初始状态
* ============================================================ */
[data-jio-animate] {
will-change: opacity, transform;
}
/* ============================================================
* 12. 粘性侧栏
* ============================================================ */
[data-jio-sticky] {
will-change: transform;
}
/* ============================================================
* 13. 用户排行榜 Widget
* ============================================================ */
.jio-user-ranking {
margin: 0;
padding: 0;
list-style: none;
}
.jio-user-ranking__item {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 0;
border-bottom: 1px solid var(--color-line-soft, #F0F1F3);
}
.jio-user-ranking__item:last-child {
border-bottom: none;
}
.jio-user-ranking__rank {
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
border-radius: 6px;
background: var(--surface-2, #F4F5F7);
color: var(--color-ink-3);
font-size: 12px;
font-weight: 600;
flex-shrink: 0;
}
.jio-user-ranking__item--top:nth-child(1) .jio-user-ranking__rank {
background: #FFD700;
color: #fff;
}
.jio-user-ranking__item--top:nth-child(2) .jio-user-ranking__rank {
background: #C0C0C0;
color: #fff;
}
.jio-user-ranking__item--top:nth-child(3) .jio-user-ranking__rank {
background: #CD7F32;
color: #fff;
}
.jio-user-ranking__avatar {
flex-shrink: 0;
}
.jio-user-ranking__avatar img {
width: 36px;
height: 36px;
border-radius: 50%;
object-fit: cover;
}
.jio-user-ranking__name {
flex: 1;
min-width: 0;
font-size: 14px;
color: var(--color-ink);
text-decoration: none;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.jio-user-ranking__name:hover {
color: var(--color-primary, var(--color-primary));
}
.jio-user-ranking__value {
font-size: 12px;
color: var(--color-ink-4, #8A8F98);
white-space: nowrap;
}
/* ============================================================
* 14. 图文封面卡片 Widget
* ============================================================ */
.jio-cover-cards {
display: grid;
grid-template-columns: repeat(var(--cols, 2), 1fr);
gap: 12px;
}
.jio-cover-card {
position: relative;
border-radius: var(--radius-lg, 8px);
overflow: hidden;
min-height: 160px;
display: flex;
align-items: flex-end;
transition: transform 0.3s, box-shadow 0.3s;
}
.jio-cover-card:hover {
transform: translateY(-3px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}
.jio-cover-card__bg {
position: absolute;
inset: 0;
}
.jio-cover-card__bg img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s;
}
.jio-cover-card:hover .jio-cover-card__bg img {
transform: scale(1.02);
}
.jio-cover-card__overlay {
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(0,0,0,0) 30%, rgba(0,0,0,0.6) 100%);
}
.jio-cover-card__content {
position: relative;
z-index: 1;
padding: 16px;
width: 100%;
}
.jio-cover-card__link {
text-decoration: none;
color: inherit;
display: block;
}
.jio-cover-card__title {
margin: 0 0 4px;
font-size: 16px;
font-weight: 600;
color: #fff;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
}
.jio-cover-card__desc {
margin: 0;
font-size: 13px;
color: rgba(255, 255, 255, 0.85);
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* ============================================================
* 15. 视频播放器 Widget
* ============================================================ */
.jio-video-widget {
position: relative;
width: 100%;
overflow: hidden;
border-radius: var(--radius, 10px);
background: #000;
}
.jio-video-widget iframe,
.jio-video-widget video {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
/* ============================================================
* 16. 表单输入浮动标签
* ============================================================ */
.jio-float-label {
position: relative;
}
.jio-float-label__input {
width: 100%;
padding: 14px 12px 6px;
font-size: 14px;
border: 1px solid var(--color-line);
border-radius: var(--radius, 10px);
background: var(--surface-1, #fff);
color: var(--color-ink);
transition: border-color 0.2s;
}
.jio-float-label__input:focus {
outline: none;
border-color: var(--color-primary, var(--color-primary));
}
.jio-float-label__label {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
font-size: 14px;
color: var(--color-ink-4, #8A8F98);
pointer-events: none;
transition: all 0.2s ease;
}
.jio-float-label__input:focus + .jio-float-label__label,
.jio-float-label__input:not(:placeholder-shown) + .jio-float-label__label {
top: 8px;
transform: translateY(0);
font-size: 11px;
color: var(--color-primary, var(--color-primary));
}
/* ============================================================
* 17. 视差滚动层
* ============================================================ */
[data-jio-parallax] {
will-change: transform;
transition: transform 0.1s linear;
}
/* ============================================================
* 20. 用户等级进度条
* ============================================================ */
.jio-level-bar {
position: relative;
height: 8px;
background: var(--surface-2, #F4F5F7);
border-radius: 4px;
overflow: hidden;
}
.jio-level-bar__fill {
height: 100%;
background: linear-gradient(90deg, var(--color-primary, var(--color-primary)), var(--color-primary-active, #5A85BD));
border-radius: 4px;
transition: width 0.5s ease;
}
.jio-level-bar__label {
position: absolute;
right: 0;
top: -18px;
font-size: 11px;
color: var(--color-ink-4, #8A8F98);
}