From 732f615a0927d944bf5178593869cfdaac093a79 Mon Sep 17 00:00:00 2001 From: kate522 Date: Tue, 6 Oct 2026 18:27:27 +0000 Subject: [PATCH] =?UTF-8?q?style(payment):=20=E7=82=AB=E5=BD=A9=E6=A0=87?= =?UTF-8?q?=E9=A2=98=E5=8C=BA=E6=A0=B7=E5=BC=8F=E6=89=A9=E5=B1=95=E5=88=B0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/frontend/modal-runtime.css | 1597 +++++++++++++------------ 1 file changed, 804 insertions(+), 793 deletions(-) diff --git a/assets/css/frontend/modal-runtime.css b/assets/css/frontend/modal-runtime.css index d032f2cd..5252ffcc 100644 --- a/assets/css/frontend/modal-runtime.css +++ b/assets/css/frontend/modal-runtime.css @@ -1,793 +1,804 @@ -/** - * Modal runtime + ajax list primitives (shared). - * - * @package AKSRT - */ - -/* ---- portal token bridge ---- - * - * 弹窗由 runtime portal 到 ,因此它位于任何「页面级 token 作用域」之外。 - * 典型陷阱:路由样式把语义别名挂在页面上,例如 - * - * .aksrt-orders-page { --orders-ink: var(--color-ink, #333); } - * - * 弹窗内部再去 `var(--orders-ink)` 时该变量不存在,整条声明会被静默丢弃—— - * 表现为边框消失、次级文字变透明,而不是抛错,排查成本很高。 - * - * 因此共享调色板在这里声明:本壳层永远在 portal 内,任何弹窗都能直接消费 - * `--modal-*`。路由样式应把自己的局部别名映射到这里,而不是映射到页面级变量。 - */ -.aksrt-modal-runtime { - --modal-ink: var(--color-ink, #333333); - --modal-ink-2: var(--color-ink-2, #4e5358); - --modal-muted: var(--color-ink-3, #777777); - --modal-line: var(--color-line-stronger, rgba(50, 50, 50, 0.12)); - --modal-line-soft: var(--color-line, rgba(50, 50, 50, 0.06)); - --modal-surface: var(--surface-1, #ffffff); - --modal-surface-2: var(--surface-2, #eeeeee); - --modal-surface-3: var(--surface-4, #f8f8f8); - --modal-primary: var(--color-primary, #f04494); - --modal-on-primary: var(--color-on-primary, #ffffff); - --modal-warning: var(--color-warning, #f59e0b); - --modal-success: var(--color-success, #10b981); - --modal-danger: var(--color-danger, #ef4444); -} - -/* ---- scroll lock ---- */ -html.aksrt-modal-runtime-open, -body.aksrt-modal-runtime-open { - overflow: hidden; -} - -/* ---- 对话框宽度类不得作用于壳 ---- - 触发器沿用参考主题的 data-class 语义(modal-mini/full-sm 等), - 但这些类落在 fixed 全屏壳上时,.modal-mini 的 width:400px + - auto 边距会把壳压成居中单列,蒙版随之只覆盖一列。 */ -.aksrt-modal-runtime.modal-mini, -.aksrt-modal-runtime.full-sm { - width: auto; - max-width: none; - margin: 0; -} - -/* ---- modal runtime shell ---- */ -.aksrt-modal-runtime { - position: fixed; - inset: 0; - z-index: 100050; - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - visibility: hidden; - transition: opacity 0.2s ease, visibility 0.2s ease; - pointer-events: none; -} - -.aksrt-modal-runtime.is-open { - opacity: 1; - visibility: visible; - pointer-events: auto; -} - -.aksrt-modal-runtime__overlay { - position: absolute; - inset: 0; - /* 参考主题 .modal-backdrop 同款:纯黑 50%,无模糊、无色调偏移 */ - background: rgba(0, 0, 0, 0.5); -} - -.aksrt-modal-runtime__dialog { - position: relative; - z-index: 1; - width: min(440px, calc(100vw - 32px)); - max-height: min(88vh, 720px); - overflow: auto; - background: var(--surface-1, #fff); - border-radius: 16px; - box-shadow: 0 18px 48px rgba(15, 18, 28, 0.22); - transform: translateY(12px) scale(0.98); - transition: transform 0.22s cubic-bezier(0.22, 1, 0.36, 1); - color: var(--color-ink, #1f2937); -} - -.aksrt-modal-runtime.is-open .aksrt-modal-runtime__dialog { - transform: translateY(0) scale(1); -} - -.aksrt-modal-runtime--bottom { - align-items: flex-end; -} - -.aksrt-modal-runtime--bottom .aksrt-modal-runtime__dialog { - width: 100%; - max-width: 100%; - border-radius: 16px 16px 0 0; - max-height: 90vh; - transform: translateY(24px); -} - -.aksrt-modal-runtime--bottom.is-open .aksrt-modal-runtime__dialog { - transform: translateY(0); -} - -.aksrt-modal-runtime__header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 16px 18px 0; -} - -.aksrt-modal-runtime__title { - margin: 0; - font-size: 17px; - line-height: 1.35; -} - -.aksrt-modal-runtime__content { - padding: 18px 18px 16px; -} - -.aksrt-modal-runtime__loading, -.aksrt-modal-runtime__error-body { - padding: 28px 8px; - text-align: center; - color: var(--color-ink-2, #6b7280); - font-size: 14px; -} - -.aksrt-modal-runtime__skeleton { - display: grid; - gap: 12px; - padding: 8px 2px; -} - -.aksrt-modal-runtime__skeleton-line, -.aksrt-modal-runtime__skeleton-block { - 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; -} - -.aksrt-modal-runtime__skeleton-line { - width: 72%; - height: 12px; -} - -.aksrt-modal-runtime__skeleton-line.is-wide { - width: 92%; - height: 18px; -} - -.aksrt-modal-runtime__skeleton-line.is-short { - width: 44%; -} - -.aksrt-modal-runtime__skeleton-block { - width: 100%; - min-height: 84px; -} - -.aksrt-modal-runtime__retry { - cursor: pointer; -} - -@keyframes aksrt-modal-skeleton { - 0% { background-position: 100% 0; } - 100% { background-position: -100% 0; } -} - -.aksrt-modal-runtime .touch.border-title, -.aksrt-modal-runtime .border-title { - font-size: 16px; - font-weight: 700; - margin: 0 0 14px; - display: flex; - align-items: baseline; - flex-wrap: wrap; - gap: 6px; -} - -.aksrt-modal-runtime .aksrt-modal-runtime__close { - position: absolute; - top: 10px; - right: 10px; - width: 32px; - height: 32px; - border: 0; - border-radius: 999px; - background: transparent; - color: var(--color-ink-3, #9ca3af); - cursor: pointer; - font-size: 18px; - line-height: 1; -} - -.aksrt-modal-runtime .but-average.modal-buts, -.aksrt-modal-runtime .modal-buts { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px; - margin-top: 16px; -} - -.aksrt-modal-runtime .but-average.modal-buts .but, -.aksrt-modal-runtime .modal-buts .but, -.aksrt-modal-runtime .modal-buts button { - min-height: 40px; - border-radius: 10px; - border: 1px solid var(--color-line, #e5e7eb); - background: var(--surface-4, #f3f4f6); - color: var(--color-ink, #111); - font-weight: 600; - cursor: pointer; -} - -.aksrt-modal-runtime .modal-buts .but.c-blue, -.aksrt-modal-runtime .modal-buts button.c-blue, -.aksrt-modal-runtime .modal-buts .btn-primary { - background: var(--color-primary, #f04494); - border-color: color-mix(in srgb, var(--color-primary, #f04494) 70%, #000 0%); - color: var(--color-on-primary, #fff); -} - -/* ---- 签到详情弹窗(参考主题 refresh_modal modal-mini 同构壳) ---- - 内容为服务端 HTML(modal-colorful-header + modal-body),与参考主题 - .modal-dialog.modal-mini 几何 1:1:宽 400px、圆角 var(--main-radius)。 */ -.aksrt-modal-runtime.aksrt-checkin-details-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { - width: min(400px, calc(100vw - 32px)); - border-radius: var(--main-radius, 8px); - background: var(--main-bg-color, #fff); -} - -.aksrt-modal-runtime.aksrt-checkin-details-modal .aksrt-modal-runtime__content { - padding: 0; -} - -.aksrt-modal-runtime.aksrt-checkin-details-modal .aksrt-modal-runtime__skeleton { - padding: 24px 18px; -} - -/* ---- ajax list ---- */ -.ajaxpager.is-ajax-loading { - position: relative; - min-height: 80px; -} - -/* 骨架默认收起,由 JS 加 .is-loading 展开(参考主题 post_ajax 的 beforeSend - remove + fadeIn / success .hide() 语义等价物)。 - 这里不依赖 .ajaxpager 祖先:首页 tab pane、归档流、评论列表的 loader 层级各不 - 相同,而且并非每个 loader 都在 bootstrap 的 .tab-pane 里(bootstrap 只负责 - 隐藏 tab-pane 内的骨架),统一按类名自身控制。 */ -.post_ajax_loader { - display: none; -} - -.post_ajax_loader.is-loading { - display: block; - animation: aksrtFadeIn 0.2s ease both; -} - -.ajax-item.is-fading { - opacity: 0.35; - transition: opacity 0.15s ease; -} - -/* ---- 举报弹窗(参考主题报告弹窗几何 1:1)---- - 宽度对齐参考主题 Bootstrap 默认模态(>=768px 600px),圆角/底色走 - --main-radius / --main-bg-color;移动端仍由 --bottom 底部抽屉接管。 */ -.aksrt-report-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { - width: min(600px, calc(100vw - 32px)); - border-radius: var(--main-radius, 8px); - background: var(--main-bg-color, #fff); -} - -/* edit-header:参考主题弹窗头(关闭钮靠右,红色警示徽标 + 标题居左)。 */ -.aksrt-report-modal .edit-header { - position: relative; - padding-right: 32px; -} - -.aksrt-report-modal .edit-header .close { - position: absolute; - right: 0; - top: 50%; - transform: translateY(-50%); - float: none; - font-size: 20px; - line-height: 1; - cursor: pointer; - background: none; - border: 0; - padding: 2px 6px; -} - -/* 原因徽章行:与参考主题一致,徽章可换行且间距走 mr6/mb6 工具类。 */ -.aksrt-report-modal .form-but-radio .badg { - cursor: pointer; - user-select: none; -} - -/* ---- 禁封用户弹窗(参考主题 set_user_ban 模态框几何 1:1)---- - 参考主题 zib_get_edit_user_ban_link 未传 data-class → 走 Bootstrap 默认 - .modal-dialog(>=768px 宽 600px);data-height=360 → .modal-content 初始 - 高度 360 后动画至内容高度;mobile-bottom → <769px 底部抽屉。 - 此处以 min-height:360px 复刻初始高度契约,桌面宽取 600px。 */ -.aksrt-user-ban-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { - width: min(600px, calc(100vw - 32px)); - border-radius: var(--main-radius, 8px); - background: var(--main-bg-color, #fff); -} - -/* ---- 查看禁封状态 / 禁封申诉 / 禁封记录弹窗(参考主题 modal-mini 几何 1:1)---- - 参考主题三个链接均传 data_class='modal-mini'(宽 400px)、data-height=240。 */ -.aksrt-user-ban-info-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, -.aksrt-user-ban-appeal-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, -.aksrt-user-ban-log-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { - width: min(400px, calc(100vw - 32px)); - border-radius: var(--main-radius, 8px); - background: var(--main-bg-color, #fff); -} - -.aksrt-user-ban-info-modal .aksrt-modal-runtime__skeleton, -.aksrt-user-ban-appeal-modal .aksrt-modal-runtime__skeleton, -.aksrt-user-ban-log-modal .aksrt-modal-runtime__skeleton { - padding: 24px 18px; -} - -.aksrt-user-ban-modal .aksrt-modal-runtime__skeleton { - padding: 24px 18px; -} - -/* edit-header:与禁封表单头部同构(关闭钮靠右,红色警示徽标 + 标题居左)。 */ -.aksrt-user-ban-modal .edit-header, -.aksrt-user-ban-appeal-modal .edit-header { - position: relative; - padding-right: 32px; -} - -.aksrt-user-ban-modal .edit-header .close, -.aksrt-user-ban-appeal-modal .edit-header .close { - position: absolute; - right: 0; - top: 50%; - transform: translateY(-50%); - float: none; - font-size: 20px; - line-height: 1; - cursor: pointer; - background: none; - border: 0; - padding: 2px 6px; -} - -/* 解封视图多彩横幅(参考主题 zib_get_modal_colorful_header('c-yellow', ...)): - 120px 高绝对定位横幅 + 旋转彩斑,后续表单整体下移 120px。 */ -.aksrt-user-ban-modal .modal-colorful-header, -.aksrt-user-ban-modal .colorful-bg, -.aksrt-user-ban-info-modal .modal-colorful-header, -.aksrt-user-ban-info-modal .colorful-bg, -.aksrt-user-ban-log-modal .modal-colorful-header, -.aksrt-user-ban-log-modal .colorful-bg { - position: relative; - overflow: hidden; - color: var(--this-color); - background: var(--this-bg); - background-size: 120%; -} - -.aksrt-user-ban-modal .modal-colorful-header, -.aksrt-user-ban-info-modal .modal-colorful-header, -.aksrt-user-ban-log-modal .modal-colorful-header { - position: absolute; - top: 0; - right: 0; - left: 0; - display: flex; - align-items: center; - justify-content: center; - height: 120px; - border-radius: var(--main-radius, 8px) var(--main-radius, 8px) 0 0; -} - -.aksrt-user-ban-modal .modal-colorful-header + *, -.aksrt-user-ban-info-modal .modal-colorful-header + *, -.aksrt-user-ban-log-modal .modal-colorful-header + * { - margin-top: 120px; -} - -.aksrt-user-ban-modal .modal-colorful-header > .close, -.aksrt-user-ban-info-modal .modal-colorful-header > .close, -.aksrt-user-ban-log-modal .modal-colorful-header > .close { - position: absolute; - top: 10px; - right: 10px; - z-index: 9; - color: var(--this-color); - font-size: 18px; - opacity: 0.6; -} - -.aksrt-user-ban-modal .colorful-bg > .colorful-make, -.aksrt-user-ban-modal .colorful-bg > .colorful-make::before, -.aksrt-user-ban-modal .colorful-bg > .colorful-make::after, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::before, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::after, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::before, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::after { - position: absolute; - color: var(--this-color); - background: var(--this-bg); - border-radius: 100%; - content: ''; -} - -.aksrt-user-ban-modal .colorful-bg > .colorful-make, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make { - top: 60%; - bottom: 0; - width: 323px; - height: 290px; - animation: aksrt-ban-colorful 120s linear infinite; -} - -.aksrt-user-ban-modal .colorful-bg > .colorful-make::before, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::before, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::before { - top: -325px; - right: -558px; - bottom: 0; - width: 677px; - height: 300px; - opacity: 0.6; - transform: rotate(341deg); -} - -.aksrt-user-ban-modal .colorful-bg > .colorful-make::after, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::after, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::after { - top: -170px; - bottom: 0; - left: -262px; - width: 402px; - height: 214px; - opacity: 0.4; - transform: rotate(326deg); -} - -.aksrt-user-ban-modal .colorful-bg > .colorful-make + *, -.aksrt-user-ban-info-modal .colorful-bg > .colorful-make + *, -.aksrt-user-ban-log-modal .colorful-bg > .colorful-make + * { - position: relative; -} - -/* 单选徽章行(参考主题 .form-but-radio 契约):input 由 main.css 隐藏, - label 可点;选中态由 main.css 的 input:checked + .but-radio 驱动。 */ -.aksrt-user-ban-modal .form-but-radio label { - cursor: pointer; -} - -.aksrt-user-ban-modal .form-but-radio .but-radio { - user-select: none; -} - -/* 开关行(删除全部内容 / 禁止用户申诉):原生 checkbox 隐藏, - 视觉态由 main.css 的 input:checked ~ .form-switch 驱动。 */ -.aksrt-user-ban-modal .aksrt-user-ban-form label { - user-select: none; -} - -@keyframes aksrt-ban-colorful { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -/* ---- order review modal content ---- */ -.order-comment-from .shop-score-box { - display: flex; - align-items: center; - gap: 8px; - min-height: 36px; -} - -.order-comment-from .score-title { - width: 4.5em; - flex: 0 0 auto; - font-size: 13px; - color: var(--color-ink-2, #6b7280); -} - -.order-comment-from .score-icon { - display: inline-flex; - gap: 4px; - align-items: center; - height: 30px; -} - -.order-comment-from .icon-star { - display: inline-flex; - width: 22px; - height: 22px; - color: #d1d5db; - cursor: pointer; - transition: color 0.12s ease, transform 0.12s ease; -} - -.order-comment-from .icon-star svg { - width: 22px; - height: 22px; - fill: currentColor; -} - -.order-comment-from .icon-star.active, -.order-comment-from .icon-star.hover { - color: #fc7049; -} - -.order-comment-from .icon-star.hover { - transform: scale(1.08); -} - -.order-comment-from .score-text { - min-width: 3em; - font-size: 13px; - color: var(--color-ink-2, #6b7280); -} - -.order-comment-from textarea.form-control { - width: 100%; - border: 1px solid var(--color-line, #e5e7eb); - border-radius: 10px; - padding: 10px 12px; - font-size: 14px; - resize: vertical; - min-height: 96px; - background: var(--surface-1, #fff); - color: var(--color-ink, #111); -} - -:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview { - display: flex; - flex-wrap: wrap; - gap: 8px; -} - -:is(.order-comment-from, .aksrt-report-modal) .form-upload .preview .add, -:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .add, -:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .preview-item { - width: 80px; - height: 80px; - border-radius: 10px; - border: 1px dashed var(--color-line, #d1d5db); - background: var(--surface-4, #f9fafb); - position: relative; - overflow: hidden; - cursor: pointer; -} - -/* 加号图标不在此重复定义:main.css 已有参考主题原生实现 - (.preview .add:before/:after —— 25px 圆角杠,inset:0 + margin:auto 居中)。 - 此前这里的 left/top:50% + translate 版本与该规则叠加导致过约束, - 加号被推到 75%/75% 只剩“L”形,故整体删除、统一走主样式包。 */ - -:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .preview-item img { - width: 100%; - height: 100%; - object-fit: cover; - display: block; -} - -:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .preview-item .remove { - position: absolute; - top: 2px; - right: 2px; - width: 20px; - height: 20px; - border: 0; - border-radius: 999px; - background: rgba(0, 0, 0, 0.55); - color: #fff; - font-size: 12px; - line-height: 1; - cursor: pointer; -} - -:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .hide { - display: none !important; -} - -.order-comment-from .review-error { - color: #ef4444; - font-size: 13px; - margin-top: 8px; -} - -@media (max-width: 768px) { - .aksrt-modal-runtime:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { - width: calc(100vw - 20px); - } -} - -/* ---- 售后弹窗(申请 / 售后详细 / 超时效提示,参考主题 modal-mini 几何 1:1)---- - 三个弹窗与禁封申诉弹窗同几何:data_class='modal-mini'(宽 400px),圆角与 - 底色走 --main-radius / --main-bg-color;移动端由 --bottom 底部抽屉接管。 */ -.aksrt-after-sale-apply-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, -.aksrt-after-sale-detail-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, -.aksrt-after-sale-expired-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { - width: min(400px, calc(100vw - 32px)); - border-radius: var(--main-radius, 8px); - background: var(--main-bg-color, #fff); -} - -.aksrt-after-sale-apply-modal .aksrt-modal-runtime__skeleton, -.aksrt-after-sale-detail-modal .aksrt-modal-runtime__skeleton, -.aksrt-after-sale-expired-modal .aksrt-modal-runtime__skeleton { - padding: 24px 18px; -} - -/* 蓝色炫彩标题区(参考主题 zib_get_modal_colorful_header('jb-blue', ...)):120px - 绝对定位横幅 + 旋转彩斑,后续内容整体下移 120px,与禁封记录弹窗同构。 */ -.aksrt-after-sale-apply-modal .modal-colorful-header, -.aksrt-after-sale-detail-modal .modal-colorful-header, -.aksrt-after-sale-expired-modal .modal-colorful-header, -.aksrt-after-sale-apply-modal .colorful-bg, -.aksrt-after-sale-detail-modal .colorful-bg, -.aksrt-after-sale-expired-modal .colorful-bg { - position: relative; - overflow: hidden; - color: var(--this-color); - background: var(--this-bg); - background-size: 120%; -} - -.aksrt-after-sale-apply-modal .modal-colorful-header, -.aksrt-after-sale-detail-modal .modal-colorful-header, -.aksrt-after-sale-expired-modal .modal-colorful-header { - position: absolute; - top: 0; - right: 0; - left: 0; - display: flex; - align-items: center; - justify-content: center; - height: 120px; - border-radius: var(--main-radius, 8px) var(--main-radius, 8px) 0 0; -} - -.aksrt-after-sale-apply-modal .modal-colorful-header + *, -.aksrt-after-sale-detail-modal .modal-colorful-header + *, -.aksrt-after-sale-expired-modal .modal-colorful-header + * { - margin-top: 120px; -} - -.aksrt-after-sale-apply-modal .modal-colorful-header > .close, -.aksrt-after-sale-detail-modal .modal-colorful-header > .close, -.aksrt-after-sale-expired-modal .modal-colorful-header > .close { - position: absolute; - top: 10px; - right: 10px; - z-index: 9; - color: var(--this-color); - font-size: 18px; - opacity: 0.6; -} - -.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make, -.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::before, -.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::after, -.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make, -.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::before, -.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::after, -.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make, -.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::before, -.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::after { - position: absolute; - color: var(--this-color); - background: var(--this-bg); - border-radius: 100%; - content: ''; -} - -.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make, -.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make, -.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make { - top: 60%; - bottom: 0; - width: 323px; - height: 290px; - animation: aksrt-ban-colorful 120s linear infinite; -} - -.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::before, -.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::before, -.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::before { - top: -325px; - right: -558px; - bottom: 0; - width: 677px; - height: 300px; - opacity: 0.6; - transform: rotate(341deg); -} - -.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::after, -.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::after, -.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::after { - top: -170px; - bottom: 0; - left: -262px; - width: 402px; - height: 214px; - opacity: 0.4; - transform: rotate(326deg); -} - -/* 售后原因徽章:与举报弹窗一致,可换行且间距走 mr6/mb6 工具类。 */ -.aksrt-after-sale-apply-modal .form-but-radio .badg { - cursor: pointer; - user-select: none; -} - -/* 订单摘要与售后明细行 */ -.aksrt-after-sale-summary__row, -.aksrt-after-sale-detail__row { - display: flex; - align-items: baseline; - justify-content: space-between; - gap: 12px; - margin-bottom: 6px; -} - -.aksrt-after-sale-summary__row:last-child, -.aksrt-after-sale-detail__row:last-child { - margin-bottom: 0; -} - -.aksrt-after-sale-summary__value, -.aksrt-after-sale-detail__value { - min-width: 0; - text-align: right; - word-break: break-all; -} - -.aksrt-after-sale-detail__statusRow { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 10px; -} - -.aksrt-after-sale-reason-text { - color: var(--color-ink-2, #4e5358); - background: var(--surface-2, #eee); - border-radius: 6px; - padding: 10px 12px; -} - -.aksrt-after-sale-images { - display: flex; - flex-wrap: wrap; - gap: 8px; -} - -.aksrt-after-sale-images img { - width: 72px; - height: 72px; - object-fit: cover; - border-radius: 6px; - border: 1px solid var(--color-line, #e5e7eb); - display: block; -} - -.aksrt-after-sale-status.is-pending { color: var(--color-warning, #f59e0b); } -.aksrt-after-sale-status.is-processing { color: var(--color-info, #3b82f6); } -.aksrt-after-sale-status.is-approved, -.aksrt-after-sale-status.is-completed { color: var(--color-success, #10b981); } -.aksrt-after-sale-status.is-rejected, -.aksrt-after-sale-status.is-cancelled { color: var(--color-error, #ef4444); } +/** + * Modal runtime + ajax list primitives (shared). + * + * @package AKSRT + */ + +/* ---- portal token bridge ---- + * + * 弹窗由 runtime portal 到 ,因此它位于任何「页面级 token 作用域」之外。 + * 典型陷阱:路由样式把语义别名挂在页面上,例如 + * + * .aksrt-orders-page { --orders-ink: var(--color-ink, #333); } + * + * 弹窗内部再去 `var(--orders-ink)` 时该变量不存在,整条声明会被静默丢弃—— + * 表现为边框消失、次级文字变透明,而不是抛错,排查成本很高。 + * + * 因此共享调色板在这里声明:本壳层永远在 portal 内,任何弹窗都能直接消费 + * `--modal-*`。路由样式应把自己的局部别名映射到这里,而不是映射到页面级变量。 + */ +.aksrt-modal-runtime { + --modal-ink: var(--color-ink, #333333); + --modal-ink-2: var(--color-ink-2, #4e5358); + --modal-muted: var(--color-ink-3, #777777); + --modal-line: var(--color-line-stronger, rgba(50, 50, 50, 0.12)); + --modal-line-soft: var(--color-line, rgba(50, 50, 50, 0.06)); + --modal-surface: var(--surface-1, #ffffff); + --modal-surface-2: var(--surface-2, #eeeeee); + --modal-surface-3: var(--surface-4, #f8f8f8); + --modal-primary: var(--color-primary, #f04494); + --modal-on-primary: var(--color-on-primary, #ffffff); + --modal-warning: var(--color-warning, #f59e0b); + --modal-success: var(--color-success, #10b981); + --modal-danger: var(--color-danger, #ef4444); +} + +/* ---- scroll lock ---- */ +html.aksrt-modal-runtime-open, +body.aksrt-modal-runtime-open { + overflow: hidden; +} + +/* ---- 对话框宽度类不得作用于壳 ---- + 触发器沿用参考主题的 data-class 语义(modal-mini/full-sm 等), + 但这些类落在 fixed 全屏壳上时,.modal-mini 的 width:400px + + auto 边距会把壳压成居中单列,蒙版随之只覆盖一列。 */ +.aksrt-modal-runtime.modal-mini, +.aksrt-modal-runtime.full-sm { + width: auto; + max-width: none; + margin: 0; +} + +/* ---- modal runtime shell ---- */ +.aksrt-modal-runtime { + position: fixed; + inset: 0; + z-index: 100050; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transition: opacity 0.2s ease, visibility 0.2s ease; + pointer-events: none; +} + +.aksrt-modal-runtime.is-open { + opacity: 1; + visibility: visible; + pointer-events: auto; +} + +.aksrt-modal-runtime__overlay { + position: absolute; + inset: 0; + /* 参考主题 .modal-backdrop 同款:纯黑 50%,无模糊、无色调偏移 */ + background: rgba(0, 0, 0, 0.5); +} + +.aksrt-modal-runtime__dialog { + position: relative; + z-index: 1; + width: min(440px, calc(100vw - 32px)); + max-height: min(88vh, 720px); + overflow: auto; + background: var(--surface-1, #fff); + border-radius: 16px; + box-shadow: 0 18px 48px rgba(15, 18, 28, 0.22); + transform: translateY(12px) scale(0.98); + transition: transform 0.22s cubic-bezier(0.22, 1, 0.36, 1); + color: var(--color-ink, #1f2937); +} + +.aksrt-modal-runtime.is-open .aksrt-modal-runtime__dialog { + transform: translateY(0) scale(1); +} + +.aksrt-modal-runtime--bottom { + align-items: flex-end; +} + +.aksrt-modal-runtime--bottom .aksrt-modal-runtime__dialog { + width: 100%; + max-width: 100%; + border-radius: 16px 16px 0 0; + max-height: 90vh; + transform: translateY(24px); +} + +.aksrt-modal-runtime--bottom.is-open .aksrt-modal-runtime__dialog { + transform: translateY(0); +} + +.aksrt-modal-runtime__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 16px 18px 0; +} + +.aksrt-modal-runtime__title { + margin: 0; + font-size: 17px; + line-height: 1.35; +} + +.aksrt-modal-runtime__content { + padding: 18px 18px 16px; +} + +.aksrt-modal-runtime__loading, +.aksrt-modal-runtime__error-body { + padding: 28px 8px; + text-align: center; + color: var(--color-ink-2, #6b7280); + font-size: 14px; +} + +.aksrt-modal-runtime__skeleton { + display: grid; + gap: 12px; + padding: 8px 2px; +} + +.aksrt-modal-runtime__skeleton-line, +.aksrt-modal-runtime__skeleton-block { + 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; +} + +.aksrt-modal-runtime__skeleton-line { + width: 72%; + height: 12px; +} + +.aksrt-modal-runtime__skeleton-line.is-wide { + width: 92%; + height: 18px; +} + +.aksrt-modal-runtime__skeleton-line.is-short { + width: 44%; +} + +.aksrt-modal-runtime__skeleton-block { + width: 100%; + min-height: 84px; +} + +.aksrt-modal-runtime__retry { + cursor: pointer; +} + +@keyframes aksrt-modal-skeleton { + 0% { background-position: 100% 0; } + 100% { background-position: -100% 0; } +} + +.aksrt-modal-runtime .touch.border-title, +.aksrt-modal-runtime .border-title { + font-size: 16px; + font-weight: 700; + margin: 0 0 14px; + display: flex; + align-items: baseline; + flex-wrap: wrap; + gap: 6px; +} + +.aksrt-modal-runtime .aksrt-modal-runtime__close { + position: absolute; + top: 10px; + right: 10px; + width: 32px; + height: 32px; + border: 0; + border-radius: 999px; + background: transparent; + color: var(--color-ink-3, #9ca3af); + cursor: pointer; + font-size: 18px; + line-height: 1; +} + +.aksrt-modal-runtime .but-average.modal-buts, +.aksrt-modal-runtime .modal-buts { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + margin-top: 16px; +} + +.aksrt-modal-runtime .but-average.modal-buts .but, +.aksrt-modal-runtime .modal-buts .but, +.aksrt-modal-runtime .modal-buts button { + min-height: 40px; + border-radius: 10px; + border: 1px solid var(--color-line, #e5e7eb); + background: var(--surface-4, #f3f4f6); + color: var(--color-ink, #111); + font-weight: 600; + cursor: pointer; +} + +.aksrt-modal-runtime .modal-buts .but.c-blue, +.aksrt-modal-runtime .modal-buts button.c-blue, +.aksrt-modal-runtime .modal-buts .btn-primary { + background: var(--color-primary, #f04494); + border-color: color-mix(in srgb, var(--color-primary, #f04494) 70%, #000 0%); + color: var(--color-on-primary, #fff); +} + +/* ---- 签到详情弹窗(参考主题 refresh_modal modal-mini 同构壳) ---- + 内容为服务端 HTML(modal-colorful-header + modal-body),与参考主题 + .modal-dialog.modal-mini 几何 1:1:宽 400px、圆角 var(--main-radius)。 */ +.aksrt-modal-runtime.aksrt-checkin-details-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { + width: min(400px, calc(100vw - 32px)); + border-radius: var(--main-radius, 8px); + background: var(--main-bg-color, #fff); +} + +.aksrt-modal-runtime.aksrt-checkin-details-modal .aksrt-modal-runtime__content { + padding: 0; +} + +.aksrt-modal-runtime.aksrt-checkin-details-modal .aksrt-modal-runtime__skeleton { + padding: 24px 18px; +} + +/* ---- ajax list ---- */ +.ajaxpager.is-ajax-loading { + position: relative; + min-height: 80px; +} + +/* 骨架默认收起,由 JS 加 .is-loading 展开(参考主题 post_ajax 的 beforeSend + remove + fadeIn / success .hide() 语义等价物)。 + 这里不依赖 .ajaxpager 祖先:首页 tab pane、归档流、评论列表的 loader 层级各不 + 相同,而且并非每个 loader 都在 bootstrap 的 .tab-pane 里(bootstrap 只负责 + 隐藏 tab-pane 内的骨架),统一按类名自身控制。 */ +.post_ajax_loader { + display: none; +} + +.post_ajax_loader.is-loading { + display: block; + animation: aksrtFadeIn 0.2s ease both; +} + +.ajax-item.is-fading { + opacity: 0.35; + transition: opacity 0.15s ease; +} + +/* ---- 举报弹窗(参考主题报告弹窗几何 1:1)---- + 宽度对齐参考主题 Bootstrap 默认模态(>=768px 600px),圆角/底色走 + --main-radius / --main-bg-color;移动端仍由 --bottom 底部抽屉接管。 */ +.aksrt-report-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { + width: min(600px, calc(100vw - 32px)); + border-radius: var(--main-radius, 8px); + background: var(--main-bg-color, #fff); +} + +/* edit-header:参考主题弹窗头(关闭钮靠右,红色警示徽标 + 标题居左)。 */ +.aksrt-report-modal .edit-header { + position: relative; + padding-right: 32px; +} + +.aksrt-report-modal .edit-header .close { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + float: none; + font-size: 20px; + line-height: 1; + cursor: pointer; + background: none; + border: 0; + padding: 2px 6px; +} + +/* 原因徽章行:与参考主题一致,徽章可换行且间距走 mr6/mb6 工具类。 */ +.aksrt-report-modal .form-but-radio .badg { + cursor: pointer; + user-select: none; +} + +/* ---- 禁封用户弹窗(参考主题 set_user_ban 模态框几何 1:1)---- + 参考主题 zib_get_edit_user_ban_link 未传 data-class → 走 Bootstrap 默认 + .modal-dialog(>=768px 宽 600px);data-height=360 → .modal-content 初始 + 高度 360 后动画至内容高度;mobile-bottom → <769px 底部抽屉。 + 此处以 min-height:360px 复刻初始高度契约,桌面宽取 600px。 */ +.aksrt-user-ban-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { + width: min(600px, calc(100vw - 32px)); + border-radius: var(--main-radius, 8px); + background: var(--main-bg-color, #fff); +} + +/* ---- 查看禁封状态 / 禁封申诉 / 禁封记录弹窗(参考主题 modal-mini 几何 1:1)---- + 参考主题三个链接均传 data_class='modal-mini'(宽 400px)、data-height=240。 */ +.aksrt-user-ban-info-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, +.aksrt-user-ban-appeal-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, +.aksrt-user-ban-log-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { + width: min(400px, calc(100vw - 32px)); + border-radius: var(--main-radius, 8px); + background: var(--main-bg-color, #fff); +} + +.aksrt-user-ban-info-modal .aksrt-modal-runtime__skeleton, +.aksrt-user-ban-appeal-modal .aksrt-modal-runtime__skeleton, +.aksrt-user-ban-log-modal .aksrt-modal-runtime__skeleton { + padding: 24px 18px; +} + +.aksrt-user-ban-modal .aksrt-modal-runtime__skeleton { + padding: 24px 18px; +} + +/* edit-header:与禁封表单头部同构(关闭钮靠右,红色警示徽标 + 标题居左)。 */ +.aksrt-user-ban-modal .edit-header, +.aksrt-user-ban-appeal-modal .edit-header { + position: relative; + padding-right: 32px; +} + +.aksrt-user-ban-modal .edit-header .close, +.aksrt-user-ban-appeal-modal .edit-header .close { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + float: none; + font-size: 20px; + line-height: 1; + cursor: pointer; + background: none; + border: 0; + padding: 2px 6px; +} + +/* 解封视图多彩横幅(参考主题 zib_get_modal_colorful_header('c-yellow', ...)): + 120px 高绝对定位横幅 + 旋转彩斑,后续表单整体下移 120px。 */ +.aksrt-user-ban-modal .modal-colorful-header, +.aksrt-user-ban-modal .colorful-bg, +.aksrt-user-ban-info-modal .modal-colorful-header, +.aksrt-user-ban-info-modal .colorful-bg, +.aksrt-user-ban-log-modal .modal-colorful-header, +.aksrt-user-ban-log-modal .colorful-bg { + position: relative; + overflow: hidden; + color: var(--this-color); + background: var(--this-bg); + background-size: 120%; +} + +.aksrt-user-ban-modal .modal-colorful-header, +.aksrt-user-ban-info-modal .modal-colorful-header, +.aksrt-user-ban-log-modal .modal-colorful-header { + position: absolute; + top: 0; + right: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + height: 120px; + border-radius: var(--main-radius, 8px) var(--main-radius, 8px) 0 0; +} + +.aksrt-user-ban-modal .modal-colorful-header + *, +.aksrt-user-ban-info-modal .modal-colorful-header + *, +.aksrt-user-ban-log-modal .modal-colorful-header + * { + margin-top: 120px; +} + +.aksrt-user-ban-modal .modal-colorful-header > .close, +.aksrt-user-ban-info-modal .modal-colorful-header > .close, +.aksrt-user-ban-log-modal .modal-colorful-header > .close { + position: absolute; + top: 10px; + right: 10px; + z-index: 9; + color: var(--this-color); + font-size: 18px; + opacity: 0.6; +} + +.aksrt-user-ban-modal .colorful-bg > .colorful-make, +.aksrt-user-ban-modal .colorful-bg > .colorful-make::before, +.aksrt-user-ban-modal .colorful-bg > .colorful-make::after, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::before, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::after, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::before, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::after { + position: absolute; + color: var(--this-color); + background: var(--this-bg); + border-radius: 100%; + content: ''; +} + +.aksrt-user-ban-modal .colorful-bg > .colorful-make, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make { + top: 60%; + bottom: 0; + width: 323px; + height: 290px; + animation: aksrt-ban-colorful 120s linear infinite; +} + +.aksrt-user-ban-modal .colorful-bg > .colorful-make::before, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::before, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::before { + top: -325px; + right: -558px; + bottom: 0; + width: 677px; + height: 300px; + opacity: 0.6; + transform: rotate(341deg); +} + +.aksrt-user-ban-modal .colorful-bg > .colorful-make::after, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make::after, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make::after { + top: -170px; + bottom: 0; + left: -262px; + width: 402px; + height: 214px; + opacity: 0.4; + transform: rotate(326deg); +} + +.aksrt-user-ban-modal .colorful-bg > .colorful-make + *, +.aksrt-user-ban-info-modal .colorful-bg > .colorful-make + *, +.aksrt-user-ban-log-modal .colorful-bg > .colorful-make + * { + position: relative; +} + +/* 单选徽章行(参考主题 .form-but-radio 契约):input 由 main.css 隐藏, + label 可点;选中态由 main.css 的 input:checked + .but-radio 驱动。 */ +.aksrt-user-ban-modal .form-but-radio label { + cursor: pointer; +} + +.aksrt-user-ban-modal .form-but-radio .but-radio { + user-select: none; +} + +/* 开关行(删除全部内容 / 禁止用户申诉):原生 checkbox 隐藏, + 视觉态由 main.css 的 input:checked ~ .form-switch 驱动。 */ +.aksrt-user-ban-modal .aksrt-user-ban-form label { + user-select: none; +} + +@keyframes aksrt-ban-colorful { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* ---- order review modal content ---- */ +.order-comment-from .shop-score-box { + display: flex; + align-items: center; + gap: 8px; + min-height: 36px; +} + +.order-comment-from .score-title { + width: 4.5em; + flex: 0 0 auto; + font-size: 13px; + color: var(--color-ink-2, #6b7280); +} + +.order-comment-from .score-icon { + display: inline-flex; + gap: 4px; + align-items: center; + height: 30px; +} + +.order-comment-from .icon-star { + display: inline-flex; + width: 22px; + height: 22px; + color: #d1d5db; + cursor: pointer; + transition: color 0.12s ease, transform 0.12s ease; +} + +.order-comment-from .icon-star svg { + width: 22px; + height: 22px; + fill: currentColor; +} + +.order-comment-from .icon-star.active, +.order-comment-from .icon-star.hover { + color: #fc7049; +} + +.order-comment-from .icon-star.hover { + transform: scale(1.08); +} + +.order-comment-from .score-text { + min-width: 3em; + font-size: 13px; + color: var(--color-ink-2, #6b7280); +} + +.order-comment-from textarea.form-control { + width: 100%; + border: 1px solid var(--color-line, #e5e7eb); + border-radius: 10px; + padding: 10px 12px; + font-size: 14px; + resize: vertical; + min-height: 96px; + background: var(--surface-1, #fff); + color: var(--color-ink, #111); +} + +:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +:is(.order-comment-from, .aksrt-report-modal) .form-upload .preview .add, +:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .add, +:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .preview-item { + width: 80px; + height: 80px; + border-radius: 10px; + border: 1px dashed var(--color-line, #d1d5db); + background: var(--surface-4, #f9fafb); + position: relative; + overflow: hidden; + cursor: pointer; +} + +/* 加号图标不在此重复定义:main.css 已有参考主题原生实现 + (.preview .add:before/:after —— 25px 圆角杠,inset:0 + margin:auto 居中)。 + 此前这里的 left/top:50% + translate 版本与该规则叠加导致过约束, + 加号被推到 75%/75% 只剩“L”形,故整体删除、统一走主样式包。 */ + +:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .preview-item img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .preview .preview-item .remove { + position: absolute; + top: 2px; + right: 2px; + width: 20px; + height: 20px; + border: 0; + border-radius: 999px; + background: rgba(0, 0, 0, 0.55); + color: #fff; + font-size: 12px; + line-height: 1; + cursor: pointer; +} + +:is(.order-comment-from, .aksrt-report-modal, .aksrt-after-sale-apply-modal) .form-upload .hide { + display: none !important; +} + +.order-comment-from .review-error { + color: #ef4444; + font-size: 13px; + margin-top: 8px; +} + +@media (max-width: 768px) { + .aksrt-modal-runtime:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { + width: calc(100vw - 20px); + } +} + +/* ---- 售后弹窗(申请 / 售后详细 / 超时效提示,参考主题 modal-mini 几何 1:1)---- + 三个弹窗与禁封申诉弹窗同几何:data_class='modal-mini'(宽 400px),圆角与 + 底色走 --main-radius / --main-bg-color;移动端由 --bottom 底部抽屉接管。 */ +.aksrt-after-sale-apply-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, +.aksrt-after-sale-detail-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog, +.aksrt-after-sale-expired-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog { + width: min(400px, calc(100vw - 32px)); + border-radius: var(--main-radius, 8px); + background: var(--main-bg-color, #fff); +} + +.aksrt-after-sale-apply-modal .aksrt-modal-runtime__skeleton, +.aksrt-after-sale-detail-modal .aksrt-modal-runtime__skeleton, +.aksrt-after-sale-expired-modal .aksrt-modal-runtime__skeleton { + padding: 24px 18px; +} + +/* 蓝色炫彩标题区(参考主题 zib_get_modal_colorful_header('jb-blue', ...)):120px + 绝对定位横幅 + 旋转彩斑,后续内容整体下移 120px,与禁封记录弹窗同构。 */ +.aksrt-after-sale-apply-modal .modal-colorful-header, +.aksrt-after-sale-detail-modal .modal-colorful-header, +.aksrt-after-sale-expired-modal .modal-colorful-header, +.aksrt-order-detail-modal .modal-colorful-header, +.aksrt-after-sale-apply-modal .colorful-bg, +.aksrt-after-sale-detail-modal .colorful-bg, +.aksrt-after-sale-expired-modal .colorful-bg, +.aksrt-order-detail-modal .colorful-bg { + position: relative; + overflow: hidden; + color: var(--this-color); + background: var(--this-bg); + background-size: 120%; +} + +.aksrt-after-sale-apply-modal .modal-colorful-header, +.aksrt-after-sale-detail-modal .modal-colorful-header, +.aksrt-after-sale-expired-modal .modal-colorful-header, +.aksrt-order-detail-modal .modal-colorful-header { + position: absolute; + top: 0; + right: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + height: 120px; + border-radius: var(--main-radius, 8px) var(--main-radius, 8px) 0 0; +} + +.aksrt-after-sale-apply-modal .modal-colorful-header + *, +.aksrt-after-sale-detail-modal .modal-colorful-header + *, +.aksrt-after-sale-expired-modal .modal-colorful-header + *, +.aksrt-order-detail-modal .modal-colorful-header + * { + margin-top: 120px; +} + +.aksrt-after-sale-apply-modal .modal-colorful-header > .close, +.aksrt-after-sale-detail-modal .modal-colorful-header > .close, +.aksrt-after-sale-expired-modal .modal-colorful-header > .close, +.aksrt-order-detail-modal .modal-colorful-header > .close { + position: absolute; + top: 10px; + right: 10px; + z-index: 9; + color: var(--this-color); + font-size: 18px; + opacity: 0.6; +} + +.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make, +.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::before, +.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::after, +.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make, +.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::before, +.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::after, +.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make, +.aksrt-order-detail-modal .colorful-bg > .colorful-make, +.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::before, +.aksrt-order-detail-modal .colorful-bg > .colorful-make::before, +.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::after, +.aksrt-order-detail-modal .colorful-bg > .colorful-make::after { + position: absolute; + color: var(--this-color); + background: var(--this-bg); + border-radius: 100%; + content: ''; +} + +.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make, +.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make, +.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make, +.aksrt-order-detail-modal .colorful-bg > .colorful-make { + top: 60%; + bottom: 0; + width: 323px; + height: 290px; + animation: aksrt-ban-colorful 120s linear infinite; +} + +.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::before, +.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::before, +.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::before, +.aksrt-order-detail-modal .colorful-bg > .colorful-make::before { + top: -325px; + right: -558px; + bottom: 0; + width: 677px; + height: 300px; + opacity: 0.6; + transform: rotate(341deg); +} + +.aksrt-after-sale-apply-modal .colorful-bg > .colorful-make::after, +.aksrt-after-sale-detail-modal .colorful-bg > .colorful-make::after, +.aksrt-after-sale-expired-modal .colorful-bg > .colorful-make::after, +.aksrt-order-detail-modal .colorful-bg > .colorful-make::after { + top: -170px; + bottom: 0; + left: -262px; + width: 402px; + height: 214px; + opacity: 0.4; + transform: rotate(326deg); +} + +/* 售后原因徽章:与举报弹窗一致,可换行且间距走 mr6/mb6 工具类。 */ +.aksrt-after-sale-apply-modal .form-but-radio .badg { + cursor: pointer; + user-select: none; +} + +/* 订单摘要与售后明细行 */ +.aksrt-after-sale-summary__row, +.aksrt-after-sale-detail__row { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 12px; + margin-bottom: 6px; +} + +.aksrt-after-sale-summary__row:last-child, +.aksrt-after-sale-detail__row:last-child { + margin-bottom: 0; +} + +.aksrt-after-sale-summary__value, +.aksrt-after-sale-detail__value { + min-width: 0; + text-align: right; + word-break: break-all; +} + +.aksrt-after-sale-detail__statusRow { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; +} + +.aksrt-after-sale-reason-text { + color: var(--color-ink-2, #4e5358); + background: var(--surface-2, #eee); + border-radius: 6px; + padding: 10px 12px; +} + +.aksrt-after-sale-images { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.aksrt-after-sale-images img { + width: 72px; + height: 72px; + object-fit: cover; + border-radius: 6px; + border: 1px solid var(--color-line, #e5e7eb); + display: block; +} + +.aksrt-after-sale-status.is-pending { color: var(--color-warning, #f59e0b); } +.aksrt-after-sale-status.is-processing { color: var(--color-info, #3b82f6); } +.aksrt-after-sale-status.is-approved, +.aksrt-after-sale-status.is-completed { color: var(--color-success, #10b981); } +.aksrt-after-sale-status.is-rejected, +.aksrt-after-sale-status.is-cancelled { color: var(--color-error, #ef4444); }