CCSWebsite/index.html

411 lines
15 KiB
HTML
Raw Permalink Normal View History

2025-06-17 01:43:15 +00:00
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>维护通知</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link rel="stylesheet" href="https://fonts.loli.net/css2?family=Noto+Sans+SC:wght@400;500;700&display=swap">
<style>
body {
font-family: 'Noto Sans SC', sans-serif;
background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
color: #fff;
min-height: 100vh;
overflow-x: hidden;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 2rem 1rem;
}
.card {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border-radius: 1rem;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
overflow: hidden;
transition: all 0.5s ease;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4);
}
.service-icon {
position: relative;
width: 120px;
height: 120px;
background: rgba(0, 0, 0, 0.3);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 2rem;
box-shadow: 0 0 30px rgba(255, 59, 48, 0.5);
}
.service-icon::after {
content: '';
position: absolute;
width: 100%;
height: 100%;
border-radius: 50%;
border: 2px solid rgba(255, 59, 48, 0.8);
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
transform: scale(0.95);
opacity: 0.8;
}
70% {
transform: scale(1.1);
opacity: 0;
}
100% {
transform: scale(0.95);
opacity: 0;
}
}
.slide-up {
animation: slideUp 0.8s ease forwards;
opacity: 0;
transform: translateY(30px);
}
@keyframes slideUp {
to {
opacity: 1;
transform: translateY(0);
}
}
.particle {
position: absolute;
border-radius: 50%;
pointer-events: none;
background: linear-gradient(135deg, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.1) 100%);
}
.shake {
animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}
@keyframes shake {
10%, 90% {transform: translateX(-1px);}
20%, 80% {transform: translateX(2px);}
30%, 50%, 70% {transform: translateX(-4px);}
40%, 60% {transform: translateX(4px);}
}
.animate-pulse {
animation: pulse-fade 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse-fade {
0%, 100% {opacity: 1;}
50% {opacity: .5;}
}
.badge {
position: relative;
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 500;
text-transform: uppercase;
margin-bottom: 1.5rem;
background: rgba(255, 59, 48, 0.2);
border: 1px solid rgba(255, 59, 48, 0.5);
color: #ff3b30;
}
.timeline {
position: relative;
padding-left: 2rem;
}
.timeline::before {
content: '';
position: absolute;
left: 0;
top: 6px;
height: calc(100% - 12px);
width: 2px;
background: rgba(156, 163, 175, 0.5);
}
.timeline-item {
position: relative;
padding-bottom: 1.5rem;
}
.timeline-item:last-child {
padding-bottom: 0;
}
.timeline-dot {
position: absolute;
left: -2rem;
top: 0.25rem;
width: 1rem;
height: 1rem;
border-radius: 50%;
background: #4f46e5;
border: 2px solid #fff;
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.3);
}
.service-status-badge {
display: inline-flex;
align-items: center;
padding: 0.5rem 1rem;
border-radius: 9999px;
background: rgba(255, 59, 48, 0.2);
border: 1px solid rgba(255, 59, 48, 0.5);
color: #ff3b30;
font-weight: 500;
margin-bottom: 1.5rem;
}
.status-pulse {
width: 10px;
height: 10px;
background-color: #ff3b30;
border-radius: 50%;
margin-right: 0.5rem;
position: relative;
}
.status-pulse::after {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border-radius: 50%;
background-color: rgba(255, 59, 48, 0.5);
animation: status-ping 1.5s cubic-bezier(0, 0, 0.2, 1) infinite;
}
@keyframes status-ping {
75%, 100% {
transform: scale(2);
opacity: 0;
}
}
.service-feature {
display: flex;
align-items: flex-start;
margin-bottom: 1rem;
}
.feature-icon {
width: 2.5rem;
height: 2.5rem;
border-radius: 50%;
background: rgba(79, 70, 229, 0.2);
display: flex;
align-items: center;
justify-content: center;
margin-right: 1rem;
flex-shrink: 0;
color: #818cf8;
}
/* 音乐控制样式 */
.music-control {
position: fixed;
bottom: 20px;
right: 20px;
z-index: 1000;
background: rgba(255,255,255,0.1);
backdrop-filter: blur(5px);
border: 1px solid rgba(255,255,255,0.3);
border-radius: 50%;
width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
}
.music-control:hover {
background: rgba(255,255,255,0.2);
transform: scale(1.1);
}
.music-control.playing {
animation: rotate 2s linear infinite;
}
.music-icon {
width: 24px;
height: 24px;
fill: #fff;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
</style>
</head>
<body>
<audio id="bgMusic" src="./Music.mp3" autoplay loop volume="0.3" preload="auto"></audio>
<div class="music-control" id="musicControl" onclick="toggleMusic()">
<svg class="music-icon" viewBox="0 0 24 24">
<path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"/>
</svg>
</div>
<div class="container mx-auto px-4 py-8">
<div class="card p-6 md:p-8 slide-up" style="animation-delay: 0.1s;">
<div class="text-center">
<h1 class="text-3xl md:text-4xl font-bold mb-2 bg-gradient-to-r from-red-400 to-pink-600 bg-clip-text text-transparent">服务正在维护</h1>
<p class="text-gray-300 mb-6">请耐心等待恢复</p>
<div class="service-status-badge">
<span class="status-pulse"></span>
服务维护中
</div>
<div class="service-icon">
<i class="fas fa-power-off text-5xl text-red-500"></i>
</div>
<div class="bg-gray-800 bg-opacity-50 rounded-lg p-5 mb-6 max-w-2xl mx-auto">
<h2 class="text-xl font-bold mb-3 text-yellow-300">
<i class="fas fa-exclamation-triangle mr-2"></i>通知
</h2>
<p class="text-gray-300 mb-4">
我们非常遗憾地通知您,我们已于 <span class="font-semibold text-red-400">2025年06月14日</span> 停止服务。
</p>
<p class="text-gray-300">
请注意,所有账户数据将继续储存在我们的数据库中,<span class="font-semibold text-yellow-300">不会丢失数据</span>
</p>
</div>
<div class="timeline mx-auto text-left max-w-lg mb-6">
<h3 class="font-bold text-xl mb-4 text-center text-purple-300">服务维护时间线</h3>
<div class="timeline-item">
<div class="timeline-dot"></div>
<div class="font-medium text-purple-300">2025-05-30</div>
<div class="text-gray-300">提交备案申请完毕</div>
</div>
<div class="timeline-item">
<div class="timeline-dot"></div>
<div class="font-medium text-purple-300">2025-06-14</div>
<div class="text-gray-300">服务停止,运行备案流程</div>
</div>
<div class="timeline-item">
<div class="timeline-dot"></div>
<div class="font-medium text-purple-300">2025-06-XX</div>
<div class="text-gray-300">等待备案下发</div>
</div>
</div>
</div>
</div>
<div class="card p-6 md:p-8 mt-6 slide-up" style="animation-delay: 0.3s;">
<h2 class="text-xl font-bold mb-4 flex items-center">
<i class="fas fa-question-circle mr-2 text-yellow-400"></i>
常见问题
</h2>
<div class="space-y-4">
<div class="p-4 bg-gray-800 bg-opacity-50 rounded-lg">
<h3 class="font-medium text-yellow-300 mb-2">为什么维护?</h3>
<p class="text-gray-300">国内云产品使用带域名的 HTTP/HTTPS 服务或使用80,443端口时需确保域名完成备案才能正常使用备案期间完全无法使用服务<span class="font-semibold text-red-400">此外,服务器项目源文件因失误遭到损坏,正在迁移备份!</span></p>
</div>
<div class="p-4 bg-gray-800 bg-opacity-50 rounded-lg">
<h3 class="font-medium text-yellow-300 mb-2">为什么之前能访问?</h3>
<p class="text-gray-300">之前本工作室采用香港计算节点运行网站服务现迁移至境内服务器并注册新域名ccsnetwork.cn用于备案。</p>
</div>
</div>
</div>
<footer class="mt-8 text-center text-gray-400 text-sm slide-up" style="animation-delay: 0.6s;">
<!--<div class="flex justify-center space-x-4 mb-4">
<a href="#" class="hover:text-white transition-colors" title="微信">
<i class="fab fa-weixin text-xl"></i>
</a>
<a href="#" class="hover:text-white transition-colors" title="QQ">
<i class="fab fa-qq text-xl"></i>
</a>
</div>-->
<p>© 2025 CCSIT圆周云境技术部门
</footer>
</div>
<script>
// 背景音乐控制
const audio = document.getElementById('bgMusic');
const musicControl = document.getElementById('musicControl');
let isPlaying = true;
function toggleMusic() {
if (isPlaying) {
audio.pause();
musicControl.classList.remove('playing');
} else {
audio.play().catch(err => {
console.log('音乐播放失败,可能需要用户交互后播放:', err);
});
musicControl.classList.add('playing');
}
isPlaying = !isPlaying;
}
// 粒子效果
function createParticles() {
const container = document.body;
const particleCount = 50;
for (let i = 0; i < particleCount; i++) {
const size = Math.random() * 5 + 1;
const particle = document.createElement('div');
particle.classList.add('particle');
particle.style.width = `${size}px`;
particle.style.height = `${size}px`;
particle.style.opacity = Math.random() * 0.5 + 0.1;
// 随机位置
particle.style.left = `${Math.random() * 100}vw`;
particle.style.top = `${Math.random() * 100}vh`;
// 添加动画
particle.style.animation = `moveParticle ${Math.random() * 60 + 30}s linear infinite`;
// 随机漂浮动画
const keyframes = `
@keyframes moveParticle {
0% {
transform: translate(0, 0);
}
25% {
transform: translate(${Math.random() * 100 - 50}px, ${Math.random() * 100 - 50}px);
}
50% {
transform: translate(${Math.random() * 100 - 50}px, ${Math.random() * 100 - 50}px);
}
75% {
transform: translate(${Math.random() * 100 - 50}px, ${Math.random() * 100 - 50}px);
}
100% {
transform: translate(0, 0);
}
}
`;
const styleSheet = document.createElement('style');
styleSheet.textContent = keyframes;
document.head.appendChild(styleSheet);
container.appendChild(particle);
}
}
// 页面加载完成后执行
window.addEventListener('load', () => {
createParticles();
document.addEventListener('click', () => {
if (!isPlaying) {
audio.play().then(() => {
musicControl.classList.add('playing');
isPlaying = true;
});
}
}, { once: true });
// 添加滑动动画
const elements = document.querySelectorAll('.slide-up');
elements.forEach(element => {
element.style.animationPlayState = 'running';
});
});
</script>
</body>
</html>