-
-
+
@@ -41,36 +52,81 @@ export default defineComponent({
display: flex;
align-items: center;
justify-content: center;
- z-index: 2000;
- background-color: #5a5858;
+ z-index: 1000;
+ background-color: rgba(0, 0, 0, 0.45);
}
-.loading-content-goods {
+.loading-container {
display: flex;
flex-direction: column;
align-items: center;
- gap: 32px;
+ gap: 20px;
}
-.loading-logo-goods {
- animation: logo-breathe 2s ease-in-out infinite;
+/* Ring Spinner */
+.loading-ring {
+ position: relative;
+ width: 56px;
+ height: 56px;
}
-@keyframes logo-breathe {
- 0%, 100% { transform: scale(1); }
- 50% { transform: scale(0.94); }
-}
-
-.spinner-goods {
- border: 3px solid rgba(255, 255, 255, 0.4);
- border-top: 3px solid #ffffff;
+.loading-ring div {
+ box-sizing: border-box;
+ display: block;
+ position: absolute;
+ width: 56px;
+ height: 56px;
+ border: 3px solid transparent;
border-radius: 50%;
- width: 40px;
- height: 40px;
- animation: spin 0.9s linear infinite;
+ animation: loading-ring-spin 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
}
-@keyframes spin {
- to { transform: rotate(360deg); }
+.loading-ring div:nth-child(1) {
+ border-top-color: var(--global-primary-color);
+ animation-delay: -0.45s;
+}
+
+.loading-ring div:nth-child(2) {
+ border-top-color: color-mix(in srgb, var(--global-primary-color) 70%, white);
+ animation-delay: -0.3s;
+}
+
+.loading-ring div:nth-child(3) {
+ border-top-color: color-mix(in srgb, var(--global-primary-color) 40%, white);
+ animation-delay: -0.15s;
+}
+
+.loading-ring div:nth-child(4) {
+ border-top-color: color-mix(in srgb, var(--global-primary-color) 15%, white);
+}
+
+@keyframes loading-ring-spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+/* Dot pulse */
+.loading-dots {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+}
+
+.loading-dots span {
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ background-color: var(--global-primary-color);
+ animation: loading-dot-pulse 1.2s ease-in-out infinite;
+ opacity: 0.3;
+}
+
+.loading-dots span:nth-child(1) { animation-delay: 0s; }
+.loading-dots span:nth-child(2) { animation-delay: 0.2s; }
+.loading-dots span:nth-child(3) { animation-delay: 0.4s; }
+
+@keyframes loading-dot-pulse {
+ 0%, 100% { transform: scale(1); opacity: 0.3; }
+ 50% { transform: scale(1.5); opacity: 1; }
}