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

556 lines
19 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Jio 原生后台运营页共享 UI(支付中心 / 用户子菜单)。
*
* 只在 NativeUi::SLUGS 列出的页面入队,全部规则限定在 .jio-native 下,
* 不影响 WP 其它后台页。色板与圆角对齐 SPA 的 Naive UI 主题(App.vue)。
* 标记由 src/Admin/Native/NativeUi.php 输出。
*/
.jio-native {
--an-primary: #18a058;
--an-primary-hover: #36ad6a;
--an-primary-soft: #e8f6ee;
--an-info: #2080f0;
--an-warning: #f0a020;
--an-danger: #d03050;
--an-text: #1f2329;
--an-text-2: #4e5969;
--an-muted: #86909c;
--an-border: #e5e6eb;
--an-border-soft: #f0f1f4;
--an-bg-soft: #f7f8fa;
--an-card: #fff;
--an-radius: 12px;
--an-radius-sm: 8px;
--an-shadow: 0 1px 2px rgba(15, 23, 42, .04), 0 4px 16px rgba(15, 23, 42, .04);
--an-shadow-hover: 0 2px 4px rgba(15, 23, 42, .06), 0 8px 24px rgba(15, 23, 42, .08);
margin-right: 20px;
color: var(--an-text-2);
font-size: 13px;
}
/* ---------- 页头 ---------- */
.jio-native-header {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 12px 16px;
margin: 18px 0 16px;
}
.jio-native-header__main { min-width: 0; }
.jio-native .jio-native-header__title {
display: flex;
align-items: center;
gap: 10px;
margin: 0;
padding: 0;
color: var(--an-text);
font-size: 22px;
font-weight: 600;
line-height: 1.3;
}
.jio-native-header__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
color: var(--an-primary);
background: var(--an-primary-soft);
border-radius: 10px;
}
.jio-native-header__icon.dashicons:before { font-size: 20px; line-height: 36px; }
.jio-native-header__icon.dashicons { width: 36px; height: 36px; }
.jio-native-header__desc { margin: 6px 0 0; color: var(--an-muted); }
.jio-native-header__actions { display: flex; flex-wrap: wrap; gap: 8px; }
/* WP 把 .notice 挪到首个 h1/h2 后;保持与卡片同宽同圆角。 */
.jio-native .notice { margin: 0 0 16px; border-radius: var(--an-radius-sm); box-shadow: var(--an-shadow); }
/* ---------- 标签导航(.subsubsub / .nav-tab-wrapper / .jio-native-tabs) ---------- */
.jio-native .subsubsub,
.jio-native-tabs {
display: inline-flex;
flex-wrap: wrap;
float: none;
gap: 4px;
margin: 0 0 16px;
padding: 4px;
color: var(--an-muted);
background: var(--an-card);
border-radius: 10px;
box-shadow: var(--an-shadow);
font-size: 13px;
}
.jio-native .subsubsub li { margin: 0; font-size: 0; }
.jio-native .subsubsub li > * { font-size: 13px; }
.jio-native .subsubsub a,
.jio-native-tabs a {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
color: var(--an-text-2);
border-radius: 7px;
text-decoration: none;
line-height: 1.4;
transition: background .15s, color .15s;
}
.jio-native .subsubsub a:hover,
.jio-native-tabs a:hover { color: var(--an-primary); background: var(--an-bg-soft); }
.jio-native .subsubsub a.current,
.jio-native-tabs a.is-active,
.jio-native-tabs a[aria-current="page"] {
color: var(--an-primary);
background: var(--an-primary-soft);
font-weight: 600;
}
.jio-native .subsubsub a .count,
.jio-native-tabs .count {
padding: 0 6px;
color: inherit;
font-size: 12px;
font-weight: 400;
background: rgba(0, 0, 0, .05);
border-radius: 999px;
}
.jio-native .nav-tab-wrapper {
display: flex;
gap: 4px;
margin: 0 0 16px;
padding: 0;
border-bottom: 1px solid var(--an-border);
}
.jio-native .nav-tab {
margin: 0 0 -1px;
padding: 8px 14px;
color: var(--an-text-2);
background: transparent;
border: 0;
border-bottom: 2px solid transparent;
font-weight: 500;
}
.jio-native .nav-tab:hover { color: var(--an-primary); background: transparent; }
.jio-native .nav-tab-active,
.jio-native .nav-tab-active:hover { color: var(--an-primary); border-bottom-color: var(--an-primary); background: transparent; }
.jio-native-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; }
.jio-native-toolbar > .subsubsub,
.jio-native-toolbar > .jio-native-tabs { margin-bottom: 0; }
/* ---------- 统计卡 ---------- */
.jio-native-stats {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 12px;
margin: 0 0 16px;
}
.jio-native-stat {
--an-tone: var(--an-primary);
position: relative;
display: flex;
flex-direction: column;
gap: 6px;
min-width: 0;
padding: 16px 18px;
color: var(--an-text-2);
background: var(--an-card);
border-radius: var(--an-radius);
box-shadow: var(--an-shadow);
text-decoration: none;
overflow: hidden;
transition: box-shadow .2s, transform .2s;
}
.jio-native-stat::after {
content: "";
position: absolute;
top: 0;
right: 0;
width: 72px;
height: 72px;
background: radial-gradient(circle at top right, color-mix(in srgb, var(--an-tone) 16%, transparent), transparent 70%);
pointer-events: none;
}
a.jio-native-stat:hover,
a.jio-native-stat:focus { color: var(--an-text-2); box-shadow: var(--an-shadow-hover); transform: translateY(-1px); }
a.jio-native-stat:focus { outline: 2px solid color-mix(in srgb, var(--an-tone) 40%, transparent); outline-offset: 1px; }
.jio-native-stat__label { display: flex; align-items: center; gap: 6px; color: var(--an-muted); font-size: 13px; }
.jio-native-stat__label .dashicons { width: 16px; height: 16px; color: var(--an-tone); font-size: 16px; }
.jio-native-stat__value {
color: var(--an-text);
font-size: 26px;
font-weight: 600;
line-height: 1.2;
font-variant-numeric: tabular-nums;
word-break: break-all;
}
.jio-native-stat__unit { margin-right: 2px; color: var(--an-muted); font-size: 14px; font-weight: 400; }
.jio-native-stat__hint { color: var(--an-muted); font-size: 12px; }
.jio-native-stat--success { --an-tone: var(--an-primary); }
.jio-native-stat--info { --an-tone: var(--an-info); }
.jio-native-stat--warning { --an-tone: var(--an-warning); }
.jio-native-stat--danger { --an-tone: var(--an-danger); }
.jio-native-stat--neutral { --an-tone: var(--an-muted); }
.jio-native-stat--warning .jio-native-stat__value { color: #c27c0e; }
.jio-native-stat--danger .jio-native-stat__value { color: var(--an-danger); }
/* ---------- 卡片 ---------- */
.jio-native-card {
margin: 0 0 16px;
background: var(--an-card);
border-radius: var(--an-radius);
box-shadow: var(--an-shadow);
}
.jio-native-card__head {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 8px 12px;
padding: 14px 20px;
border-bottom: 1px solid var(--an-border-soft);
}
.jio-native .jio-native-card__title {
position: relative;
margin: 0;
padding: 0 0 0 12px;
color: var(--an-text);
font-size: 15px;
font-weight: 600;
line-height: 1.4;
}
.jio-native-card__title::before {
content: "";
position: absolute;
top: 3px;
bottom: 3px;
left: 0;
width: 4px;
background: var(--an-primary);
border-radius: 4px;
}
.jio-native-card__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.jio-native-card__body { padding: 16px 20px; }
.jio-native-card__body > :first-child { margin-top: 0; }
.jio-native-card__body > :last-child { margin-bottom: 0; }
.jio-native-card--flush > .jio-native-card__body { padding: 0; }
.jio-native-card__foot {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 12px 20px;
border-top: 1px solid var(--an-border-soft);
}
/* 折叠卡片:<details class="jio-native-card jio-native-collapse"><summary>… */
.jio-native-collapse > summary {
display: flex;
align-items: center;
gap: 8px;
padding: 14px 20px;
color: var(--an-text);
font-size: 14px;
font-weight: 600;
cursor: pointer;
list-style: none;
}
.jio-native-collapse > summary::-webkit-details-marker { display: none; }
.jio-native-collapse > summary::after {
content: "\f347";
margin-left: auto;
color: var(--an-muted);
font: normal 16px/1 dashicons;
transition: transform .2s;
}
.jio-native-collapse[open] > summary { border-bottom: 1px solid var(--an-border-soft); }
.jio-native-collapse[open] > summary::after { transform: rotate(180deg); }
.jio-native-collapse > summary .dashicons { color: var(--an-primary); }
/* ---------- 筛选栏 ---------- */
.jio-native-filters {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
margin: 0;
}
.jio-native-filters label { display: inline-flex; align-items: center; gap: 6px; color: var(--an-muted); }
.jio-native-filters input[type="search"] { min-width: 220px; }
.jio-native-filters__spacer { flex: 1 1 auto; }
.jio-native-card__body > .jio-native-filters + .jio-native-filters { margin-top: 10px; }
/* ---------- 表单 ---------- */
.jio-native input[type="text"],
.jio-native input[type="search"],
.jio-native input[type="number"],
.jio-native input[type="date"],
.jio-native input[type="datetime-local"],
.jio-native input[type="email"],
.jio-native input[type="url"],
.jio-native input[type="password"],
.jio-native select,
.jio-native textarea {
min-height: 32px;
border-color: var(--an-border);
border-radius: var(--an-radius-sm);
box-shadow: none;
}
.jio-native select { padding-right: 28px; }
.jio-native input:focus,
.jio-native select:focus,
.jio-native textarea:focus {
border-color: var(--an-primary);
box-shadow: 0 0 0 2px color-mix(in srgb, var(--an-primary) 20%, transparent);
outline: 0;
}
.jio-native-form-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 14px 16px;
}
.jio-native-form-grid .is-wide { grid-column: 1 / -1; }
.jio-native-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.jio-native-field__label { color: var(--an-text); font-weight: 500; }
.jio-native-field__hint { color: var(--an-muted); font-size: 12px; }
.jio-native-field input,
.jio-native-field select,
.jio-native-field textarea { width: 100%; max-width: none; }
.jio-native-form-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 16px; }
.jio-native .form-table th { color: var(--an-text); font-weight: 500; }
.jio-native .form-table td,
.jio-native .form-table th { padding-top: 12px; padding-bottom: 12px; }
/* ---------- 按钮 ---------- */
.jio-native .button,
.jio-native .page-title-action {
min-height: 32px;
padding: 0 14px;
color: var(--an-text-2);
line-height: 30px;
background: #fff;
border-color: var(--an-border);
border-radius: var(--an-radius-sm);
transition: border-color .15s, color .15s, background .15s;
}
.jio-native .page-title-action { top: 0; display: inline-flex; align-items: center; }
.jio-native .button:hover,
.jio-native .button:focus,
.jio-native .page-title-action:hover {
color: var(--an-primary);
background: #fff;
border-color: var(--an-primary);
box-shadow: none;
}
.jio-native .button-primary,
.jio-native .button.button-primary {
color: #fff;
background: var(--an-primary);
border-color: var(--an-primary);
}
.jio-native .button-primary:hover,
.jio-native .button-primary:focus,
.jio-native .button.button-primary:hover {
color: #fff;
background: var(--an-primary-hover);
border-color: var(--an-primary-hover);
}
.jio-native .button-small,
.jio-native .button.button-small { min-height: 26px; padding: 0 10px; font-size: 12px; line-height: 24px; }
.jio-native .button-link-delete,
.jio-native .button.is-danger { color: var(--an-danger); }
.jio-native .button.is-danger:hover { color: #fff; background: var(--an-danger); border-color: var(--an-danger); }
.jio-native .button .dashicons { width: 16px; height: 16px; margin: 0 4px 0 -2px; font-size: 16px; line-height: inherit; vertical-align: -1px; }
.jio-native .submit { margin: 0; padding: 0; }
/* 批量操作行:下拉与「应用」按钮锁定同一高度与字号。
WP 核心给 select 14px/line-height:2、给 .button 13px,且 782px 以下再把两者各自放大,
只设 min-height 时两者会因字号、行高和基线对齐不同而错位,这里显式给定。 */
.jio-native-bulk { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.jio-native-bulk select,
.jio-native-bulk .button {
box-sizing: border-box;
height: 32px;
min-height: 32px;
margin: 0;
font-size: 13px;
line-height: 30px;
vertical-align: middle;
}
.jio-native-bulk select { width: auto; max-width: 12.5rem; }
/* ---------- 表格 ---------- */
.jio-native-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.jio-native .widefat,
.jio-native .wp-list-table {
border: 0;
border-radius: 0;
box-shadow: none;
}
.jio-native .jio-native-card .widefat { background: transparent; }
.jio-native .widefat thead th,
.jio-native .widefat thead td,
.jio-native .widefat tfoot th,
.jio-native .widefat tfoot td {
padding: 10px 12px;
color: var(--an-muted);
font-size: 12px;
font-weight: 500;
background: var(--an-bg-soft);
border-bottom: 1px solid var(--an-border-soft);
}
.jio-native .widefat thead th a { color: var(--an-muted); }
.jio-native .widefat td,
.jio-native .widefat tbody th {
padding: 12px;
color: var(--an-text-2);
vertical-align: middle;
border-bottom: 1px solid var(--an-border-soft);
}
.jio-native .widefat tbody tr:last-child > td,
.jio-native .widefat tbody tr:last-child > th { border-bottom: 0; }
.jio-native .striped > tbody > :nth-child(odd) { background: transparent; }
.jio-native .widefat tbody tr { transition: background .15s; }
.jio-native .widefat tbody tr:hover { background: #fafbfc; }
.jio-native .widefat .check-column { width: 2.4em; padding: 12px 0 12px 12px; vertical-align: middle; }
.jio-native .widefat thead .check-column { padding-top: 10px; padding-bottom: 10px; }
.jio-native .widefat .check-column input { margin: 0; }
.jio-native .widefat code,
.jio-native-mono {
padding: 1px 6px;
color: var(--an-text);
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 12px;
background: var(--an-bg-soft);
border-radius: 4px;
}
.jio-native .row-actions { color: var(--an-muted); }
.jio-native .row-title,
.jio-native .widefat strong { color: var(--an-text); }
.jio-native-card > .jio-native-card__body > .widefat:first-child thead th:first-child,
.jio-native-card--flush .widefat thead > tr > :first-child { padding-left: 20px; }
.jio-native-card--flush .widefat tbody > tr > :first-child { padding-left: 20px; }
.jio-native-card--flush .widefat thead > tr > :last-child,
.jio-native-card--flush .widefat tbody > tr > :last-child { padding-right: 20px; }
.jio-native-card--flush .widefat thead th:first-child,
.jio-native-card--flush .widefat thead td:first-child { border-top-left-radius: 0; }
/* 行内操作表单:单元格里的一组小控件 */
.jio-native-inline {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
margin: 0;
}
.jio-native-inline + .jio-native-inline { margin-top: 6px; }
.jio-native-inline input[type="text"] { min-width: 0; width: 140px; }
/* 用户单元格:头像 + 名称 + 次要信息 */
.jio-native-user { display: inline-flex; align-items: center; gap: 8px; min-width: 0; color: var(--an-text); text-decoration: none; }
.jio-native-user img { flex: none; border-radius: 50%; }
.jio-native-user__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jio-native-user__meta { display: block; color: var(--an-muted); font-size: 12px; }
/* ---------- 徽标 ---------- */
.jio-native-badge {
--an-tone: var(--an-muted);
display: inline-flex;
align-items: center;
gap: 5px;
padding: 1px 8px;
color: var(--an-tone);
font-size: 12px;
font-weight: 500;
line-height: 20px;
white-space: nowrap;
background: color-mix(in srgb, var(--an-tone) 10%, #fff);
border-radius: 999px;
}
.jio-native-badge.has-dot::before {
content: "";
width: 6px;
height: 6px;
background: currentColor;
border-radius: 50%;
}
.jio-native-badge--success { --an-tone: var(--an-primary); }
.jio-native-badge--info { --an-tone: var(--an-info); }
.jio-native-badge--warning { --an-tone: #c27c0e; }
.jio-native-badge--danger { --an-tone: var(--an-danger); }
.jio-native-badge--neutral { --an-tone: #6b7785; }
.jio-native-badge--primary { --an-tone: #7c4dff; }
/* ---------- 空状态 / 提示 ---------- */
.jio-native-empty {
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
padding: 40px 16px;
color: var(--an-muted);
text-align: center;
}
.jio-native-empty .dashicons { width: 40px; height: 40px; color: #c9cdd4; font-size: 40px; }
.jio-native-empty__title { color: var(--an-text-2); font-size: 14px; font-weight: 500; }
.jio-native .widefat td.jio-native-empty-cell { padding: 0; }
.jio-native-muted,
.jio-native .description { color: var(--an-muted); }
.jio-native-text--success { color: var(--an-primary); }
.jio-native-text--info { color: var(--an-info); }
.jio-native-text--warning { color: #c27c0e; }
.jio-native-text--danger { color: var(--an-danger); }
.jio-native-amount { color: var(--an-text); font-weight: 600; font-variant-numeric: tabular-nums; }
.jio-native-amount.is-positive { color: var(--an-primary); }
.jio-native-amount.is-negative { color: var(--an-danger); }
.jio-native-callout {
margin: 0 0 16px;
padding: 12px 16px;
color: var(--an-text-2);
background: var(--an-bg-soft);
border-left: 3px solid var(--an-info);
border-radius: var(--an-radius-sm);
}
.jio-native-callout.is-warning { background: #fff8eb; border-left-color: var(--an-warning); }
.jio-native-callout.is-danger { background: #fdf0f2; border-left-color: var(--an-danger); }
/* ---------- 分页条(AdminListPagination / paginate_links) ---------- */
.jio-native .tablenav { height: auto; margin: 0; padding: 12px 20px; }
.jio-native .jio-native-card .tablenav.bottom { border-top: 1px solid var(--an-border-soft); }
.jio-native .tablenav-pages { float: right; margin: 0; color: var(--an-muted); }
.jio-native .tablenav-pages .button,
.jio-native .tablenav-pages .page-numbers {
min-width: 30px;
min-height: 30px;
padding: 0 8px;
line-height: 28px;
text-align: center;
}
.jio-native .tablenav-pages .page-numbers {
display: inline-block;
color: var(--an-text-2);
border: 1px solid var(--an-border);
border-radius: var(--an-radius-sm);
text-decoration: none;
}
.jio-native .tablenav-pages .page-numbers.current { color: #fff; background: var(--an-primary); border-color: var(--an-primary); }
.jio-native .tablenav-pages .page-numbers.dots { border-color: transparent; }
.jio-native .tablenav-pages .button.disabled { color: #c9cdd4 !important; background: var(--an-bg-soft) !important; border-color: var(--an-border-soft) !important; }
.jio-native .tablenav .actions { padding: 0; }
.jio-native .tablenav::after { content: ""; display: table; clear: both; }
@media (max-width: 782px) {
.jio-native { margin-right: 10px; }
.jio-native-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.jio-native-stat { padding: 12px 14px; }
.jio-native-stat__value { font-size: 20px; }
.jio-native-card__head,
.jio-native-card__body,
.jio-native-collapse > summary { padding-left: 14px; padding-right: 14px; }
.jio-native .tablenav { padding: 10px 14px; }
.jio-native .tablenav-pages { float: none; }
.jio-native-filters input[type="search"] { min-width: 0; flex: 1 1 100%; }
}