@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes bounce{0%,80%,to{opacity:.5;transform:scale(.6)}40%{opacity:1;transform:scale(1)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.page-loader-overlay{background:var(--background);z-index:9999;justify-content:center;align-items:center;width:100vw;height:100vh;display:flex;position:fixed;top:0;left:0}.page-loader-content{text-align:center;color:var(--primary)}.page-spinner{border:4px solid var(--outline-variant);border-top:4px solid var(--primary);border-radius:50%;width:50px;height:50px;margin:0 auto 20px;animation:1s linear infinite spin}.page-loading-text{color:var(--on-surface-variant);margin:0;font-size:18px;font-weight:500}.button-loader{justify-content:center;align-items:center;display:inline-flex}.button-dots{display:flex}.button-dot{background:currentColor;border-radius:50%;animation:1.4s ease-in-out infinite bounce}.button-dot:first-child{animation-delay:-.32s}.button-dot:nth-child(2){animation-delay:-.16s}.button-loader-sm{width:16px;height:16px}.button-loader-sm .button-dots{gap:3px}.button-loader-sm .button-dot{width:4px;height:4px}.button-loader-md{width:20px;height:20px}.button-loader-md .button-dots{gap:4px}.button-loader-md .button-dot{width:5px;height:5px}.button-loader-lg{width:24px;height:24px}.button-loader-lg .button-dots{gap:5px}.button-loader-lg .button-dot{width:6px;height:6px}.skeleton-container{gap:12px;padding:16px;display:flex}.skeleton{background:linear-gradient(90deg,var(--surface-container-high)25%,var(--surface-container-highest)50%,var(--surface-container-high)75%);background-size:200% 100%;animation:1.5s infinite shimmer}.skeleton-avatar{border-radius:50%;flex-shrink:0}.skeleton-content{flex-direction:column;flex:1;gap:8px;display:flex}.skeleton-line{width:100%}.skeleton-line-short{width:70%}.spinner-loader{border:2px solid var(--outline-variant);border-radius:50%;animation:1s linear infinite spin;display:inline-block}.pulse-loader{background:linear-gradient(90deg,var(--surface-container-high)25%,var(--surface-container-highest)50%,var(--surface-container-high)75%);background-size:200% 100%;animation:1.5s infinite shimmer}.progress-container{align-items:center;gap:12px;width:100%;display:flex}.progress-bar{background:var(--surface-container-high);border:1px solid var(--outline);flex:1;overflow:hidden}.progress-fill{background:linear-gradient(90deg,var(--primary)0%,var(--secondary)100%);border-radius:inherit;height:100%;transition:width .3s}.progress-text{color:var(--on-surface-variant);text-align:right;min-width:45px;font-size:14px;font-weight:500}.table-skeleton{width:100%}.table-row{border-bottom:1px solid var(--outline);gap:16px;padding:12px 0;display:grid}.table-cell{height:20px}.card-skeleton{border:1px solid var(--outline-variant);background:var(--surface-container-high);overflow:hidden}.card-image{width:100%}.card-content{flex-direction:column;gap:8px;padding:16px;display:flex}.card-skeleton .skeleton-line{width:100%;height:16px}.card-skeleton .skeleton-line-short{width:60%}
