Files
vscode-workbench/login-templates/v2/template4-dark-premium.html
T

289 lines
10 KiB
HTML

<!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>可乐Web - 暗色高级感</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:wght@600;700;800&family=Noto+Sans+SC:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
body{
font-family:'DM Sans','Noto Sans SC',sans-serif;
background:#050505;
display:flex;justify-content:center;align-items:center;
min-height:100vh;padding:20px;
-webkit-font-smoothing:antialiased;
}
.phone{
width:390px;min-height:844px;background:#0a0a0a;
border-radius:50px;overflow:hidden;position:relative;
box-shadow:0 50px 120px rgba(245,166,35,0.08),0 0 0 1px rgba(255,255,255,0.05);
}
/* 噪点纹理 */
.phone::before{
content:'';position:absolute;inset:0;z-index:1;opacity:0.03;pointer-events:none;
background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* 金色光晕 */
.gold-glow{
position:absolute;width:300px;height:300px;
background:radial-gradient(circle,rgba(245,166,35,0.08),transparent 70%);
border-radius:50%;z-index:0;
top:-80px;right:-80px;
}
.dynamic-island{
width:126px;height:36px;background:#1a1a1a;border-radius:20px;
position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:20;
}
.status-bar{
display:flex;justify-content:space-between;align-items:center;
padding:18px 30px 0;font-size:15px;font-weight:600;color:rgba(255,255,255,0.6);
position:relative;z-index:15;
}
.status-icons{display:flex;gap:5px;align-items:center}
.content{
position:relative;z-index:10;
padding:80px 32px 40px;min-height:844px;
display:flex;flex-direction:column;
}
/* 品牌 */
.brand{display:flex;align-items:center;gap:14px;margin-bottom:44px}
.brand-icon{
width:48px;height:48px;
background:linear-gradient(135deg,rgba(245,166,35,0.15),rgba(245,166,35,0.05));
border:1px solid rgba(245,166,35,0.2);
border-radius:14px;display:flex;align-items:center;justify-content:center;
font-size:24px;
}
.brand-name{
font-size:18px;font-weight:600;color:rgba(255,255,255,0.8);
letter-spacing:1px;text-transform:uppercase;
}
/* 标题 */
.heading{margin-bottom:40px}
.heading h1{
font-family:'Playfair Display',serif;
font-size:34px;font-weight:700;color:#fff;
line-height:1.15;letter-spacing:-0.5px;
}
.heading h1 em{
font-style:normal;
background:linear-gradient(135deg,#F5A623,#F7DC6F);
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
background-clip:text;
}
.heading p{font-size:15px;color:rgba(255,255,255,0.35);margin-top:10px;font-weight:300}
/* 登录方式 */
.method-tabs{
display:flex;gap:28px;margin-bottom:36px;
border-bottom:1px solid rgba(255,255,255,0.06);padding-bottom:0;
}
.method-tab{
padding:0 0 12px;font-size:14px;font-weight:500;
color:rgba(255,255,255,0.3);border:none;background:transparent;
cursor:pointer;font-family:inherit;position:relative;
transition:color 0.3s ease;
}
.method-tab.active{color:rgba(245,166,35,0.9)}
.method-tab.active::after{
content:'';position:absolute;bottom:-1px;left:0;right:0;
height:2px;background:linear-gradient(90deg,#F5A623,#F7DC6F);
border-radius:1px;
}
.form-part{display:none}
.form-part.active{display:block;animation:elegantFade 0.4s ease}
@keyframes elegantFade{
from{opacity:0;transform:translateY(8px)}
to{opacity:1;transform:translateY(0)}
}
/* 底线输入 */
.field{margin-bottom:28px}
.field label{
display:block;font-size:11px;font-weight:600;
color:rgba(255,255,255,0.3);margin-bottom:10px;
text-transform:uppercase;letter-spacing:1.5px;
}
.field input{
width:100%;padding:14px 0;
border:none;border-bottom:1px solid rgba(255,255,255,0.08);
background:transparent;font-size:16px;font-family:inherit;
color:rgba(255,255,255,0.9);outline:none;
transition:border-color 0.3s ease;
}
.field input:focus{border-color:rgba(245,166,35,0.5)}
.field input::placeholder{color:rgba(255,255,255,0.15)}
.code-row{display:flex;gap:12px;align-items:stretch}
.code-row .field{flex:1;margin-bottom:0}
.code-get{
padding:0 20px;border:1px solid rgba(245,166,35,0.3);border-radius:8px;
background:transparent;font-size:12px;font-weight:600;
color:rgba(245,166,35,0.8);cursor:pointer;white-space:nowrap;
font-family:inherit;transition:all 0.3s ease;
letter-spacing:0.5px;
}
.code-get:hover{background:rgba(245,166,35,0.08)}
.forgot{text-align:right;margin-bottom:32px}
.forgot a{font-size:13px;color:rgba(255,255,255,0.3);text-decoration:none;font-weight:400}
/* 金色按钮 */
.btn-gold{
width:100%;padding:16px;border:none;border-radius:12px;
background:linear-gradient(135deg,#F5A623,#E8960D);color:#0a0a0a;
font-size:15px;font-weight:700;cursor:pointer;font-family:inherit;
transition:all 0.4s ease;letter-spacing:0.5px;
box-shadow:0 4px 20px rgba(245,166,35,0.2);
}
.btn-gold:hover{box-shadow:0 8px 30px rgba(245,166,35,0.3);transform:translateY(-1px)}
.btn-gold:active{transform:scale(0.98)}
/* 分割 */
.mini-divider{
display:flex;align-items:center;gap:16px;margin:32px 0 24px;
}
.mini-divider::before,.mini-divider::after{content:'';flex:1;height:0.5px;background:rgba(255,255,255,0.06)}
.mini-divider span{font-size:11px;color:rgba(255,255,255,0.2);letter-spacing:2px;text-transform:uppercase}
.social-row{display:flex;justify-content:center;gap:16px;margin-bottom:32px}
.social-btn{
width:52px;height:52px;border-radius:14px;
border:1px solid rgba(255,255,255,0.06);
background:rgba(255,255,255,0.02);
display:flex;align-items:center;justify-content:center;
font-size:20px;cursor:pointer;transition:all 0.3s ease;
}
.social-btn:active{background:rgba(255,255,255,0.06)}
.switch-text{
text-align:center;font-size:14px;color:rgba(255,255,255,0.25);
margin-top:auto;padding-top:16px;
}
.switch-text a{color:rgba(245,166,35,0.8);text-decoration:none;font-weight:600}
.agreement{
text-align:center;font-size:11px;color:rgba(255,255,255,0.15);
line-height:1.8;margin-top:16px;
}
.agreement a{color:rgba(255,255,255,0.3);text-decoration:none}
@media(max-width:440px){
body{padding:0}
.phone{width:100%;border-radius:0;box-shadow:none;min-height:100vh}
.dynamic-island{display:none}
}
</style>
</head>
<body>
<div class="phone">
<div class="gold-glow"></div>
<div class="dynamic-island"></div>
<div class="status-bar">
<span>9:41</span>
<div class="status-icons">
<svg width="17" height="12" viewBox="0 0 17 12" fill="currentColor"><path d="M1 8.5h1.5v3H1zM4 6h1.5v5.5H4zM7 3.5h1.5v8H7zM10 1.5h1.5v10H10zM13 0h1.5v11.5H13z"/></svg>
<svg width="15" height="11" viewBox="0 0 15 11" fill="currentColor"><path d="M7.5 3.5c2 0 3.7.8 5 2.1l-1.4 1.4c-1-1-2.2-1.6-3.6-1.6s-2.6.6-3.6 1.6L2.5 5.6c1.3-1.3 3-2.1 5-2.1zM7.5 0c3.2 0 6 1.3 8.1 3.4L14.2 5.3C12.5 3.6 10.1 2.5 7.5 2.5S2.5 3.6.8 5.3L-.6 3.4C1.5 1.3 4.3 0 7.5 0zM7.5 7c1 0 2 .4 2.7 1.1L7.5 11 4.8 8.1C5.5 7.4 6.5 7 7.5 7z"/></svg>
<svg width="27" height="13" viewBox="0 0 27 13" fill="currentColor"><rect x="0.5" y="0.5" width="22" height="12" rx="3.5" fill="none" stroke="currentColor" stroke-width="1"/><rect x="23.5" y="4" width="2" height="5" rx="1"/><rect x="2" y="2" width="18" height="9" rx="2"/></svg>
</div>
</div>
<div class="content">
<div class="brand">
<div class="brand-icon">🥤</div>
<div class="brand-name">可乐Web</div>
</div>
<div class="heading">
<h1>欢迎<em>回来</em></h1>
<p>登录你的账户,继续探索</p>
</div>
<div class="method-tabs">
<button class="method-tab active" onclick="switchMethod('pwd',this)">密码登录</button>
<button class="method-tab" onclick="switchMethod('code',this)">验证码登录</button>
</div>
<!-- 密码登录 -->
<div class="form-part active" id="m-pwd">
<div class="field">
<label>账号</label>
<input type="text" placeholder="用户名 / 邮箱">
</div>
<div class="field">
<label>密码</label>
<input type="password" placeholder="请输入密码">
</div>
<div class="forgot"><a href="#">忘记密码?</a></div>
<button class="btn-gold">登 录</button>
</div>
<!-- 验证码登录 -->
<div class="form-part" id="m-code">
<div class="field">
<label>邮箱</label>
<input type="email" placeholder="your@email.com">
</div>
<div class="field">
<label>验证码</label>
<div class="code-row">
<input type="text" placeholder="输入验证码" maxlength="8">
<button class="code-get" onclick="countdown(this)">发送验证码</button>
</div>
</div>
<div style="height:8px"></div>
<button class="btn-gold">登录 / 注册</button>
</div>
<div class="mini-divider"><span>OR</span></div>
<div class="social-row">
<div class="social-btn">🐧</div>
<div class="social-btn">💬</div>
<div class="social-btn">📢</div>
</div>
<div class="switch-text">
还没有账户? <a href="#">注册新账户</a>
</div>
<div class="agreement">
登录即代表同意 <a href="#">用户协议</a> 和 <a href="#">隐私政策</a>
</div>
</div>
</div>
<script>
function switchMethod(type, btn) {
document.querySelectorAll('.method-tab').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
document.querySelectorAll('.form-part').forEach(p => p.classList.remove('active'));
document.getElementById('m-' + type).classList.add('active');
}
function countdown(btn) {
if (btn._timer) return;
let sec = 60;
const orig = btn.textContent;
btn.textContent = sec + 's';
btn._timer = setInterval(() => {
sec--;
if (sec <= 0) { clearInterval(btn._timer); btn._timer = null; btn.textContent = orig; }
else btn.textContent = sec + 's';
}, 1000);
}
</script>
</body>
</html>