| | {% 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/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 %} |
| |
|