File size: 5,043 Bytes
76b9762
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{% extends "base.html" %}

{% block title %}验证页面 - Gemini Balance{% endblock %}

{% block head_extra_styles %}
<style>
    /* auth.html specific styles */
    .auth-glass-card { /* Renamed to avoid conflict if base.html has .glass-card */
        background: rgba(255, 255, 255, 0.95); /* High opacity white for light theme */
        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 { /* Renamed to avoid conflict if base.html has .bg-gradient */
         background: #f8fafc; /* Light gray background for auth page */
    }
    /* .input-icon class removed, using direct Tailwind classes now */
    /* Keep button ripple effect if needed, or remove if base provides similar */
    .auth-button { /* Renamed to avoid conflict */
        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> <!-- Close auth-bg-gradient div -->
<!-- Notification placeholder for base.html's showNotification -->
<div id="notification" class="notification"></div>
    
{% endblock %}

{% block body_scripts %}
<script>
    // auth.html specific JavaScript
    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();
                    // Use the base notification system
                    showNotification('请输入验证令牌', 'error');
                }
            });
        }
        // Apply renamed classes
        document.querySelectorAll('button[type="submit"]').forEach(button => {
             button.classList.add('auth-button');
        });
        const card = document.querySelector('.auth-glass-card'); // Find the renamed card
        if (card) {
            // If the base template also defines .glass-card, remove it first
            // card.classList.remove('glass-card');
        } else {
             // If the card wasn't found by the new name, try the old name and rename
             const oldCard = document.querySelector('.glass-card');
             if (oldCard) {
                 oldCard.classList.remove('glass-card');
                 oldCard.classList.add('auth-glass-card');
             }
        }
    });
</script>
{% endblock %}