# Polish: Loading States Every async view needs 3 states: loading skeleton, empty state, timeout warning. ## Skeleton Pattern ```vue

No items yet

``` ## Timeout Warning After 15s show "Taking longer than expected...", after 30s show troubleshooting. ```typescript const loadingTooLong = ref(false) const timeout = setTimeout(() => { loadingTooLong.value = true }, 15000) watch(isLoading, (val) => { if (!val) clearTimeout(timeout) }) ``` ## Priority Views Apps.vue, AppDetails.vue, Marketplace.vue, Dashboard.vue, Cloud.vue, Settings.vue, Server.vue ## Verify Each view has: `isLoading` ref, skeleton section, empty state, timeout warning. Use global classes only.