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