ixingchen commited on
Commit
536a2c2
·
verified ·
1 Parent(s): 56cae6a

upde index.html

Browse files
Files changed (1) hide show
  1. index.html +363 -136
index.html CHANGED
@@ -2,228 +2,455 @@
2
  <html lang="zh-CN">
3
  <head>
4
  <meta charset="utf-8" />
5
- <title>UNM-Server</title>
6
  <link rel="shortcut icon" href="./favicon.png" type="image/x-icon" />
 
7
  <script src="https://cdn.tailwindcss.com"></script>
 
8
  <script>
9
  tailwind.config = {
10
  darkMode: 'class',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  }
12
  </script>
13
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
14
  <style>
15
- @keyframes float {
16
- 0% { transform: translateY(0px); }
17
- 50% { transform: translateY(-15px); }
18
- 100% { transform: translateY(0px); }
19
  }
20
 
21
- .floating {
22
- animation: float 6s ease-in-out infinite;
 
23
  }
24
 
25
- .btn-hover-effect {
26
- transition: all 0.3s ease;
27
- transform: translateY(0);
 
28
  }
29
 
30
- .btn-hover-effect:hover {
31
- transform: translateY(-3px);
32
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
 
 
 
 
33
  }
34
 
35
- .social-icon {
36
- transition: all 0.3s ease;
 
 
37
  }
38
 
39
- .social-icon:hover {
40
- transform: scale(1.2);
41
  }
42
 
43
- .dark .logo-shadow {
44
- filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.2));
 
45
  }
46
 
47
- .logo-shadow {
48
- filter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.1));
49
  }
50
 
51
- .fade-in {
52
- animation: fadeIn 1s ease-in;
53
  }
54
 
55
- @keyframes fadeIn {
56
- from { opacity: 0; }
57
- to { opacity: 1; }
58
  }
59
 
60
- .glow-text {
61
- text-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
 
62
  }
63
 
64
- .dark .glow-text {
65
- text-shadow: 0 0 5px rgba(255, 255, 255, 0.2);
 
66
  }
67
  </style>
68
  </head>
69
 
70
- <body class="bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100 transition-colors duration-500 min-h-screen flex flex-col">
71
- <main class="flex-grow flex flex-col items-center justify-center px-4 py-8 fade-in">
72
- <div class="ico mb-12 floating">
73
- <img src="./favicon.png" alt="logo" class="w-48 h-48 md:w-64 md:h-64 logo-shadow">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  </div>
75
-
76
- <h1 class="title text-4xl md:text-5xl font-bold mb-6 text-center glow-text">
77
  UNM-Server
78
  </h1>
79
-
80
- <p class="text text-lg md:text-xl text-center max-w-2xl mx-auto mb-12 text-gray-600 dark:text-gray-300">
81
- 服务已正常运行, 请在SPlayer的".env"配置文件中添加当前网站的域名使用歌曲解灰服务
82
  </p>
83
-
84
- <div class="control flex flex-wrap justify-center gap-4 mb-16">
85
- <button id="apiTestBtn" class="btn-hover-effect px-6 py-3 bg-white dark:bg-gray-800 border-2 border-gray-800 dark:border-gray-200 rounded-lg font-medium flex items-center hover:bg-gray-800 hover:text-white dark:hover:bg-gray-200 dark:hover:text-gray-900">
86
- <i class="fas fa-flask mr-2"></i>
 
 
 
 
87
  <span>API 测试</span>
88
  </button>
89
-
90
- <button id="apiDocsBtn" class="btn-hover-effect px-6 py-3 bg-white dark:bg-gray-800 border-2 border-gray-800 dark:border-gray-200 rounded-lg font-medium flex items-center hover:bg-gray-800 hover:text-white dark:hover:bg-gray-200 dark:hover:text-gray-900">
91
- <i class="fas fa-book mr-2"></i>
 
92
  <span>API 文档</span>
93
  </button>
94
-
95
- <button id="toggleDarkMode" class="btn-hover-effect px-6 py-3 bg-white dark:bg-gray-800 border-2 border-gray-800 dark:border-gray-200 rounded-lg font-medium flex items-center hover:bg-gray-800 hover:text-white dark:hover:bg-gray-200 dark:hover:text-gray-900">
96
- <i id="darkModeIcon" class="fas fa-moon mr-2"></i>
 
97
  <span>暗黑模式</span>
98
  </button>
99
  </div>
100
-
101
- <div class="status-card bg-gray-100 dark:bg-gray-800 p-6 rounded-xl shadow-md max-w-2xl w-full mb-12">
102
- <div class="flex items-center mb-4">
103
- <div class="w-3 h-3 rounded-full bg-green-500 mr-3 animate-pulse"></div>
104
- <h3 class="font-semibold text-lg">服务状态</h3>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  </div>
106
- <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
107
- <div class="bg-white dark:bg-gray-700 p-4 rounded-lg shadow">
108
- <p class="text-sm text-gray-500 dark:text-gray-300 mb-1">API 响应</p>
109
- <p class="font-medium" id="apiResponseTime">测试中...</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  </div>
111
- <div class="bg-white dark:bg-gray-700 p-4 rounded-lg shadow">
112
- <p class="text-sm text-gray-500 dark:text-gray-300 mb-1">服务器负载</p>
113
- <p class="font-medium" id="serverLoad">测试中...</p>
 
 
 
 
 
 
 
 
114
  </div>
115
- <div class="bg-white dark:bg-gray-700 p-4 rounded-lg shadow">
116
- <p class="text-sm text-gray-500 dark:text-gray-300 mb-1">在线用户</p>
117
- <p class="font-medium" id="onlineUsers">测试中...</p>
 
 
 
 
 
 
 
 
118
  </div>
119
  </div>
120
  </div>
121
  </main>
122
-
123
- <footer class="py-8 border-t border-gray-200 dark:border-gray-700">
124
  <div class="container mx-auto px-4">
125
  <div class="social flex justify-center mb-6">
126
- <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
127
  <i class="fab fa-github text-2xl"></i>
128
  </a>
129
- <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
130
  <i class="fas fa-home text-2xl"></i>
131
  </a>
132
- <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
133
  <i class="fas fa-envelope text-2xl"></i>
134
  </a>
 
 
 
135
  </div>
136
-
137
- <div class="text-center text-gray-500 dark:text-gray-400 mb-2">
138
- Copyright © 2020-2025 imsyy
139
  </div>
140
-
141
- <div class="text-center text-gray-500 dark:text-gray-400">
142
- Powered by <span class="font-medium text-gray-700 dark:text-gray-200">UNM-Server</span>
143
  </div>
144
  </div>
145
  </footer>
146
 
147
  <script>
148
- // Dark mode toggle
149
- const toggleDarkMode = document.getElementById('toggleDarkMode');
150
- const darkModeIcon = document.getElementById('darkModeIcon');
151
-
152
- // Check for saved user preference or use system preference
153
- if (localStorage.getItem('darkMode') === 'true' ||
154
- (!localStorage.getItem('darkMode') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
155
- document.documentElement.classList.add('dark');
156
- darkModeIcon.classList.replace('fa-moon', 'fa-sun');
157
- }
158
-
159
- toggleDarkMode.addEventListener('click', () => {
160
- document.documentElement.classList.toggle('dark');
161
-
162
- if (document.documentElement.classList.contains('dark')) {
163
- darkModeIcon.classList.replace('fa-moon', 'fa-sun');
164
- localStorage.setItem('darkMode', 'true');
165
- } else {
166
- darkModeIcon.classList.replace('fa-sun', 'fa-moon');
167
- localStorage.setItem('darkMode', 'false');
168
- }
169
- });
170
-
171
- // API Test Button
172
- document.getElementById('apiTestBtn').addEventListener('click', () => {
173
- // Simulate API test
174
- document.getElementById('apiResponseTime').textContent = '23ms';
175
- document.getElementById('serverLoad').textContent = '12%';
176
- document.getElementById('onlineUsers').textContent = '142';
177
-
178
- // Show notification
179
- showNotification('API 测试成功', '所有接口运行正常', 'success');
180
- });
181
-
182
- // API Docs Button
183
- document.getElementById('apiDocsBtn').addEventListener('click', () => {
184
- // In a real implementation, this would open your API docs
185
- showNotification('文档即将打开', '正在跳转到API文档页面', 'info');
186
- // window.open('https://your-api-docs-url');
187
- });
188
-
189
- // Notification function
190
  function showNotification(title, message, type) {
191
  const notification = document.createElement('div');
192
- notification.className = `fixed top-4 right-4 z-50 px-6 py-4 rounded-lg shadow-lg flex items-start transform transition-all duration-300 translate-x-0 opacity-100 ${type === 'success' ? 'bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-100' : 'bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-100'}`;
193
-
194
- const icon = document.createElement('i');
195
- icon.className = type === 'success' ? 'fas fa-check-circle mr-3 text-xl' : 'fas fa-info-circle mr-3 text-xl';
 
196
 
 
 
 
 
 
 
 
 
 
 
197
  const content = document.createElement('div');
198
  const titleEl = document.createElement('h4');
199
- titleEl.className = 'font-bold';
200
  titleEl.textContent = title;
201
-
202
  const messageEl = document.createElement('p');
203
  messageEl.className = 'text-sm';
204
  messageEl.textContent = message;
205
-
206
  content.appendChild(titleEl);
207
  content.appendChild(messageEl);
208
-
209
  notification.appendChild(icon);
210
  notification.appendChild(content);
211
-
 
 
 
 
 
 
 
 
 
 
212
  document.body.appendChild(notification);
213
-
214
  // Auto remove after 5 seconds
215
  setTimeout(() => {
216
  notification.classList.add('translate-x-full', 'opacity-0');
217
  setTimeout(() => notification.remove(), 300);
218
  }, 5000);
219
  }
220
-
221
- // Simulate initial status check
222
- setTimeout(() => {
223
- document.getElementById('apiResponseTime').textContent = '18ms';
224
- document.getElementById('serverLoad').textContent = '8%';
225
- document.getElementById('onlineUsers').textContent = '87';
226
- }, 1500);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  </script>
228
- <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=ixingchen/unm" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
229
  </html>
 
2
  <html lang="zh-CN">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <title>UNM-Server | 高级音乐解灰服务</title>
6
  <link rel="shortcut icon" href="./favicon.png" type="image/x-icon" />
7
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
8
  <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/scrollreveal"></script>
10
  <script>
11
  tailwind.config = {
12
  darkMode: 'class',
13
+ theme: {
14
+ extend: {
15
+ colors: {
16
+ primary: {
17
+ light: "#3b82f6",
18
+ dark: "#1e40af"
19
+ },
20
+ secondary: {
21
+ light: "#10b981",
22
+ dark: "#047857"
23
+ },
24
+ accent: "#8b5cf6"
25
+ },
26
+ animation: {
27
+ 'float': 'float 6s ease-in-out infinite',
28
+ 'pulse-slow': 'pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite',
29
+ 'gradient': 'gradient 8s ease infinite',
30
+ 'text-gradient': 'text-gradient 4s linear infinite'
31
+ },
32
+ keyframes: {
33
+ float: {
34
+ '0%, 100%': { transform: 'translateY(0)' },
35
+ '50%': { transform: 'translateY(-20px)' }
36
+ },
37
+ gradient: {
38
+ '0%, 100%': { 'background-position': '0% 50%' },
39
+ '50%': { 'background-position': '100% 50%' }
40
+ },
41
+ 'text-gradient': {
42
+ 'to': { 'background-position': '200% center' }
43
+ }
44
+ }
45
+ }
46
+ }
47
  }
48
  </script>
 
49
  <style>
50
+ .tech-pattern {
51
+ background-color: #f8fafc;
52
+ background-image: radial-gradient(#e2e8f0 1px, transparent 1px);
53
+ background-size: 20px 20px;
54
  }
55
 
56
+ .dark .tech-pattern {
57
+ background-color: #0f172a;
58
+ background-image: radial-gradient(#1e293b 1px, transparent 1px);
59
  }
60
 
61
+ .tech-border {
62
+ border: 1px solid rgba(59, 130, 246, 0.2);
63
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.1),
64
+ inset 0 0 20px rgba(59, 130, 246, 0.1);
65
  }
66
 
67
+ .gradient-text {
68
+ background: linear-gradient(90deg, #3b82f6, #10b981, #8b5cf6, #3b82f6);
69
+ background-size: 300% 100%;
70
+ -webkit-background-clip: text;
71
+ background-clip: text;
72
+ color: transparent;
73
+ animation: text-gradient 4s linear infinite;
74
  }
75
 
76
+ .glass-card {
77
+ background: rgba(255, 255, 255, 0.7);
78
+ backdrop-filter: blur(10px);
79
+ -webkit-backdrop-filter: blur(10px);
80
  }
81
 
82
+ .dark .glass-card {
83
+ background: rgba(15, 23, 42, 0.7);
84
  }
85
 
86
+ .btn-hover-effect:hover {
87
+ transform: translateY(-3px);
88
+ box-shadow: 0 10px 20px -5px rgba(59, 130, 246, 0.3);
89
  }
90
 
91
+ .floating {
92
+ animation: float 6s ease-in-out infinite;
93
  }
94
 
95
+ .social-icon {
96
+ transition: all 0.3s ease;
97
  }
98
 
99
+ .social-icon:hover {
100
+ transform: translateY(-3px) scale(1.1);
 
101
  }
102
 
103
+ .feature-card {
104
+ transition: all 0.3s ease;
105
+ transform-style: preserve-3d;
106
  }
107
 
108
+ .feature-card:hover {
109
+ transform: translateY(-5px) rotateX(5deg);
110
+ box-shadow: 0 15px 30px -10px rgba(59, 130, 246, 0.2);
111
  }
112
  </style>
113
  </head>
114
 
115
+ <body class="tech-pattern min-h-screen flex flex-col">
116
+ <div class="fixed inset-0 overflow-hidden opacity-20">
117
+ <div class="absolute top-0 left-0 w-64 h-64 bg-blue-500 rounded-full filter blur-3xl opacity-20 animate-float"></div>
118
+ <div class="absolute bottom-0 right-0 w-64 h-64 bg-emerald-500 rounded-full filter blur-3xl opacity-20 animate-float animation-delay-2000"></div>
119
+ </div>
120
+
121
+ <main class="flex-grow flex flex-col items-center justify-center px-4 py-8 fade-in relative z-10">
122
+ <div class="relative mb-12">
123
+ <div class="absolute inset-0 flex items-center justify-center">
124
+ <div class="w-64 h-64 md:w-80 md:h-80 bg-gradient-to-br from-primary-light to-secondary-light rounded-full filter blur-3xl opacity-20 dark:opacity-30"></div>
125
+ </div>
126
+ <div class="ico floating relative">
127
+ <div class="relative tech-border rounded-full p-2">
128
+ <img src="./favicon.png" alt="UNM-Server logo with futuristic digital design" class="w-48 h-48 md:w-64 md:h-64">
129
+ </div>
130
+ <div class="absolute -bottom-4 left-1/2 transform -translate-x-1/2">
131
+ <div class="bg-primary-light dark:bg-primary-dark text-white px-4 py-1 rounded-full text-sm font-medium flex items-center shadow-lg">
132
+ <div class="w-2 h-2 rounded-full bg-green-400 mr-2 animate-pulse"></div>
133
+ <span>RUNNING</span>
134
+ </div>
135
+ </div>
136
+ </div>
137
  </div>
138
+
139
+ <h1 class="title text-5xl md:text-6xl font-bold mb-6 text-center gradient-text">
140
  UNM-Server
141
  </h1>
142
+
143
+ <p class="text text-xl md:text-2xl text-center max-w-5xl mx-auto mb-12 text-gray-600 dark:text-gray-300">
144
+ 高级音乐解灰服务已正常运行请在".env"配置文件中添加当前网站的域名使用歌曲解灰服务
145
  </p>
146
+
147
+ <div class="control flex flex-wrap justify-center gap-6 mb-16">
148
+ <button id="apiTestBtn"
149
+ class="btn-hover-effect px-8 py-4 bg-gradient-to-r from-primary-light to-secondary-light text-white rounded-xl font-medium flex items-center hover:shadow-lg hover:shadow-primary-light/30 dark:hover:shadow-primary-dark/30 transition-all duration-300 transform hover:scale-105">
150
+ <div class="mr-3 relative">
151
+ <i class="fas fa-flask text-xl"></i>
152
+ <div class="absolute -top-1 -right-1 w-3 h-3 bg-green-400 rounded-full animate-pulse"></div>
153
+ </div>
154
  <span>API 测试</span>
155
  </button>
156
+
157
+ <button id="apiDocsBtn"
158
+ class="btn-hover-effect px-8 py-4 bg-gradient-to-r from-gray-800 to-gray-700 text-white rounded-xl font-medium flex items-center hover:shadow-lg hover:shadow-gray-800/30 transition-all duration-300 transform hover:scale-105">
159
+ <i class="fas fa-book text-xl mr-3"></i>
160
  <span>API 文档</span>
161
  </button>
162
+
163
+ <button id="toggleDarkMode"
164
+ class="btn-hover-effect px-8 py-4 glass-card border border-gray-200 dark:border-gray-700 rounded-xl font-medium flex items-center hover:shadow-lg hover:shadow-gray-500/20 transition-all duration-300 transform hover:scale-105">
165
+ <i id="darkModeIcon" class="fas fa-moon text-xl mr-3"></i>
166
  <span>暗黑模式</span>
167
  </button>
168
  </div>
169
+
170
+ <div class="status-card glass-card p-8 rounded-2xl shadow-xl max-w-7xl w-full mb-12 backdrop-blur-sm border border-gray-200/50 dark:border-gray-700/50">
171
+ <div class="flex items-center mb-6">
172
+ <div class="relative mr-4">
173
+ <div class="w-4 h-4 rounded-full bg-green-500 animate-pulse-slow"></div>
174
+ <div class="absolute inset-0 rounded-full bg-green-500 opacity-0 animate-ping"></div>
175
+ </div>
176
+ <h3 class="font-semibold text-2xl gradient-text">服务状态监控</h3>
177
+ </div>
178
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
179
+ <div class="feature-card glass-card p-6 rounded-xl relative overflow-hidden group border border-gray-200/50 dark:border-gray-700/50">
180
+ <div class="absolute -right-6 -top-6 w-24 h-24 bg-primary-light rounded-full opacity-10 group-hover:opacity-20 transition-all duration-500"></div>
181
+ <div class="relative">
182
+ <div class="flex items-center mb-3">
183
+ <div class="w-3 h-3 rounded-full bg-primary-light mr-2"></div>
184
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-300">API 响应</p>
185
+ </div>
186
+ <p class="font-bold text-3xl" id="apiResponseTime">测试中...</p>
187
+ <div class="mt-2 h-1 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
188
+ <div class="h-full bg-gradient-to-r from-primary-light to-secondary-light" style="width: 80%"></div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+
193
+ <div class="feature-card glass-card p-6 rounded-xl relative overflow-hidden group border border-gray-200/50 dark:border-gray-700/50">
194
+ <div class="absolute -right-6 -top-6 w-24 h-24 bg-purple-500 rounded-full opacity-10 group-hover:opacity-20 transition-all duration-500"></div>
195
+ <div class="relative">
196
+ <div class="flex items-center mb-3">
197
+ <div class="w-3 h-3 rounded-full bg-purple-500 mr-2"></div>
198
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-300">请求次数</p>
199
+ </div>
200
+ <p class="font-bold text-3xl" id="requestCount">1,024</p>
201
+ <div class="mt-2 h-1 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
202
+ <div class="h-full bg-gradient-to-r from-purple-500 to-pink-500" style="width: 65%"></div>
203
+ </div>
204
+ </div>
205
+ </div>
206
+
207
+ <div class="feature-card glass-card p-6 rounded-xl relative overflow-hidden group border border-gray-200/50 dark:border-gray-700/50">
208
+ <div class="absolute -right-6 -top-6 w-24 h-24 bg-emerald-500 rounded-full opacity-10 group-hover:opacity-20 transition-all duration-500"></div>
209
+ <div class="relative">
210
+ <div class="flex items-center mb-3">
211
+ <div class="w-3 h-3 rounded-full bg-emerald-500 mr-2"></div>
212
+ <p class="text-sm font-medium text-gray-500 dark:text-gray-300">缓存命中</p>
213
+ </div>
214
+ <p class="font-bold text-3xl" id="cacheHitRate">92%</p>
215
+ <div class="mt-2 h-1 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
216
+ <div class="h-full bg-gradient-to-r from-emerald-500 to-teal-500" style="width: 92%"></div>
217
+ </div>
218
+ </div>
219
+ </div>
220
  </div>
221
+ </div>
222
+
223
+ <div class="w-full max-w-7xl glass-card p-8 rounded-2xl mb-12 border border-gray-200/50 dark:border-gray-700/50">
224
+ <h3 class="text-2xl font-semibold mb-6 gradient-text">服务功能</h3>
225
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
226
+ <div class="feature-card flex items-start p-6 rounded-lg glass-card border border-gray-200/50 dark:border-gray-700/50 hover:bg-white/20 dark:hover:bg-gray-800/50 transition-all duration-300">
227
+ <div class="flex-shrink-0 mr-4">
228
+ <div class="w-14 h-14 rounded-full bg-primary-light/10 dark:bg-primary-dark/10 flex items-center justify-center text-primary-light dark:text-primary-dark text-2xl">
229
+ <i class="fas fa-music"></i>
230
+ </div>
231
+ </div>
232
+ <div>
233
+ <h4 class="font-medium text-xl mb-2">歌曲解灰</h4>
234
+ <p class="text-gray-500 dark:text-gray-400">解锁灰色不可播放歌曲,享受完整音乐体验</p>
235
+ </div>
236
+ </div>
237
+
238
+ <div class="feature-card flex items-start p-6 rounded-lg glass-card border border-gray-200/50 dark:border-gray-700/50 hover:bg-white/20 dark:hover:bg-gray-800/50 transition-all duration-300">
239
+ <div class="flex-shrink-0 mr-4">
240
+ <div class="w-14 h-14 rounded-full bg-purple-500/10 flex items-center justify-center text-purple-500 text-2xl">
241
+ <i class="fas fa-bolt"></i>
242
+ </div>
243
+ </div>
244
+ <div>
245
+ <h4 class="font-medium text-xl mb-2">高速缓存</h4>
246
+ <p class="text-gray-500 dark:text-gray-400">优化缓存机制,提升音乐加载速度</p>
247
+ </div>
248
  </div>
249
+
250
+ <div class="feature-card flex items-start p-6 rounded-lg glass-card border border-gray-200/50 dark:border-gray-700/50 hover:bg-white/20 dark:hover:bg-gray-800/50 transition-all duration-300">
251
+ <div class="flex-shrink-0 mr-4">
252
+ <div class="w-14 h-14 rounded-full bg-secondary-light/10 flex items-center justify-center text-secondary-light text-2xl">
253
+ <i class="fas fa-shield-alt"></i>
254
+ </div>
255
+ </div>
256
+ <div>
257
+ <h4 class="font-medium text-xl mb-2">安全加密</h4>
258
+ <p class="text-gray-500 dark:text-gray-400">数据传输加密,保护用户隐私</p>
259
+ </div>
260
  </div>
261
+
262
+ <div class="feature-card flex items-start p-6 rounded-lg glass-card border border-gray-200/50 dark:border-gray-700/50 hover:bg-white/20 dark:hover:bg-gray-800/50 transition-all duration-300">
263
+ <div class="flex-shrink-0 mr-4">
264
+ <div class="w-14 h-14 rounded-full bg-blue-500/10 flex items-center justify-center text-blue-500 text-2xl">
265
+ <i class="fas fa-plug"></i>
266
+ </div>
267
+ </div>
268
+ <div>
269
+ <h4 class="font-medium text-xl mb-2">多平台支持</h4>
270
+ <p class="text-gray-500 dark:text-gray-400">兼容多种音乐平台,一站式解决方案</p>
271
+ </div>
272
  </div>
273
  </div>
274
  </div>
275
  </main>
276
+
277
+ <footer class="py-8 border-t border-gray-200/50 dark:border-gray-700/50 relative z-10">
278
  <div class="container mx-auto px-4">
279
  <div class="social flex justify-center mb-6">
280
+ <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-primary-light dark:hover:text-primary-dark transform hover:-translate-y-1">
281
  <i class="fab fa-github text-2xl"></i>
282
  </a>
283
+ <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-primary-light dark:hover:text-primary-dark transform hover:-translate-y-1">
284
  <i class="fas fa-home text-2xl"></i>
285
  </a>
286
+ <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-primary-light dark:hover:text-primary-dark transform hover:-translate-y-1">
287
  <i class="fas fa-envelope text-2xl"></i>
288
  </a>
289
+ <a href="#" class="mx-4 social-icon text-gray-600 dark:text-gray-300 hover:text-primary-light dark:hover:text-primary-dark transform hover:-translate-y-1">
290
+ <i class="fab fa-telegram text-2xl"></i>
291
+ </a>
292
  </div>
293
+
294
+ <div class="text-center text-gray-500 dark:text-gray-400 mb-2 text-sm">
295
+ Copyright © 2020-<span id="current-year">2024</span> <span class="font-medium gradient-text">imsyy</span>
296
  </div>
297
+
298
+ <div class="text-center text-gray-500 dark:text-gray-400 text-xs">
299
+ Powered by <span class="font-medium gradient-text">UNM-Server</span> | Version <span id="footer-version">3.0.0</span>
300
  </div>
301
  </div>
302
  </footer>
303
 
304
  <script>
305
+ // Enhanced notification function with animations
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
  function showNotification(title, message, type) {
307
  const notification = document.createElement('div');
308
+ notification.className = `fixed top-4 right-4 z-50 px-6 py-4 rounded-xl shadow-2xl flex items-start transform transition-all duration-300 translate-x-0 opacity-100 backdrop-blur-sm border ${
309
+ type === 'success'
310
+ ? 'bg-green-100/80 dark:bg-green-900/80 border-green-200 dark:border-green-800 text-green-800 dark:text-green-100'
311
+ : 'bg-blue-100/80 dark:bg-blue-900/80 border-blue-200 dark:border-blue-800 text-blue-800 dark:text-blue-100'
312
+ } animate-float`;
313
 
314
+ const icon = document.createElement('div');
315
+ icon.className = `mr-4 text-2xl ${
316
+ type === 'success'
317
+ ? 'text-green-500 dark:text-green-400'
318
+ : 'text-blue-500 dark:text-blue-400'
319
+ }`;
320
+ icon.innerHTML = type === 'success'
321
+ ? '<i class="fas fa-check-circle"></i>'
322
+ : '<i class="fas fa-info-circle"></i>';
323
+
324
  const content = document.createElement('div');
325
  const titleEl = document.createElement('h4');
326
+ titleEl.className = 'font-bold text-lg';
327
  titleEl.textContent = title;
328
+
329
  const messageEl = document.createElement('p');
330
  messageEl.className = 'text-sm';
331
  messageEl.textContent = message;
332
+
333
  content.appendChild(titleEl);
334
  content.appendChild(messageEl);
335
+
336
  notification.appendChild(icon);
337
  notification.appendChild(content);
338
+
339
+ // Close button
340
+ const closeBtn = document.createElement('button');
341
+ closeBtn.className = 'ml-4 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition-colors';
342
+ closeBtn.innerHTML = '<i class="fas fa-times"></i>';
343
+ closeBtn.addEventListener('click', () => {
344
+ notification.classList.add('translate-x-full', 'opacity-0');
345
+ setTimeout(() => notification.remove(), 300);
346
+ });
347
+ notification.appendChild(closeBtn);
348
+
349
  document.body.appendChild(notification);
350
+
351
  // Auto remove after 5 seconds
352
  setTimeout(() => {
353
  notification.classList.add('translate-x-full', 'opacity-0');
354
  setTimeout(() => notification.remove(), 300);
355
  }, 5000);
356
  }
357
+
358
+ // Enhanced API status monitoring with animations
359
+ async function fetchApiStatus() {
360
+ const apiElement = document.getElementById('apiResponseTime');
361
+ if (!apiElement) return;
362
+
363
+ apiElement.textContent = '测试中...';
364
+ const startTime = performance.now();
365
+
366
+ try {
367
+ const response = await fetch('/health');
368
+ const endTime = performance.now();
369
+ const duration = endTime - startTime;
370
+
371
+ if (response.ok) {
372
+ apiElement.textContent = `${duration.toFixed(0)}ms`;
373
+ apiElement.classList.add('text-green-500');
374
+ setTimeout(() => apiElement.classList.remove('text-green-500'), 1000);
375
+
376
+ // Animate progress bar
377
+ const progressBar = apiElement.nextElementSibling?.querySelector('div');
378
+ if (progressBar) {
379
+ progressBar.style.width = '0%';
380
+ setTimeout(() => {
381
+ progressBar.style.width = `${Math.min(100, 100 - (duration / 20))}%`;
382
+ }, 50);
383
+ }
384
+ } else {
385
+ apiElement.textContent = 'Error';
386
+ apiElement.classList.add('text-red-500');
387
+ }
388
+ } catch (error) {
389
+ apiElement.textContent = 'Error';
390
+ apiElement.classList.add('text-red-500');
391
+ console.error('Error fetching API status:', error);
392
+ }
393
+ }
394
+
395
+ // Initialize animations and event listeners
396
+ document.addEventListener('DOMContentLoaded', () => {
397
+ // Set current year
398
+ document.getElementById('current-year').textContent = new Date().getFullYear();
399
+
400
+ // Initialize ScrollReveal animations
401
+ ScrollReveal().reveal('.feature-card', {
402
+ delay: 200,
403
+ distance: '20px',
404
+ origin: 'bottom',
405
+ interval: 100,
406
+ easing: 'cubic-bezier(0.5, 0, 0, 1)'
407
+ });
408
+
409
+ // Fetch API status periodically
410
+ fetchApiStatus();
411
+ setInterval(fetchApiStatus, 30000);
412
+
413
+ // Button event listeners
414
+ const apiTestBtn = document.getElementById('apiTestBtn');
415
+ const apiDocsBtn = document.getElementById('apiDocsBtn');
416
+ const toggleDarkMode = document.getElementById('toggleDarkMode');
417
+ const darkModeIcon = document.getElementById('darkModeIcon');
418
+
419
+ if (apiTestBtn) {
420
+ apiTestBtn.addEventListener('click', () => {
421
+ showNotification('API 测试', '正在跳转到API测试页面...', 'info');
422
+ setTimeout(() => {
423
+ window.location.href = '/api-test';
424
+ }, 1000);
425
+ });
426
+ }
427
+
428
+ if (apiDocsBtn) {
429
+ apiDocsBtn.addEventListener('click', () => {
430
+ showNotification('API 文档', '正在跳转到API文档页面...', 'info');
431
+ setTimeout(() => {
432
+ window.location.href = '/api';
433
+ }, 1000);
434
+ });
435
+ }
436
+
437
+ if (toggleDarkMode) {
438
+ toggleDarkMode.addEventListener('click', () => {
439
+ const isDark = document.documentElement.classList.toggle('dark');
440
+ localStorage.setItem('darkMode', isDark);
441
+ darkModeIcon.className = isDark
442
+ ? 'fas fa-sun text-xl mr-3'
443
+ : 'fas fa-moon text-xl mr-3';
444
+ });
445
+ }
446
+
447
+ // Check for saved dark mode preference
448
+ if (localStorage.getItem('darkMode') === 'true' ||
449
+ (!localStorage.getItem('darkMode') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
450
+ document.documentElement.classList.add('dark');
451
+ darkModeIcon.className = 'fas fa-sun text-xl mr-3';
452
+ }
453
+ });
454
  </script>
455
+ </body>
456
  </html>