/* 列表加载骨架屏:数据在途时显示「加载中」的形,而非空状态。冷灰底上做轻微 shimmer。 */ @keyframes sk-shimmer { 0% { background-position: -480px 0; } 100% { background-position: 480px 0; } } .skeleton-block { background: var(--background-base, #f1f1f1); background-image: linear-gradient(90deg, rgba(0,0,0,0.03) 0%, rgba(0,0,0,0.07) 40%, rgba(0,0,0,0.03) 80%); background-size: 480px 100%; background-repeat: no-repeat; animation: sk-shimmer 1.2s ease-in-out infinite; border-radius: 8px; } .skeleton-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 16px; } .skeleton-grid .skeleton-card { aspect-ratio: 1 / 1; } .skeleton-rows { display: flex; flex-direction: column; gap: 10px; } .skeleton-rows .skeleton-line { height: 56px; } .skeleton-loading-tag { font-family: var(--font-mono, monospace); font-size: 12px; color: var(--black-alpha-56, #8a8a8a); padding: 4px 0 12px; }