wynai commited on
Commit
6be6b8e
·
verified ·
1 Parent(s): 285caa4

Update custom.css

Browse files
Files changed (1) hide show
  1. custom.css +153 -136
custom.css CHANGED
@@ -1,166 +1,208 @@
1
- /* ===========================
2
  WynGPT - custom.css (updated)
3
- =========================== */
4
 
5
  /* === Voice mode button: gradient + blur + glow === */
6
- [aria-label="Voice mode"]{
7
- background: linear-gradient(135deg,#ffffff,#cceeff,#99ddff,#66ccff,#33ccff,#00ccff);
8
  background-size: 600% 600%;
9
  animation: blendShift 16s ease-in-out infinite;
10
- color:#fff;border:none;
11
- backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
12
- box-shadow: 0 0 20px rgba(0,204,255,.4),0 0 40px rgba(0,204,255,.3),0 0 60px rgba(0,204,255,.2);
13
- transition:.3s; position:relative; z-index:1;
 
 
 
 
 
 
 
 
 
14
  }
15
- @keyframes blendShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
16
-
17
- /* === Send button === */
18
- /*
19
- #send-message-button{ background:#33ccff !important; }
20
- html.dark #send-message-button, :root.dark #send-message-button{ background:#0099ff !important; }
21
- */
22
 
23
  /* === Tooltip (Tippy) blur === */
24
- .tippy-box{
25
- background:rgba(255,255,255,.1) !important;
26
- backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important;
27
- color:#000 !important; border:1px solid rgba(0,0,0,.1) !important;
 
 
28
  }
29
- html.dark .tippy-box, :root.dark .tippy-box{
30
- background:rgba(0,0,0,.1) !important;
31
- backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important;
32
- color:#fff !important; border:1px solid rgba(255,255,255,.1) !important;
 
 
33
  }
34
 
35
- /* ================= (Sidebar styles REMOVED as requested) ================= */
36
-
37
  /* ================= Khung nhập tin nhắn ================= */
38
- html.light #message-textarea{
39
- backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
40
- background: rgba(255,255,255,.5) !important; color:#000 !important;
41
- border:1px solid rgba(0,0,0,.1); border-radius:8px;
 
 
 
42
  }
43
- html.dark #message-textarea, :root.dark #message-textarea{
44
- backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
45
- background: rgba(0,0,0,.35) !important; color:#fff !important;
46
- border:1px solid rgba(255,255,255,.1); border-radius:8px;
 
 
 
47
  }
48
 
49
  /* ================= Popup / Menu ================= */
50
- html:has([role="dialog"][data-state="open"]), html:has([role="menu"][data-state="open"]) { position:relative; }
51
  html.light:has([role="dialog"][data-state="open"])::before,
52
- html.light:has([role="menu"][data-state="open"])::before{
53
- content:""; position:fixed; inset:0; z-index: 40;
54
- background: rgba(255,255,255,.1);
55
- backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
56
- pointer-events:none;
 
 
 
 
57
  }
58
  html.dark:has([role="dialog"][data-state="open"])::before,
59
- html.dark:has([role="menu"][data-state="open"])::before{
60
- content:""; position:fixed; inset:0; z-index: 40;
61
- background: rgba(0,0,0,.18);
62
- backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
63
- pointer-events:none;
 
 
 
 
64
  }
65
 
66
  /* Popup/menu mờ ĐẬM hơn với màu blur mới */
67
- html.light [role="dialog"], html.light [role="menu"],
68
- html.dark [role="dialog"], html.dark [role="menu"]{
69
- background: rgba(23,23,23,0.5) !important;
70
- backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important;
71
  color: inherit !important;
72
- border-radius:12px; overflow:hidden;
73
- border:1px solid rgba(255,255,255,.12);
74
- position:relative; z-index: 50 !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  }
76
 
77
  /* ================= Cài đặt: POPUP (center, bigger) ================= */
78
- [role="dialog"]{
79
  position: fixed !important;
80
- top: 50% !important; left: 50% !important;
81
- transform: translate(-50%,-50%) !important;
 
82
  width: min(960px, 96vw) !important;
83
- max-height: 90vh !important; height: auto !important;
84
- margin:0 !important; max-width:none !important;
85
- border-radius:16px !important;
 
 
86
  overflow: auto !important;
87
  }
88
 
89
  /* Không blur các phần con bên trong dialog */
90
- [role="dialog"] *{
91
  backdrop-filter: none !important;
92
  -webkit-backdrop-filter: none !important;
93
  background-color: transparent;
94
  }
95
 
96
  /* Nút LƯU */
97
- [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]){
98
- border-radius: 10px; padding: .55rem 1rem; font-weight:600;
99
- border:1px solid rgba(0,0,0,.8);
100
- background:#000; color:#fff;
 
 
 
101
  transition: transform .12s ease, opacity .2s ease;
102
  }
103
- [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]):hover{ opacity:.9 }
104
- [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]):active{ transform: translateY(1px) }
105
- html.dark [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]){
106
- background:#fff; color:#000; border-color: rgba(255,255,255,.85);
 
 
107
  }
108
 
109
  /* Toast/thông báo luôn rõ */
110
- [role="status"], .toast, [data-sonner-toaster]{
111
- position:relative; z-index:60;
112
- backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
 
 
113
  }
114
 
115
- [role="switch"]{
 
116
  position: relative;
117
- display:inline-flex; align-items:center; justify-content:flex-start;
118
- width: 36px; height: 20px; border-radius:999px;
119
- background: rgba(0,0,0,.2);
 
 
 
 
120
  transition: background-color .25s ease, box-shadow .25s ease;
121
  }
122
- html.dark [role="switch"]{ background: rgba(255,255,255,.25); }
123
-
124
- [role="switch"]::before{
125
- content:""; position:absolute; top:2px; left:2px; width:16px; height:16px;
126
- border-radius:999px; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.25);
 
 
 
 
 
 
127
  transition: transform .25s ease;
128
  }
129
- html.dark [role="switch"]::before{ background:#000; box-shadow:0 1px 2px rgba(0,0,0,.35); }
130
-
131
  [role="switch"][aria-checked="true"] {
132
- background-color: #0099ff !important; /* xanh dương */
133
- box-shadow: 0 0 10px rgba(0, 153, 255, 0.7) !important; /* đổ bóng xanh */
134
- transition: background-color 0.3s ease, box-shadow 0.3s ease; /* mượt khi chuyển */
135
  }
136
- [role="switch"][aria-checked="true"]::before{ transform: translateX(16px); }
137
-
138
- /* Light mode */
139
- #send-message-button {
140
- background-color: #33ccff !important;
141
- }
142
-
143
- /* Dark mode */
144
- html.dark #send-message-button,
145
- :root.dark #send-message-button {
146
- background-color: #0099ff !important;
147
- }
148
-
149
 
 
 
150
 
 
 
151
 
 
152
  html:not(:has(#logo))::before,
153
  html:not(:has(#logo))::after,
154
- body:not(:has(#logo))::after {
155
- content: none !important;
156
- }
157
  html {
158
  --bar-w: 220px;
159
  --bar-h: 8px;
160
  --bar-bottom: 10%;
161
- --track-bg: rgba(255,255,255,0.18);
162
- --glow-1: rgba(59,130,246,0.65);
163
- --glow-2: rgba(56,189,248,0.45);
164
  }
165
  html::before {
166
  content: "";
@@ -172,7 +214,7 @@ html::before {
172
  height: var(--bar-h);
173
  background: var(--track-bg);
174
  border-radius: 999px;
175
- box-shadow: 0 0 0 1px rgba(255,255,255,0.06) inset;
176
  pointer-events: none;
177
  z-index: 9999;
178
  animation: fade-out 1s ease forwards;
@@ -188,21 +230,12 @@ html::after {
188
  border-radius: 999px;
189
  pointer-events: none;
190
  z-index: 10000;
191
- background: linear-gradient(90deg,
192
- #60a5fa,
193
- #3b82f6,
194
- #2563eb,
195
- #1d4ed8,
196
- #3b82f6,
197
- #38bdf8,
198
- #0ea5e9,
199
- #60a5fa);
200
  background-size: 300% 100%;
201
  box-shadow: 0 0 10px var(--glow-1), 0 0 18px var(--glow-2);
202
- animation:
203
- loading-grow 4s cubic-bezier(0.65, 0, 1, 1) forwards,
204
- loading-shimmer 1.2s linear infinite,
205
- fade-out 1s ease forwards 10s;
206
  }
207
  body::after {
208
  content: var(--label, "Đang chuẩn bị mọi thứ");
@@ -217,55 +250,39 @@ body::after {
217
  letter-spacing: 0.2px;
218
  pointer-events: none;
219
  z-index: 10001;
220
- color: #1f2937;
221
- text-shadow: 0 1px 2px rgba(0,0,0,0.45);
222
  animation: loading-label 4s cubic-bezier(0.65, 0, 1, 1) forwards, fade-out 1s ease forwards 10s;
223
  }
224
  html.dark body::after { color: #ffffff; }
225
  html.light body::after { color: #1f2937; }
226
 
227
- @keyframes loading-grow {
228
- from { width: 0; }
229
- to { width: calc(var(--bar-w) * 0.99); }
230
- }
231
- @keyframes loading-shimmer {
232
- 0% { background-position: 0% 50%; }
233
- 100% { background-position: 300% 50%; }
234
- }
235
  @keyframes loading-label {
236
  0% { opacity: 1; filter: blur(0px); --label: "Đang chuẩn bị mọi thứ"; }
237
  9% { opacity: 0; filter: blur(6px); }
238
  10% { --label: "Truy xuất CSDL"; opacity: 0; filter: blur(6px); }
239
  11.5%{ opacity: 1; filter: blur(0px); }
240
-
241
  23% { opacity: 0; filter: blur(6px); }
242
  24% { --label: "Kiểm tra API/MCP"; opacity: 0; filter: blur(6px); }
243
  25.5%{ opacity: 1; filter: blur(0px); }
244
-
245
  29% { opacity: 0; filter: blur(6px); }
246
  30% { --label: "Xây dựng giao diện"; opacity: 0; filter: blur(6px); }
247
  31.5%{ opacity: 1; filter: blur(0px); }
248
-
249
  45% { opacity: 0; filter: blur(6px); }
250
  46% { --label: "Đang kết nối đến AWS"; opacity: 0; filter: blur(6px); }
251
  47.5%{ opacity: 1; filter: blur(0px); }
252
-
253
  68% { opacity: 0; filter: blur(6px); }
254
  69% { --label: "Xác thực user token"; opacity: 0; filter: blur(6px); }
255
  70.5%{ opacity: 1; filter: blur(0px); }
256
-
257
  87% { opacity: 0; filter: blur(6px); }
258
  88% { --label: "Khởi chạy Plugin"; opacity: 0; filter: blur(6px); }
259
  89.5%{ opacity: 1; filter: blur(0px); }
260
-
261
  98% { opacity: 0; filter: blur(6px); }
262
  99% { --label: "Kiểm tra lại lần cuối"; opacity: 0; filter: blur(6px); }
263
  100% { opacity: 1; filter: blur(0px); }
264
  }
265
- @keyframes fade-out {
266
- to { opacity: 0; visibility: hidden; }
267
- }
268
-
269
  @media (prefers-reduced-motion: reduce) {
270
  html::after { animation: loading-grow 4s linear forwards, fade-out 1s ease forwards 10s; }
271
  body::after { animation: fade-out 1s ease forwards 10s; }
 
1
+ /**************************
2
  WynGPT - custom.css (updated)
3
+ ***************************/
4
 
5
  /* === Voice mode button: gradient + blur + glow === */
6
+ [aria-label="Voice mode"] {
7
+ background: linear-gradient(135deg, #ffffff, #cceeff, #99ddff, #66ccff, #33ccff, #00ccff);
8
  background-size: 600% 600%;
9
  animation: blendShift 16s ease-in-out infinite;
10
+ color: #fff;
11
+ border: none;
12
+ backdrop-filter: blur(10px);
13
+ -webkit-backdrop-filter: blur(10px);
14
+ box-shadow: 0 0 20px rgba(0, 204, 255, .4), 0 0 40px rgba(0, 204, 255, .3), 0 0 60px rgba(0, 204, 255, .2);
15
+ transition: .3s;
16
+ position: relative;
17
+ z-index: 1;
18
+ }
19
+ @keyframes blendShift {
20
+ 0% { background-position: 0% 50% }
21
+ 50% { background-position: 100% 50% }
22
+ 100% { background-position: 0% 50% }
23
  }
 
 
 
 
 
 
 
24
 
25
  /* === Tooltip (Tippy) blur === */
26
+ .tippy-box {
27
+ background: rgba(255, 255, 255, .1) !important;
28
+ backdrop-filter: blur(10px) !important;
29
+ -webkit-backdrop-filter: blur(10px) !important;
30
+ color: #000 !important;
31
+ border: 1px solid rgba(0, 0, 0, .1) !important;
32
  }
33
+ html.dark .tippy-box, :root.dark .tippy-box {
34
+ background: rgba(0, 0, 0, .1) !important;
35
+ backdrop-filter: blur(10px) !important;
36
+ -webkit-backdrop-filter: blur(10px) !important;
37
+ color: #fff !important;
38
+ border: 1px solid rgba(255, 255, 255, .1) !important;
39
  }
40
 
 
 
41
  /* ================= Khung nhập tin nhắn ================= */
42
+ html.light #message-textarea {
43
+ backdrop-filter: blur(8px);
44
+ -webkit-backdrop-filter: blur(8px);
45
+ background: rgba(255, 255, 255, .5) !important;
46
+ color: #000 !important;
47
+ border: 1px solid rgba(0, 0, 0, .1);
48
+ border-radius: 8px;
49
  }
50
+ html.dark #message-textarea, :root.dark #message-textarea {
51
+ backdrop-filter: blur(8px);
52
+ -webkit-backdrop-filter: blur(8px);
53
+ background: rgba(0, 0, 0, .35) !important;
54
+ color: #fff !important;
55
+ border: 1px solid rgba(255, 255, 255, .1);
56
+ border-radius: 8px;
57
  }
58
 
59
  /* ================= Popup / Menu ================= */
60
+ html:has([role="dialog"][data-state="open"]), html:has([role="menu"][data-state="open"]) { position: relative; }
61
  html.light:has([role="dialog"][data-state="open"])::before,
62
+ html.light:has([role="menu"][data-state="open"])::before {
63
+ content: "";
64
+ position: fixed;
65
+ inset: 0;
66
+ z-index: 40;
67
+ background: rgba(255, 255, 255, .1);
68
+ backdrop-filter: blur(10px);
69
+ -webkit-backdrop-filter: blur(10px);
70
+ pointer-events: none;
71
  }
72
  html.dark:has([role="dialog"][data-state="open"])::before,
73
+ html.dark:has([role="menu"][data-state="open"])::before {
74
+ content: "";
75
+ position: fixed;
76
+ inset: 0;
77
+ z-index: 40;
78
+ background: rgba(0, 0, 0, .18);
79
+ backdrop-filter: blur(10px);
80
+ -webkit-backdrop-filter: blur(10px);
81
+ pointer-events: none;
82
  }
83
 
84
  /* Popup/menu mờ ĐẬM hơn với màu blur mới */
85
+ html.light [role="dialog"], html.light [role="menu"] {
86
+ background: rgba(255, 255, 255, 0.5) !important;
87
+ backdrop-filter: blur(10px) !important;
88
+ -webkit-backdrop-filter: blur(10px) !important;
89
  color: inherit !important;
90
+ border-radius: 12px;
91
+ overflow: hidden;
92
+ border: 1px solid rgba(0, 0, 0, .12);
93
+ position: relative;
94
+ z-index: 50 !important;
95
+ }
96
+ html.dark [role="dialog"], html.dark [role="menu"] {
97
+ background: rgba(255, 255, 255, 0.2) !important;
98
+ backdrop-filter: blur(10px) !important;
99
+ -webkit-backdrop-filter: blur(10px) !important;
100
+ color: inherit !important;
101
+ border-radius: 12px;
102
+ overflow: hidden;
103
+ border: 1px solid rgba(255, 255, 255, .12);
104
+ position: relative;
105
+ z-index: 50 !important;
106
  }
107
 
108
  /* ================= Cài đặt: POPUP (center, bigger) ================= */
109
+ [role="dialog"] {
110
  position: fixed !important;
111
+ top: 50% !important;
112
+ left: 50% !important;
113
+ transform: translate(-50%, -50%) !important;
114
  width: min(960px, 96vw) !important;
115
+ max-height: 90vh !important;
116
+ height: auto !important;
117
+ margin: 0 !important;
118
+ max-width: none !important;
119
+ border-radius: 16px !important;
120
  overflow: auto !important;
121
  }
122
 
123
  /* Không blur các phần con bên trong dialog */
124
+ [role="dialog"] * {
125
  backdrop-filter: none !important;
126
  -webkit-backdrop-filter: none !important;
127
  background-color: transparent;
128
  }
129
 
130
  /* Nút LƯU */
131
+ [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]) {
132
+ border-radius: 10px;
133
+ padding: .55rem 1rem;
134
+ font-weight: 600;
135
+ border: 1px solid rgba(0, 0, 0, .8);
136
+ background: #000;
137
+ color: #fff;
138
  transition: transform .12s ease, opacity .2s ease;
139
  }
140
+ [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]):hover { opacity: .9 }
141
+ [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]):active { transform: translateY(1px) }
142
+ html.dark [role="dialog"] button:is(#save-button, [type="submit"], [aria-label*="Lưu" i], [aria-label*="Save" i], [data-action="save"], [data-testid*="save" i], [id*="save" i], [class*="save" i]) {
143
+ background: #fff;
144
+ color: #000;
145
+ border-color: rgba(255, 255, 255, .85);
146
  }
147
 
148
  /* Toast/thông báo luôn rõ */
149
+ [role="status"], .toast, [data-sonner-toaster] {
150
+ position: relative;
151
+ z-index: 60;
152
+ backdrop-filter: none !important;
153
+ -webkit-backdrop-filter: none !important;
154
  }
155
 
156
+ /* Switch */
157
+ [role="switch"] {
158
  position: relative;
159
+ display: inline-flex;
160
+ align-items: center;
161
+ justify-content: flex-start;
162
+ width: 36px;
163
+ height: 20px;
164
+ border-radius: 999px;
165
+ background: rgba(0, 0, 0, .2);
166
  transition: background-color .25s ease, box-shadow .25s ease;
167
  }
168
+ html.dark [role="switch"] { background: rgba(255, 255, 255, .25); }
169
+ [role="switch"]::before {
170
+ content: "";
171
+ position: absolute;
172
+ top: 2px;
173
+ left: 2px;
174
+ width: 16px;
175
+ height: 16px;
176
+ border-radius: 999px;
177
+ background: #fff;
178
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .25);
179
  transition: transform .25s ease;
180
  }
181
+ html.dark [role="switch"]::before { background: #000; box-shadow: 0 1px 2px rgba(0, 0, 0, .35); }
 
182
  [role="switch"][aria-checked="true"] {
183
+ background-color: #0099ff !important;
184
+ box-shadow: 0 0 10px rgba(0, 153, 255, 0.7) !important;
185
+ transition: background-color 0.3s ease, box-shadow 0.3s ease;
186
  }
187
+ [role="switch"][aria-checked="true"]::before { transform: translateX(16px); }
 
 
 
 
 
 
 
 
 
 
 
 
188
 
189
+ /* Light mode send button */
190
+ #send-message-button { background-color: #33ccff !important; }
191
 
192
+ /* Dark mode send button */
193
+ html.dark #send-message-button, :root.dark #send-message-button { background-color: #0099ff !important; }
194
 
195
+ /* Loading bar + label */
196
  html:not(:has(#logo))::before,
197
  html:not(:has(#logo))::after,
198
+ body:not(:has(#logo))::after { content: none !important; }
 
 
199
  html {
200
  --bar-w: 220px;
201
  --bar-h: 8px;
202
  --bar-bottom: 10%;
203
+ --track-bg: rgba(255, 255, 255, 0.18);
204
+ --glow-1: rgba(59, 130, 246, 0.65);
205
+ --glow-2: rgba(56, 189, 248, 0.45);
206
  }
207
  html::before {
208
  content: "";
 
214
  height: var(--bar-h);
215
  background: var(--track-bg);
216
  border-radius: 999px;
217
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06) inset;
218
  pointer-events: none;
219
  z-index: 9999;
220
  animation: fade-out 1s ease forwards;
 
230
  border-radius: 999px;
231
  pointer-events: none;
232
  z-index: 10000;
233
+ background: linear-gradient(90deg, #60a5fa, #3b82f6, #2563eb, #1d4ed8, #3b82f6, #38bdf8, #0ea5e9, #60a5fa);
 
 
 
 
 
 
 
 
234
  background-size: 300% 100%;
235
  box-shadow: 0 0 10px var(--glow-1), 0 0 18px var(--glow-2);
236
+ animation: loading-grow 4s cubic-bezier(0.65, 0, 1, 1) forwards,
237
+ loading-shimmer 1.2s linear infinite,
238
+ fade-out 1s ease forwards 10s;
 
239
  }
240
  body::after {
241
  content: var(--label, "Đang chuẩn bị mọi thứ");
 
250
  letter-spacing: 0.2px;
251
  pointer-events: none;
252
  z-index: 10001;
253
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
 
254
  animation: loading-label 4s cubic-bezier(0.65, 0, 1, 1) forwards, fade-out 1s ease forwards 10s;
255
  }
256
  html.dark body::after { color: #ffffff; }
257
  html.light body::after { color: #1f2937; }
258
 
259
+ @keyframes loading-grow { from { width: 0; } to { width: calc(var(--bar-w) * 0.99); } }
260
+ @keyframes loading-shimmer { 0% { background-position: 0% 50%; } 100% { background-position: 300% 50%; } }
 
 
 
 
 
 
261
  @keyframes loading-label {
262
  0% { opacity: 1; filter: blur(0px); --label: "Đang chuẩn bị mọi thứ"; }
263
  9% { opacity: 0; filter: blur(6px); }
264
  10% { --label: "Truy xuất CSDL"; opacity: 0; filter: blur(6px); }
265
  11.5%{ opacity: 1; filter: blur(0px); }
 
266
  23% { opacity: 0; filter: blur(6px); }
267
  24% { --label: "Kiểm tra API/MCP"; opacity: 0; filter: blur(6px); }
268
  25.5%{ opacity: 1; filter: blur(0px); }
 
269
  29% { opacity: 0; filter: blur(6px); }
270
  30% { --label: "Xây dựng giao diện"; opacity: 0; filter: blur(6px); }
271
  31.5%{ opacity: 1; filter: blur(0px); }
 
272
  45% { opacity: 0; filter: blur(6px); }
273
  46% { --label: "Đang kết nối đến AWS"; opacity: 0; filter: blur(6px); }
274
  47.5%{ opacity: 1; filter: blur(0px); }
 
275
  68% { opacity: 0; filter: blur(6px); }
276
  69% { --label: "Xác thực user token"; opacity: 0; filter: blur(6px); }
277
  70.5%{ opacity: 1; filter: blur(0px); }
 
278
  87% { opacity: 0; filter: blur(6px); }
279
  88% { --label: "Khởi chạy Plugin"; opacity: 0; filter: blur(6px); }
280
  89.5%{ opacity: 1; filter: blur(0px); }
 
281
  98% { opacity: 0; filter: blur(6px); }
282
  99% { --label: "Kiểm tra lại lần cuối"; opacity: 0; filter: blur(6px); }
283
  100% { opacity: 1; filter: blur(0px); }
284
  }
285
+ @keyframes fade-out { to { opacity: 0; visibility: hidden; } }
 
 
 
286
  @media (prefers-reduced-motion: reduce) {
287
  html::after { animation: loading-grow 4s linear forwards, fade-out 1s ease forwards 10s; }
288
  body::after { animation: fade-out 1s ease forwards 10s; }