.page-loading-frame{position:relative;width:100%;height:100%;min-height:220px;overflow:hidden}
.page-loading-frame--viewport{height:100dvh}
/* 管理模块独立更新时，宿主页面可能尚无对应 Tailwind 最小高度类。 */
.relative:has(>.page-loading-mask){min-height:260px}
.page-loading-mask{position:absolute;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;background:rgba(242,246,253,.74);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.page-loading-content{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;max-width:min(80%,360px);text-align:center;color:#60718c}
.page-loading-logo-stage{position:relative;display:grid;place-items:center;width:176px;height:176px;perspective:640px}
.page-loading-logo-halo{position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle,rgba(65,114,234,.15),rgba(65,114,234,.04) 48%,transparent 72%);animation:page-loading-halo 2.8s ease-in-out infinite}
.page-loading-logo{position:relative;width:128px;height:128px;object-fit:contain;filter:drop-shadow(0 8px 14px rgba(43,90,180,.18));animation:page-loading-logo 2.8s ease-in-out infinite;transform-style:preserve-3d;will-change:transform}
.page-loading-message{font-size:13px;line-height:1.6;letter-spacing:.03em}
:root[data-theme='dark'] .page-loading-mask{background:rgba(15,23,42,.76)}
:root[data-theme='dark'] .page-loading-content{color:#c3cee1}
@keyframes page-loading-logo{0%,100%{transform:rotateY(0deg) scale(.78)}50%{transform:rotateY(180deg) scale(1.15)}}
@keyframes page-loading-halo{0%,100%{transform:scale(.9);opacity:.65}50%{transform:scale(1.18);opacity:1}}
/* 用户要求加载时保留 Logo 动效；减少动态效果模式采用较慢节奏。 */
@media(prefers-reduced-motion:reduce){.page-loading-logo,.page-loading-logo-halo{animation-duration:4.2s}}
