Files
wordpress-theme-aksrt/assets/css/frontend/vip-modal.css
T
2026-10-19 14:04:30 +08:00

208 lines
5.6 KiB
CSS
Raw 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.
/**
* VIP pay modal + hover cards (legacy payvip-modal / vip-card).
*/
/* VIP now uses the shared modal runtime host.
壳几何 1:1 对齐 Zibll 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)
+ overflow-y: auto(阈值放宽到整屏,正常桌面内容不触发滚动条)
- 圆角 = .modal-content 的 var(--main-radius)(8px) */
.aksrt-modal-runtime.aksrt-vip-modal-shell {
z-index: 1200;
}
.aksrt-modal-runtime.aksrt-vip-modal-shell .aksrt-modal-runtime__dialog {
width: min(600px, calc(100vw - 20px));
max-height: calc(100vh - 20px);
overflow: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
background: var(--main-bg-color, #fff);
border-radius: var(--main-radius, 8px);
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.22);
}
.aksrt-modal-runtime.aksrt-vip-modal-shell .aksrt-modal-runtime__content {
padding: 0;
}
@media (max-width: 768px) {
.aksrt-modal-runtime.aksrt-vip-modal-shell.aksrt-modal-runtime--bottom .aksrt-modal-runtime__dialog {
width: 100%;
max-width: 100%;
max-height: calc(100vh - 20px);
border-radius: var(--main-radius, 8px) var(--main-radius, 8px) 0 0;
}
}
.payvip-modal {
position: relative;
}
/* 积分兑换会员弹窗:参考主题 refresh_modal 同构静态壳
(.modal.flex.jc.fade > .modal-dialog.modal-mini.full-sm > .modal-content
> .modal-body,由 inc/helpers/aksrt-vip.php 服务端输出)。三点约束:
- 静止态必须显式隐藏:main.css 的 .flex{display:flex}(后加载、与 bootstrap
的 .modal{display:none} 同特异性)会让壳永久铺满全屏,叠加 .fade 的
opacity:0 形成隐形遮罩,拦截整页点击;
- 打开态由 pay-vip.js 自包含开关的内联 display:flex 驱动(block 会破坏
.flex.jc 双轴居中),与余额充值/购买积分弹窗同构;
- 入口在会员购买弹窗与 /user/vip/ 页面横条两处,壳需高于 runtime 宿主
(100050),以复现参考主题在会员弹窗之上再叠一层兑换弹窗的行为。 */
.modal[data-aksrt-vip-points-modal] {
display: none;
z-index: 100060;
}
.modal[data-aksrt-vip-points-modal].in {
display: flex;
}
.modal-backdrop[data-aksrt-vip-points-backdrop] {
z-index: 100055;
}
/* public.css redeclares .muted-box after legacy utilities, overriding its
background, radius, and padding utilities. Restore the reference box contract. */
.modal[data-aksrt-vip-points-modal] .muted-box.padding-h10 {
background-color: var(--this-bg, var(--muted-border-color));
border-radius: var(--main-radius);
padding: 10px 15px;
}
.modal[data-aksrt-vip-points-modal] .muted-box.padding-10,
.modal[data-aksrt-vip-points-modal] .aksrt-vip-points-desc {
background-color: var(--this-bg, var(--muted-border-color));
border-radius: var(--main-radius);
padding: 10px;
}
.modal[data-aksrt-vip-points-modal] .aksrt-vip-points-desc {
display: block;
margin-top: 20px;
color: var(--muted-2-color, #999);
}
.pay-vip-form-row {
display: grid;
gap: 12px;
}
@media (min-width: 640px) {
.pay-vip-form-row {
grid-template-columns: 1fr 1.2fr;
}
}
/* Modal-only equity (admin HTML; no forced bullets) */
.payvip-modal .v-equity {
display: block;
list-style: none;
margin: 8px 0 0;
padding: 0;
font-size: 12px;
line-height: 1.6;
}
.payvip-modal .v-equity > li {
display: block;
margin: 0 0 6px;
padding: 0;
list-style: none;
}
.payvip-modal .v-equity > li::before,
.payvip-modal .v-equity > li::after {
content: none !important;
display: none !important;
}
.initiate-pay.is-loading,
.initiate-pay:disabled {
opacity: 0.7;
cursor: wait;
}
/* 会员弹窗骨架屏(pay-vip.js vipSkeleton()):仿真实弹窗布局——
用户框 + 等级卡行 + 双列套餐面板。线条/色块与 shimmer 动画复用全局
.aksrt-modal-runtime__skeleton-line/-block 与 @keyframes
aksrt-modal-skeleton(build/public.min.css 已全局入队);
这里只定义 VIP 专属形状(头像圆、tab 卡、双列 grid、按钮条),
与 .pay-vip-form-row 的 640px 双列阈值保持一致。 */
.aksrt-vip-modal-skeleton {
display: flex;
flex-direction: column;
gap: 14px;
padding: 15px;
}
.aksrt-vip-modal-skeleton__user {
display: flex;
align-items: center;
gap: 10px;
}
.aksrt-vip-modal-skeleton__avatar {
width: 42px;
height: 42px;
border-radius: 50%;
flex: none;
}
.aksrt-vip-modal-skeleton__lines {
display: flex;
flex-direction: column;
gap: 6px;
flex: 1;
min-width: 0;
}
.aksrt-vip-modal-skeleton__tabs {
display: flex;
gap: 10px;
}
.aksrt-vip-modal-skeleton__tab {
flex: 1;
height: 56px;
}
.aksrt-vip-modal-skeleton__pane {
display: grid;
gap: 12px;
}
.aksrt-vip-modal-skeleton__info {
display: flex;
flex-direction: column;
gap: 10px;
padding-top: 4px;
}
.aksrt-vip-modal-skeleton__products {
display: flex;
flex-direction: column;
gap: 10px;
}
.aksrt-vip-modal-skeleton__button {
height: 38px;
}
/* 专属形状共用骨架底色与 shimmer(值与 modal-runtime.css 的线条/块一致)。 */
.aksrt-vip-modal-skeleton__avatar,
.aksrt-vip-modal-skeleton__tab,
.aksrt-vip-modal-skeleton__button {
display: block;
border-radius: 8px;
background: linear-gradient(90deg, rgba(148, 163, 184, 0.16), rgba(148, 163, 184, 0.3), rgba(148, 163, 184, 0.16));
background-size: 200% 100%;
animation: aksrt-modal-skeleton 1.2s ease-in-out infinite;
}
@media (min-width: 640px) {
.aksrt-vip-modal-skeleton__pane {
grid-template-columns: 1fr 1.2fr;
}
}