.skeleton-wrap {
    width: 100%;
    padding: 10px 0;
    box-sizing: border-box;
}

.skeleton-card {
    position: relative;
    overflow: hidden;
    background: linear-gradient(135deg, rgba(255,255,255,0.75) 0%, rgba(244,247,252,0.05) 100%);
    border-radius: 8px;
    min-height: 350px;
    border: 1px solid rgba(180, 200, 230, 0.20);
    box-shadow: 0 2px 12px rgba(140,170,210,0.05);
    backdrop-filter: blur(6px);
}

.skeleton-card::before {
    content: "";
    position: absolute;
    top: 0;
    left: -140%;
    width: 75%;
    height: 100%;
    background: linear-gradient(90deg,
        transparent 0%,
        rgba(210, 228, 255, 0.22) 35%,
        rgba(185, 210, 245, 0.38) 50%,
        rgba(210, 228, 255, 0.22) 65%,
        transparent 100%);
    animation: glassAiScan 2.4s ease-in-out infinite;
}

.skeleton-card::after {
    content: "";
    position: absolute;
    width: 130px;
    height: 130px;
    background: radial-gradient(circle, rgba(160,195,240,0.12) 0%, transparent 72%);
    border-radius: 50%;
    bottom: -50px;
    left: -20px;
    filter: blur(14px);
    animation: glassGlowFloat 3.2s ease-in-out infinite alternate;
}

@keyframes glassAiScan {
    0%  { left: -140%; }
    100%{ left: 170%; }
}
@keyframes glassGlowFloat {
    0%   { transform: translateY(0) scale(1); opacity:0.35; }
    100% { transform: translateY(22px) scale(1.12); opacity:0.6; }
}

/* ========== 使用 > 直接子代选择器 ========== */
.skeleton-wrap > .por-row {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 12px !important;
    width:100% !important;
}
.skeleton-wrap > .por-row > .card-item {
    flex: 0 0 calc(20% - 10px) !important; /* PC一行5张 */
    box-sizing: border-box !important;
}

/* 骨架内部线条 */
.skeleton-header{
    height: 70px;
    padding:16px;
    position:relative;
}
.skeleton-h-line{
    width:60%;
    height:14px;
    background:rgba(0,0,0,0.07);
    border-radius:6px;
    margin-bottom:12px;
}
.skeleton-badge{
    position:absolute;
    right:12px;
    top:14px;
    width:45px;
    height:20px;
    background:rgba(0,0,0,0.06);
    border-radius:99px;
}
.skeleton-line{
    height:8px;
    background:rgba(0,0,0,0.06);
    margin:26px 20px;
    border-radius:6px;
}
.skeleton-line.short{
    width:45%;
}
.skeleton-bottom-block{
    height:42px;
    margin:2px 16px 12px;
    background:rgba(0,0,0,0.07);
    border-radius:8px;
}

/* 手机 <=576px：实现卡片居中，左右自动留白 */
@media screen and (max-width:576px) {
    .skeleton-wrap > .por-row {
        display:block !important;
        gap:unset !important;
    }
    .skeleton-wrap > .por-row > .card-item {
        flex:0 0 calc(50% - 6px) !important; 
        flex:none !important;
        width: calc(100% - 20px) !important;
        margin-left:16px !important;
        margin-right:6px !important;
        margin-bottom:20px !important;
    }

    .skeleton-card {
        min-height:220px !important;
    }
}








/* 占位层：透明占位，推开下方插件，维持上下间距 */
.alert-placeholder {
    height: 4px;
    margin: 0px auto 1px auto;
    box-sizing: border-box;
}
/* PC大屏（侧边栏展开 ≥768px） */
@media (min-width: 768px) {
    .alert-placeholder {
        width: calc(100% - 320px);
        max-width: 1200px;
        margin-left: 300px;
    }
}
@media (max-width: 767px) {
    .alert-placeholder {
        height: 3px;
        width: 100%;
        margin: 0 auto 1px auto;
    }
}
.alert-box {
    position: relative; /* 给关闭按钮绝对定位做参照 */
    background-color: rgba(255, 255, 255, 0.52); /* 框背景蓝色 */
    border: 1px solid(255, 255, 255, 0.62);
    color: #222; /* 内部文字白色适配蓝色背景 */
    border-radius: 6px;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 11px 36px 11px 16px;
}
/* PC大屏 和占位宽度同步 */
@media (min-width: 768px) {
    .alert-box {
        width: calc(100% - 330px);
        margin-left: 300px;
    }
}
/* 移动端 */
@media (max-width: 767px) {
    .alert-box {
        width: 94%;
        margin: 0 auto;
        padding: 10px 30px 10px 12px;
        gap: 10px;
    }
}
/* 盾牌图标 绿色 */
.alert-box .shield-icon {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    fill: #36d399;
}
@media (max-width: 767px) {
    .alert-box .shield-icon {
        width: 26px;
        height: 26px;
    }
}

/* 文字容器 两行文字 */
.alert-text-wrap {
    display: flex;
    flex-direction: column;
    gap: 3px;
    flex:1;
}
.alert-title {
    font-size: 15px;
    font-weight: 500;
}
.alert-desc {
    font-size: 12px;
    color: #FF0000; /* 浅色小字，蓝色背景看得清 */
}
@media (max-width: 767px) {
    .alert-title {
        font-size: 14px;
    }
    .alert-desc {
        font-size: 11px;
    }
}

/* 右侧登录按钮：白色底色，蓝色文字 */
.alert-login-btn{
    background:#1677ff;
    color:#ffffff;
    border:none;
    border-radius:4px;
    padding:6px 16px;
    font-size:14px;
    cursor:pointer;
    white-space:nowrap;
    text-decoration:none;
}
/* hover 鼠标悬浮绿色背景 */
.alert-login-btn:hover{
    background:#22c55e;
    color:#ffffff;
}
@media (max-width:767px){
    .alert-login-btn{
        padding:4px 10px;
        font-size:13px;
    }
}

/* 关闭按钮 */
.alert-box .close-btn {
    position:absolute;
    right:10px;
    top: 50%;
    transform: translateY(-50%);
    text-decoration:none !important;
    color:#4080ff !important;
    font-size:20px;
    line-height:1;
    z-index:10;
    cursor:pointer;
}
@media (max-width:767px){
    .alert-box .close-btn{
        font-size:17px;
        right:8px;
    }
}
.alert-box .close-btn:hover {
    color:#FF0000 !important; /* 悬浮：纯白色 × */
}





@keyframes spin {
    from {transform:rotate(0deg)}
    to {transform:rotate(360deg)}
}
@keyframes pulse {
    0%,100% {opacity:0.5}
    50% {opacity:1}
}
.loading-wrap {
    min-height:380px;
    width:100%;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:20px;
}
@media (min-width:998px) {
    .loading-wrap {
        min-height:730px;
    }
}
.loading-container-inner {
    display:flex;
    flex-direction:column;
    align-items:center;
}
.loading-circle-box {
    width:40px;
    height:40px;
    border:2px solid rgba(0,255,204,0.2);
    border-radius:50%;
    position:relative;
    margin-bottom:20px;
}
.loading-circle-box > div {
    position:absolute;
    inset:0;
    border:2px solid #00ffcc;
    border-radius:50%;
    border-top-color:transparent;
    animation:spin 1s linear infinite;
}
.loading-text-main {
    color:#00ffcc;
    font-size:18px;
    animation:pulse 1.8s ease-in-out infinite;
}
.loading-text-sub {
    color:#9ca3af;
    font-size:13px;
    margin-top:8px;
}