.spinner{justify-content:center;align-items:center;display:inline-flex}.spinner__track{border-style:solid;border-color:#0000;border-radius:50%;animation:.75s linear infinite spinner-rotate}.spinner--xs .spinner__track{border-width:1.5px;width:12px;height:12px}.spinner--sm .spinner__track{border-width:2px;width:16px;height:16px}.spinner--md .spinner__track{border-width:2.5px;width:22px;height:22px}.spinner--lg .spinner__track{border-width:3px;width:32px;height:32px}.spinner--dark .spinner__track{border-top-color:#1a1a1a}.spinner--light .spinner__track{border-top-color:#fff}.spinner--blue .spinner__track{border-top-color:#1a73e8}.spinner--gray .spinner__track{border-top-color:#888}@keyframes spinner-rotate{to{transform:rotate(360deg)}}.app-loader{z-index:9999;background:#fff;flex-direction:column;justify-content:center;align-items:center;gap:16px;animation:.2s app-loader-fadein;display:flex;position:fixed;inset:0}.app-loader__logo{color:#1a1a1a;letter-spacing:.5px;opacity:.5;font-size:15px;font-weight:600}.app-loader--fadeout{animation:.3s forwards app-loader-fadeout}@keyframes app-loader-fadein{0%{opacity:0}to{opacity:1}}@keyframes app-loader-fadeout{0%{opacity:1}to{opacity:0}}.skeleton{background:#f0f0f0;border-radius:4px;position:relative;overflow:hidden}.skeleton:after{content:"";background:linear-gradient(90deg,#0000 0%,#fff9 50%,#0000 100%) 0 0/200% 100%;animation:1.4s infinite skeleton-shimmer;position:absolute;inset:0}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton--text-sm{height:12px}.skeleton--text{height:14px}.skeleton--text-lg{height:18px}.skeleton--heading{height:22px}.skeleton--avatar{border-radius:50%;flex-shrink:0;width:36px;height:36px}.skeleton--badge{border-radius:20px;height:22px}.skeleton--btn{border-radius:6px;height:34px}.skeleton--full{width:100%}.skeleton-table{border-collapse:collapse;width:100%}.skeleton-table__row{border-bottom:1px solid #f5f5f5}.skeleton-table__row td{vertical-align:middle;padding:14px 12px}.skeleton-cards{gap:16px;display:grid}.skeleton-card{background:#fff;border:1px solid #eee;border-radius:8px;flex-direction:column;gap:12px;padding:18px;display:flex}.skeleton-list{flex-direction:column;gap:1px;display:flex}.skeleton-list__item{border-bottom:1px solid #f5f5f5;align-items:center;gap:12px;padding:14px 0;display:flex}.skeleton-list__content{flex-direction:column;flex:1;gap:8px;display:flex}.app-loader__icon{color:#bbb;animation:1s linear infinite spinner-rotate}
