mirror of
https://github.com/eoao/cloud-mail.git
synced 2026-05-06 21:51:48 +08:00
123 lines
3.4 KiB
HTML
123 lines
3.4 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||
<meta name="theme-color" content="#F1F1F1" id="theme-color-meta">
|
||
<meta name="description" content="Cloud Mail 是一个 Serverless 响应式邮箱服务,支持邮件发送,可部署到 Cloudflare 平台,降低服务器成本。Cloud Mail is a serverless responsive email service that supports email sending and can be deployed on Cloudflare to reduce server costs.">
|
||
<title>Cloud Mail</title>
|
||
<link rel="icon" href="/public/mail.png" type="image/png">
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet">
|
||
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
|
||
<script>
|
||
const uiStoreStr = localStorage.getItem('ui')
|
||
if (uiStoreStr) {
|
||
const uiStore = JSON.parse(uiStoreStr)
|
||
const root = document.documentElement
|
||
root.setAttribute('class', uiStore.dark ? 'dark' : '');
|
||
const metaTag = document.getElementById('theme-color-meta');
|
||
const isMobile = !window.matchMedia("(pointer: fine) and (hover: hover)").matches;
|
||
metaTag.setAttribute('content', uiStore.dark ? (isMobile ? '#141414' : '#000000') : (isMobile ? '#FFFFFF' : '#F1F1F1'));
|
||
}
|
||
</script>
|
||
</head>
|
||
<style>
|
||
html {
|
||
background: #FFFFFF;
|
||
}
|
||
.dark {
|
||
background: #141414;
|
||
}
|
||
#loading-first {
|
||
position: fixed;
|
||
left: 0;
|
||
top: 0;
|
||
height: 100%;
|
||
width: 100%;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
z-index: 500;
|
||
background: var(--el-bg-color);
|
||
}
|
||
|
||
.loading-hide {
|
||
pointer-events: none;
|
||
transition: all 200ms;
|
||
opacity: 0;
|
||
}
|
||
|
||
.loading-icon {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 30px;
|
||
}
|
||
|
||
.circular {
|
||
height: 30px;
|
||
width: 30px;
|
||
animation: loading-rotate 1s linear infinite;
|
||
}
|
||
|
||
.loading-path .dot1 {
|
||
transform: translate(3.75px, 3.75px);
|
||
fill: #409EFF;
|
||
animation: custom-spin-move 1s infinite linear alternate;
|
||
opacity: 0.3;
|
||
}
|
||
|
||
.loading-path .dot2 {
|
||
transform: translate(calc(100% - 3.75px), 3.75px);
|
||
fill: #409EFF;
|
||
animation: custom-spin-move 1s infinite linear alternate;
|
||
opacity: 0.3;
|
||
animation-delay: 0.4s;
|
||
}
|
||
|
||
.loading-path .dot3 {
|
||
transform: translate(3.75px, calc(100% - 3.75px));
|
||
fill: #409EFF;
|
||
animation: custom-spin-move 1s infinite linear alternate;
|
||
opacity: 0.3;
|
||
animation-delay: 1.2s;
|
||
}
|
||
|
||
.loading-path .dot4 {
|
||
transform: translate(calc(100% - 3.75px), calc(100% - 3.75px));
|
||
fill: #409EFF;
|
||
animation: custom-spin-move 1s infinite linear alternate;
|
||
opacity: 0.3;
|
||
animation-delay: 0.8s;
|
||
}
|
||
|
||
@keyframes loading-rotate {
|
||
to {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
|
||
@keyframes custom-spin-move {
|
||
to {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
</style>
|
||
<body>
|
||
<div id="loading-first" >
|
||
<div class="loading-icon">
|
||
<svg class="circular" viewBox="0 0 20 20">
|
||
<g class="loading-path">
|
||
<circle r="3.375" class="dot1" rx="0" ry="0"/>
|
||
<circle r="3.375" class="dot2" rx="0" ry="0"/>
|
||
<circle r="3.375" class="dot4" rx="0" ry="0"/>
|
||
<circle r="3.375" class="dot3" rx="0" ry="0"/>
|
||
</g>
|
||
</svg>
|
||
</div>
|
||
</div>
|
||
<div id="app"></div>
|
||
<script type="module" src="/src/main.js"></script>
|
||
</body>
|
||
</html>
|