|
|
{% extends "base.html" %} |
|
|
|
|
|
{% block title %}验证页面 - Gemini Balance{% endblock %} |
|
|
|
|
|
{% block head_extra_styles %} |
|
|
<style> |
|
|
|
|
|
.auth-glass-card { |
|
|
background: rgba(255, 255, 255, 0.95); |
|
|
backdrop-filter: blur(20px); |
|
|
-webkit-backdrop-filter: blur(20px); |
|
|
border: 1px solid rgba(0, 0, 0, 0.08); |
|
|
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); |
|
|
} |
|
|
.auth-bg-gradient { |
|
|
background: #f8fafc; |
|
|
} |
|
|
|
|
|
|
|
|
.auth-button { |
|
|
position: relative; |
|
|
overflow: hidden; |
|
|
} |
|
|
.auth-button:after { |
|
|
content: ''; |
|
|
position: absolute; |
|
|
top: 50%; |
|
|
left: 50%; |
|
|
width: 0; |
|
|
height: 0; |
|
|
background: rgba(255, 255, 255, 0.2); |
|
|
border-radius: 50%; |
|
|
transform: translate(-50%, -50%); |
|
|
transition: width 0.6s, height 0.6s; |
|
|
} |
|
|
.auth-button:active:after { |
|
|
width: 300px; |
|
|
height: 300px; |
|
|
opacity: 0; |
|
|
} |
|
|
</style> |
|
|
{% endblock %} |
|
|
|
|
|
{% block content %} |
|
|
<div class="auth-bg-gradient min-h-screen flex flex-col justify-center items-center p-4"> |
|
|
<div class="glass-card rounded-2xl shadow-2xl p-10 max-w-md w-full mx-auto transform transition duration-500 hover:-translate-y-1 hover:shadow-3xl animate-fade-in"> |
|
|
<div class="flex justify-center mb-8 animate-slide-down"> |
|
|
<div class="rounded-full bg-primary-100 p-4 text-primary-600"> |
|
|
<i class="fas fa-shield-alt text-4xl"></i> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<h2 class="text-3xl font-extrabold text-center text-gray-800 mb-8 animate-slide-down"> |
|
|
<img src="{{ static_url('icons/logo.png') }}" alt="Gemini Balance Logo" class="h-9 inline-block align-middle mr-2"> |
|
|
Gemini Balance |
|
|
</h2> |
|
|
|
|
|
<form id="auth-form" action="/auth" method="post" class="space-y-6 animate-slide-up"> |
|
|
<div class="relative"> |
|
|
<i class="fas fa-key absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-500"></i> |
|
|
<input |
|
|
type="password" |
|
|
id="auth-token" |
|
|
name="auth_token" |
|
|
required |
|
|
placeholder="请输入验证令牌" |
|
|
class="w-full pl-10 pr-4 py-4 rounded-xl border border-gray-300 focus:border-primary-500 focus:ring focus:ring-primary-200 focus:ring-opacity-50 transition duration-300 bg-white bg-opacity-90 text-gray-700" |
|
|
> |
|
|
</div> |
|
|
|
|
|
<button |
|
|
type="submit" |
|
|
class="w-full py-4 rounded-xl bg-blue-600 hover:bg-blue-700 text-white font-semibold transition duration-300 transform hover:-translate-y-1 hover:shadow-lg" |
|
|
> |
|
|
登录 |
|
|
</button> |
|
|
</form> |
|
|
|
|
|
{% if error %} |
|
|
<p class="mt-4 text-red-500 text-center font-medium p-3 bg-red-50 rounded-lg border border-red-200 animate-shake"> |
|
|
{{ error }} |
|
|
</p> |
|
|
{% endif %} |
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div id="notification" class="notification"></div> |
|
|
|
|
|
{% endblock %} |
|
|
|
|
|
{% block body_scripts %} |
|
|
<script> |
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
const form = document.getElementById('auth-form'); |
|
|
if (form) { |
|
|
form.addEventListener('submit', function(e) { |
|
|
const token = document.getElementById('auth-token').value.trim(); |
|
|
if (!token) { |
|
|
e.preventDefault(); |
|
|
|
|
|
showNotification('请输入验证令牌', 'error'); |
|
|
} |
|
|
}); |
|
|
} |
|
|
|
|
|
document.querySelectorAll('button[type="submit"]').forEach(button => { |
|
|
button.classList.add('auth-button'); |
|
|
}); |
|
|
const card = document.querySelector('.auth-glass-card'); |
|
|
if (card) { |
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
const oldCard = document.querySelector('.glass-card'); |
|
|
if (oldCard) { |
|
|
oldCard.classList.remove('glass-card'); |
|
|
oldCard.classList.add('auth-glass-card'); |
|
|
} |
|
|
} |
|
|
}); |
|
|
</script> |
|
|
{% endblock %} |
|
|
|