alphax/static/index.html
2026-05-14 11:21:21 +08:00

229 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>AlphaX Agent Crypto</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--yellow: #ffd02f; --yellow-light: #fff4c4; --yellow-dark: #746019;
--blue: #4262ff;
--teal: #0fbcb0; --teal-light: #c3faf5; --moss-dark: #187574;
--coral: #ff9999; --coral-light: #ffc6c6; --coral-dark: #600000;
--primary: #1c1c1e; --on-primary: #ffffff; --canvas: #ffffff;
--surface: #f7f8fa; --surface-soft: #fafbfc;
--hairline: #e0e2e8; --hairline-soft: #eef0f3; --hairline-strong: #c7cad5;
--ink: #1c1c1e; --ink-deep: #050038;
--charcoal: #2c2c34; --slate: #555a6a; --steel: #6b6f7e; --stone: #8e91a0; --muted: #a5a8b5;
--shadow: rgba(5,0,56,.08) 0px 12px 32px -4px;
--radius-xs:4px; --radius-sm:6px; --radius-md:8px; --radius-lg:12px; --radius-xl:16px; --radius-xxxl:28px; --radius-full:9999px;
--safe-bottom: env(safe-area-inset-bottom, 0px);
}
html { overflow-x: hidden; height: 100%; }
body {
height: 100%; overflow-x: hidden;
font-family: 'Noto Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
color: var(--ink); background: var(--canvas);
line-height: 1.5; -webkit-font-smoothing: antialiased; text-size-adjust: 100%;
display: flex; flex-direction: column;
}
a { color: inherit; text-decoration: none; }
/* User menu (from app.html nav pattern) */
.user-menu { position: relative; }
.user-trigger {
display: flex; align-items: center; gap: 6px; padding: 6px 12px;
border: 1px solid var(--hairline); border-radius: var(--radius-full);
font-size: 13px; color: var(--slate); cursor: pointer; transition: .15s;
background: var(--canvas); line-height: 1.4;
}
.user-trigger:hover { border-color: var(--hairline-strong); }
.user-avatar {
width: 26px; height: 26px; border-radius: 50%;
background: var(--yellow); color: var(--primary);
display: grid; place-items: center; font-weight: 700; font-size: 12px;
}
.user-dropdown {
display: none; position: absolute; right: 0; top: 42px;
background: var(--canvas); border: 1px solid var(--hairline);
border-radius: var(--radius-lg); box-shadow: var(--shadow);
min-width: 180px; padding: 4px; z-index: 200;
}
.user-dropdown.show { display: block; }
.user-dropdown .dd-email {
padding: 10px 14px; font-size: 12px; color: var(--stone);
border-bottom: 1px solid var(--hairline-soft); margin-bottom: 4px;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.dd-item {
display: block; width: 100%; padding: 8px 14px; border: 0; background: transparent;
font-size: 13px; color: var(--slate); text-align: left; cursor: pointer;
border-radius: var(--radius-sm); transition: .1s;
}
.dd-item:hover { background: var(--surface); color: var(--ink); }
.dd-item.danger { color: var(--red); }
.dd-item.danger:hover { background: var(--red-light); }
/* Auth-dependent visibility */
.nav-guest { display: flex; align-items: center; gap: 8px; }
.nav-user { display: none; }
body.auth .nav-guest { display: none; }
body.auth .nav-user { display: flex; }
/* Shell */
.shell { flex: 1; width: min(100% - 48px, 960px); margin: 0 auto; padding: 40px 0 0; display: flex; flex-direction: column; }
/* Nav */
.nav { display: flex; align-items: center; justify-content: space-between; gap: 16px; height: 48px; }
.nav-left { display: flex; align-items: center; gap: 8px; }
.brand-mark { width: 22px; height: 22px; background: var(--yellow); border-radius: 5px; display: grid; place-items: center; }
.brand-mark::after { content: ""; width: 7px; height: 7px; border: 1.5px solid var(--primary); border-radius: 50%; box-shadow: 5px -3px 0 -1.5px var(--primary); }
.brand-name { font-weight: 500; font-size: 15px; letter-spacing: 0; white-space: nowrap; }
.beta-badge { display:inline-flex; align-items:center; height:20px; padding:0 7px; border-radius:var(--radius-full); background:var(--surface); border:1px solid var(--hairline); color:var(--steel); font-size:11px; font-weight:600; line-height:1; }
.hero-brand .beta-badge { margin-left:2px; }
/* Buttons */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: 0; cursor: pointer; font-weight: 500; font-size: 14px; line-height: 1.3; transition: background .15s, transform .15s; text-decoration: none; -webkit-tap-highlight-color: transparent; }
.btn:active { transform: scale(.98); }
.btn-primary { background: var(--primary); color: var(--on-primary); border-radius: var(--radius-full); padding: 10px 20px; }
.btn-primary:active { background: var(--charcoal); }
.btn-secondary { background: transparent; color: var(--ink); border: 1px solid var(--hairline-strong); border-radius: var(--radius-full); padding: 10px 20px; }
/* Hero */
.hero { padding: 120px 0 0; text-align: center; flex: 1; position: relative; overflow: hidden; }
.hero-bg {
position: absolute; inset: 0; pointer-events: none; user-select: none;
}
.hero-particle {
position: absolute; bottom: -40px;
font-family: 'JetBrains Mono', 'Courier New', monospace;
font-size: 13px; color: var(--slate);
opacity: 0; animation: floatUp var(--dur) var(--delay) infinite linear;
}
@keyframes floatUp {
0% { transform: translateY(0) translateX(0); opacity: 0; }
5% { opacity: var(--a); }
85% { opacity: var(--a); }
100% { transform: translateY(calc(-100vh - 80px)) translateX(var(--dx)); opacity: 0; }
}
.hero-brand { display: flex; align-items: center; justify-content: center; gap: 10px; margin-bottom: 32px; }
.hero-mark { width: 36px; height: 36px; background: var(--yellow); border-radius: 8px; display: grid; place-items: center; flex-shrink: 0; }
.hero-mark::after { content: ""; width: 12px; height: 12px; border: 2px solid var(--primary); border-radius: 50%; box-shadow: 9px -5px 0 -2.5px var(--primary); }
.hero-word { font-weight: 450; font-size: 22px; letter-spacing: 0; color: var(--ink); }
h1 { font-size: clamp(36px, 5.5vw, 56px); font-weight: 500; line-height: 1.1; letter-spacing: -1px; color: var(--ink-deep); max-width: 600px; margin: 0 auto 20px; }
.hero-lead { font-size: 16px; line-height: 1.6; color: var(--slate); max-width: 440px; margin: 0 auto 32px; }
.hero-actions { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; margin-top: 32px; }
/* Footer */
.footer { padding: 32px 0; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; color: var(--stone); font-size: 13px; border-top: 1px solid var(--hairline-soft); flex-shrink: 0; }
.footer-copy { color: var(--stone); }
@media (max-width: 768px) {
.shell { width: min(100% - 32px, 960px); padding: 24px 0 0; }
.hero { padding: 0; display: flex; flex-direction: column; justify-content: center; }
h1 { letter-spacing: -.5px; }
}
@media (max-width: 480px) {
.shell { width: min(100% - 24px, 960px); }
.hero { padding: 0; display: flex; flex-direction: column; justify-content: center; }
.hero-actions { flex-direction: column; align-items: center; width: 100%; }
.hero-actions .btn { width: auto; min-width: 180px; }
.footer { flex-direction: column; text-align: center; gap: 8px; }
}
</style>
</head>
<body>
<div class="shell">
<nav class="nav">
<a class="nav-left" href="/">
<span class="brand-mark"></span>
<span class="brand-name">AlphaX Agent Crypto</span>
</a>
<div class="nav-guest">
<a class="btn btn-secondary" href="/auth?tab=login">登录</a>
</div>
<div class="nav-user">
<div class="user-menu">
<div class="user-trigger" onclick="toggleUserMenu()">
<span class="user-avatar" id="userInitial">?</span>
<span id="userEmailShort">--</span>
<svg width="10" height="6" viewBox="0 0 10 6"><path d="M1 1l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
</div>
<div class="user-dropdown" id="userDropdown">
<div class="dd-email" id="ddEmail">--</div>
<a class="dd-item" href="/app">进入看板</a>
<a class="dd-item danger" href="#" onclick="doLogout()">退出登录</a>
</div>
</div>
</div>
</nav>
<section class="hero">
<div class="hero-bg">
<span class="hero-particle" style="left:5%;--dur:18s;--delay:-2s;--a:0.18;--dx:20px">01001011</span>
<span class="hero-particle" style="left:12%;--dur:22s;--delay:-7s;--a:0.13;--dx:-15px">0x7f3a</span>
<span class="hero-particle" style="left:20%;--dur:20s;--delay:-12s;--a:0.15;--dx:30px">BTC</span>
<span class="hero-particle" style="left:28%;--dur:25s;--delay:-4s;--a:0.13;--dx:-25px">$48.2K</span>
<span class="hero-particle" style="left:35%;--dur:17s;--delay:-9s;--a:0.18;--dx:10px">10110110</span>
<span class="hero-particle" style="left:42%;--dur:23s;--delay:-1s;--a:0.15;--dx:-20px">ETH</span>
<span class="hero-particle" style="left:50%;--dur:19s;--delay:-14s;--a:0.13;--dx:35px">#d4f0</span>
<span class="hero-particle" style="left:56%;--dur:26s;--delay:-6s;--a:0.15;--dx:-10px">SOL</span>
<span class="hero-particle" style="left:63%;--dur:21s;--delay:-11s;--a:0.13;--dx:25px">0.0037</span>
<span class="hero-particle" style="left:70%;--dur:24s;--delay:-3s;--a:0.18;--dx:-30px">11001010</span>
<span class="hero-particle" style="left:77%;--dur:18s;--delay:-8s;--a:0.13;--dx:15px">$1.2M</span>
<span class="hero-particle" style="left:84%;--dur:22s;--delay:-13s;--a:0.15;--dx:-20px">0xa91f</span>
<span class="hero-particle" style="left:90%;--dur:20s;--delay:-5s;--a:0.13;--dx:40px">XRP</span>
<span class="hero-particle" style="left:8%;--dur:27s;--delay:-16s;--a:0.10;--dx:-12px">+2.41%</span>
<span class="hero-particle" style="left:32%;--dur:19s;--delay:-18s;--a:0.13;--dx:22px">0b0101</span>
<span class="hero-particle" style="left:48%;--dur:24s;--delay:-10s;--a:0.10;--dx:-35px">$0.42</span>
<span class="hero-particle" style="left:65%;--dur:21s;--delay:-20s;--a:0.13;--dx:18px">BNB</span>
<span class="hero-particle" style="left:80%;--dur:26s;--delay:-15s;--a:0.10;--dx:-28px">7.13K</span>
<span class="hero-particle" style="left:15%;--dur:23s;--delay:-22s;--a:0.10;--dx:12px">0b1101</span>
<span class="hero-particle" style="left:55%;--dur:28s;--delay:-19s;--a:0.13;--dx:-18px">ADA</span>
</div>
<div class="hero-brand">
<span class="hero-mark"></span>
<span class="hero-word">AlphaX Agent Crypto</span>
<span class="beta-badge">Beta</span>
</div>
<h1>AI Market Intelligence.</h1>
<p class="hero-lead">AI 驱动的 Crypto 市场情报系统,帮助交易者发现机会、验证信号、管理风险。</p>
<div class="hero-actions">
<a class="btn btn-primary hero-cta" id="heroCta" href="/auth?tab=login">立刻体验</a>
</div>
</section>
<footer class="footer">
<span class="footer-copy">&copy; 2026 AlphaX Agent Crypto</span>
</footer>
</div>
<script>
var $ = function(id){ return document.getElementById(id); };
function toggleUserMenu() { $('userDropdown').classList.toggle('show'); }
document.addEventListener('click', function(e) { if (!e.target.closest('.user-menu')) $('userDropdown').classList.remove('show'); });
async function doLogout() { await fetch('/api/auth/logout',{method:'POST'}); window.location.href='/'; }
async function checkAuth() {
try {
var resp = await fetch('/api/auth/me');
if (!resp.ok) return;
var data = await resp.json();
var email = (data.user && data.user.email) || '';
if (!email) return;
document.body.classList.add('auth');
var cta = $('heroCta');
if (cta) cta.href = '/app';
$('userInitial').textContent = email.charAt(0).toUpperCase();
$('userEmailShort').textContent = email.length > 14 ? email.slice(0,12) + '\u2026' : email;
$('ddEmail').textContent = email;
} catch(e) {}
}
checkAuth();
</script>
</body>
</html>