/* * 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); } /* 折叠卡片:
… */ .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%; } }