heisbuba commited on
Commit
c879790
·
verified ·
1 Parent(s): b611b40

Update src/templates/base.html

Browse files
Files changed (1) hide show
  1. src/templates/base.html +140 -169
src/templates/base.html CHANGED
@@ -4,149 +4,133 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
6
  <title>Crypto Volume Analysis Toolki (CryptoVAT)</title>
7
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;600;800&display=swap" rel="stylesheet">
 
 
8
  <style>
9
- /* --- CSS VARIABLES --- */
10
-
11
  :root {
12
- --bg-dark: #0b0e11;
13
- --bg-card: #151a1e;
14
- --text-main: #eaecef;
 
 
 
 
15
  --text-dim: #848e9c;
16
- --accent-green: #0ecb81;
 
 
17
  --accent-blue: #3b82f6;
18
  --accent-orange: #f59e0b;
19
- --accent-red: #f6465d;
20
  --accent-purple: #9333ea;
 
 
21
  --border: #2b3139;
22
- --input-bg: #1e252a;
 
23
  }
24
 
25
  /* --- BASE & LAYOUT --- */
26
 
27
  body {
28
  margin: 0;
29
- background: var(--bg-dark);
30
  color: var(--text-main);
31
  font-family: 'Inter', sans-serif;
32
  display: flex;
33
  flex-direction: column;
34
  min-height: 100vh;
 
 
 
 
 
35
  }
36
 
37
  main {
38
  flex: 1;
39
  width: 100%;
 
40
  }
41
 
42
- /* --- GLOBAL FOOTER --- */
43
 
44
- .footer {
45
- background: var(--bg-card);
46
- border-top: 1px solid var(--border);
47
- padding: 20px;
48
- margin-top: 40px;
49
- display: flex;
50
- justify-content: space-between;
51
- align-items: center;
52
- font-size: 0.85rem;
53
- color: var(--text-dim);
54
- }
55
-
56
- @media (max-width: 600px) {
57
- .footer {
58
- flex-direction: column;
59
- gap: 10px;
60
- text-align: center;
61
- }
62
- }
63
-
64
- /* --- GLOBAL HEADER --- */
65
  .header {
66
- padding: 20px;
67
- background: var(--bg-card);
 
 
 
 
 
 
68
  border-bottom: 1px solid var(--border);
69
  display: flex;
70
  justify-content: space-between;
71
  align-items: center;
 
72
  }
73
 
74
  .header h1 {
75
  margin: 0;
76
- font-size: 1.1rem;
77
- color: var(--accent-green);
 
78
  }
79
 
80
  .header h1 > a {
81
- color: var(--accent-green);
82
- text-decoration: none;
83
- cursor: pointer;
84
- }
85
-
86
- .header h1 > a:hover {
87
- opacity: 0.8;
88
  }
 
89
 
90
- .credit a {
91
- color: var(--accent-green);
92
- text-decoration: none;
93
- cursor: pointer;}
94
 
95
- .credit a:hover {
96
- opacity: 0.8;
97
- }
98
  .icon-btn {
99
  color: var(--text-dim);
100
- text-decoration: none;
101
  font-size: 1.2rem;
102
  padding: 0 10px;
 
103
  }
 
104
 
105
  .logout-btn {
106
  color: var(--accent-red);
107
- text-decoration: none;
108
  font-size: 1.2rem;
109
  padding: 0 10px;
110
  font-weight: bold;
111
  }
 
 
 
 
112
 
113
  .container {
114
  width: 100%;
115
  max-width: 600px;
116
- margin: 30px auto;
117
- padding: 0 15px;
118
  box-sizing: border-box;
119
  }
120
 
121
- /* "Wide" Modifier - for larger layouts */
122
- .container.wide {
123
- max-width: 1000px;
124
- }
125
-
126
- /* --- CARD COMPONENT --- */
127
 
128
  .card {
129
  background: var(--bg-card);
130
- padding: 25px;
131
- border-radius: 12px;
132
  border: 1px solid var(--border);
133
  margin-bottom: 20px;
 
134
  }
135
 
136
  /* --- TYPOGRAPHY --- */
137
 
138
- h1 {
139
- color: var(--accent-green);
140
- text-align: center;
141
- font-size: 1.4rem;
142
- margin-bottom: 10px;
143
- }
144
-
145
- h2 {
146
- color: var(--accent-blue);
147
- font-size: 1.1rem;
148
- margin-top: 20px;
149
- }
150
 
151
  /* --- FORM ELEMENTS --- */
152
 
@@ -154,15 +138,17 @@ input[type="text"],
154
  input[type="email"],
155
  input[type="password"] {
156
  width: 100%;
157
- padding: 12px;
158
  background: var(--input-bg);
159
  border: 1px solid var(--border);
160
  color: #fff;
161
  border-radius: 8px;
162
- font-family: monospace;
163
- margin-top: 5px;
164
  box-sizing: border-box;
 
165
  }
 
166
 
167
  /* --- BUTTONS --- */
168
 
@@ -172,133 +158,118 @@ input[type="password"] {
172
  padding: 15px;
173
  border: none;
174
  border-radius: 8px;
175
- font-weight: 800;
176
  cursor: pointer;
177
  text-align: center;
178
- text-decoration: none;
179
- margin-top: 10px;
180
  font-size: 0.95rem;
181
- transition: transform 0.2s ease; /* For consistent hover animation */
182
- }
183
-
184
- .btn, .help-btn:hover {
185
- transform: translateY(-2px);
186
- }
187
-
188
- /* Button Color Variants */
189
- .btn-green {
190
- background: var(--accent-green);
191
- color: #000;
192
  }
 
193
 
194
- .btn-green:hover {
195
- box-shadow: 0 4px 12px rgba(14, 203, 129, 0.3);
196
- opacity: 0.9;
197
- }
198
 
199
  .btn-blue {
200
- background: var(--bg-card);
201
- width: 90%;
202
  border: 1px solid var(--accent-blue);
203
  color: var(--accent-blue);
 
204
  }
205
-
206
- .btn-blue:hover {
207
- background: rgba(59, 130, 246, 0.1);
208
- box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);
209
- }
210
-
211
- .btn-links, .help-nav-btn {
212
- background: var(--bg-card);
213
- width: 80%;
214
- border: 1px solid var(--accent-blue);
215
- color: var(--accent-blue);
216
- }
217
-
218
- .btn-links, .help-nav-btn:hover {
219
- background: rgba(59, 130, 246, 0.1);
220
- }
221
 
222
  .btn-red {
223
- background: rgba(246, 70, 93, 0.1);
224
- width: 95%;
225
  border: 1px solid var(--accent-red);
226
  color: var(--accent-red);
 
227
  }
 
228
 
229
- .btn-red:hover {
230
- background: rgba(246, 70, 93, 0.2);
231
- box-shadow: 0 4px 12px rgba(246, 70, 93, 0.2);
 
 
 
 
 
232
  }
233
-
234
- /* --- LINK STYLES --- */
235
-
236
- .link {
237
- color: var(--accent-blue);
238
- text-decoration: none;
239
- font-size: 0.85rem;
240
- float: right;
241
  }
242
 
243
- .link:hover {
244
- text-decoration: underline;
245
- }
246
 
247
- /* --- GLOBAL NAV BUTTON --- */
248
 
249
- .back-nav-container {
250
- margin-top: 40px;
251
- padding-top: 20px;
252
- border-top: 1px solid var(--border);
 
 
 
 
253
  text-align: center;
254
  }
255
-
256
- .back-nav-btn {
257
- width: auto;
258
- padding: 10px 25px;
259
- display: inline-block;
260
- margin-bottom: 5px;
 
 
261
  }
262
 
263
- /* --- GRID LAYOUT --- */
264
-
265
- .grid-buttons {
266
- display: grid;
267
- grid-template-columns: 1fr 1fr;
268
- gap: 10px;
269
  }
 
270
 
271
- /* --- MESSAGE STATES --- */
272
-
273
- .error-message {
274
- color: var(--accent-red);
275
- padding: 10px;
276
- background: rgba(246, 70, 93, 0.1);
277
- border-radius: 8px;
278
- margin: 10px 0;
 
 
 
279
  }
 
 
280
 
281
- .success-message {
282
- color: var(--accent-green);
283
- padding: 10px;
284
- background: rgba(14, 203, 129, 0.1);
285
- border-radius: 8px;
286
- margin: 10px 0;
287
  }
288
- </style>
289
  {% block extra_css %}{% endblock %}
290
  </head>
291
  <body>
292
 
293
  <div class="header">
294
- <h1>
295
- <a href="{{ url_for('main.home') }}">CryptoVAT</a>
296
- </h1>
297
  <div>
298
- <a href="{{ url_for('main.help_page') }}" class="icon-btn">?</a>
299
  {% if session.get('user_id') %}
300
  {% if request.endpoint != 'main.setup' %}
301
- <a href="{{ url_for('main.settings') }}" class="icon-btn">⚙️</a>
302
  {% endif %}
303
  <a href="{{ url_for('auth.logout') }}" class="logout-btn" title="Logout">➜]</a>
304
  {% endif %}
@@ -307,8 +278,8 @@ input[type="password"] {
307
 
308
  <main>
309
  {% block content %}{% endblock %}
310
- <!-- GLOBAL NAV BUTTON -->
311
- <div class="back-nav-container">
312
 
313
  {% if session.get('user_id') and request.endpoint not in ['main.home', 'main.setup', 'auth.login', 'auth.register', 'auth.reset_password', 'main.help_page'] %}
314
  <a href="{{ url_for('main.home') }}" class="btn btn-links back-nav-btn">
@@ -316,7 +287,7 @@ input[type="password"] {
316
  </a>
317
 
318
  {% if request.endpoint == 'main.admin_dashboard' and server_time %}
319
- <p style="color: var(--text-dim); font-size: 0.75rem; letter-spacing: 0.5px; margin-top: 15px; margin-bottom: 0;">
320
  SERVER TIMESTAMP: {{ server_time }}
321
  </p>
322
  {% endif %}
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
6
  <title>Crypto Volume Analysis Toolki (CryptoVAT)</title>
7
+
8
+ <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;500;600;800&display=swap" rel="stylesheet">
9
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800&display=swap" rel="stylesheet">
10
  <style>
11
+ /* --- CSS VARIABLES --- */
 
12
  :root {
13
+ /* Backgrounds */
14
+ --bg-dark: #151a1e;
15
+ --bg-card: #1e252a;
16
+ --bg-glass: rgba(21, 26, 30, 0.90);
17
+
18
+ /* Text */
19
+ --text-main: #ffffff;
20
  --text-dim: #848e9c;
21
+
22
+ /* Accents */
23
+ --accent-green: #10b981;
24
  --accent-blue: #3b82f6;
25
  --accent-orange: #f59e0b;
26
+ --accent-red: #ef4444;
27
  --accent-purple: #9333ea;
28
+
29
+ /* UI Elements */
30
  --border: #2b3139;
31
+ --input-bg: #111827;
32
+ --radius: 12px; /
33
  }
34
 
35
  /* --- BASE & LAYOUT --- */
36
 
37
  body {
38
  margin: 0;
39
+ background-color: var(--bg-dark);
40
  color: var(--text-main);
41
  font-family: 'Inter', sans-serif;
42
  display: flex;
43
  flex-direction: column;
44
  min-height: 100vh;
45
+
46
+ /* THE MODERN VIBE */
47
+ background-image: radial-gradient(circle at top right, rgba(16, 185, 129, 0.05) 0%, transparent 40%);
48
+ background-attachment: fixed;
49
+ -webkit-font-smoothing: antialiased;
50
  }
51
 
52
  main {
53
  flex: 1;
54
  width: 100%;
55
+ padding-top: 80px;
56
  }
57
 
58
+ a { text-decoration: none; transition: 0.2s; }
59
 
60
+ /* --- GLOBAL HEADER (Glassmorphism) --- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  .header {
62
+ position: fixed;
63
+ top: 0;
64
+ width: 100%;
65
+ height: 70px;
66
+ padding: 0 20px;
67
+ box-sizing: border-box;
68
+ background: var(--bg-glass);
69
+ backdrop-filter: blur(12px); /
70
  border-bottom: 1px solid var(--border);
71
  display: flex;
72
  justify-content: space-between;
73
  align-items: center;
74
+ z-index: 1000;
75
  }
76
 
77
  .header h1 {
78
  margin: 0;
79
+ font-size: 1.4rem;
80
+ font-weight: 800;
81
+ letter-spacing: -0.5px;
82
  }
83
 
84
  .header h1 > a {
85
+ color: #fff;
 
 
 
 
 
 
86
  }
87
+ .header h1 > a span { color: var(--accent-green); }
88
 
89
+ .header h1 > a:hover { opacity: 0.9; }
 
 
 
90
 
91
+ /* Icons */
 
 
92
  .icon-btn {
93
  color: var(--text-dim);
 
94
  font-size: 1.2rem;
95
  padding: 0 10px;
96
+ transition: color 0.2s;
97
  }
98
+ .icon-btn:hover { color: var(--text-main); }
99
 
100
  .logout-btn {
101
  color: var(--accent-red);
 
102
  font-size: 1.2rem;
103
  padding: 0 10px;
104
  font-weight: bold;
105
  }
106
+ .logout-btn:hover { opacity: 0.8; }
107
+
108
+
109
+ /* --- CONTAINER & CARDS --- */
110
 
111
  .container {
112
  width: 100%;
113
  max-width: 600px;
114
+ margin: 0 auto;
115
+ padding: 0 20px;
116
  box-sizing: border-box;
117
  }
118
 
119
+ .container.wide { max-width: 1000px; }
 
 
 
 
 
120
 
121
  .card {
122
  background: var(--bg-card);
123
+ padding: 30px;
124
+ border-radius: var(--radius);
125
  border: 1px solid var(--border);
126
  margin-bottom: 20px;
127
+ box-shadow: 0 4px 20px rgba(0,0,0,0.1); /* Subtle shadow */
128
  }
129
 
130
  /* --- TYPOGRAPHY --- */
131
 
132
+ h1 { color: var(--accent-green); text-align: center; font-size: 1.5rem; margin-bottom: 20px; }
133
+ h2 { color: var(--accent-blue); font-size: 1.2rem; margin-top: 25px; }
 
 
 
 
 
 
 
 
 
 
134
 
135
  /* --- FORM ELEMENTS --- */
136
 
 
138
  input[type="email"],
139
  input[type="password"] {
140
  width: 100%;
141
+ padding: 14px;
142
  background: var(--input-bg);
143
  border: 1px solid var(--border);
144
  color: #fff;
145
  border-radius: 8px;
146
+ font-family: 'Inter', sans-serif; /* Cleaner than monospace for inputs */
147
+ margin-top: 8px;
148
  box-sizing: border-box;
149
+ font-size: 0.95rem;
150
  }
151
+ input:focus { outline: none; border-color: var(--accent-green); }
152
 
153
  /* --- BUTTONS --- */
154
 
 
158
  padding: 15px;
159
  border: none;
160
  border-radius: 8px;
161
+ font-weight: 700;
162
  cursor: pointer;
163
  text-align: center;
164
+ margin-top: 15px;
 
165
  font-size: 0.95rem;
166
+ transition: all 0.2s ease;
167
+ box-sizing: border-box;
 
 
 
 
 
 
 
 
 
168
  }
169
+ .btn:hover, .help-btn:hover { transform: translateY(-2px); opacity: 0.95; }
170
 
171
+ /* Variants */
172
+ .btn-green { background: var(--accent-green); color: #000; }
173
+ .btn-green:hover { box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3); }
 
174
 
175
  .btn-blue {
176
+ background: transparent;
 
177
  border: 1px solid var(--accent-blue);
178
  color: var(--accent-blue);
179
+ width: 100%;
180
  }
181
+ .btn-blue:hover { background: rgba(59, 130, 246, 0.1); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
  .btn-red {
184
+ background: rgba(239, 68, 68, 0.1);
 
185
  border: 1px solid var(--accent-red);
186
  color: var(--accent-red);
187
+ width: 100%;
188
  }
189
+ .btn-red:hover { background: rgba(239, 68, 68, 0.2); }
190
 
191
+ /* Navigation Buttons (Back Buttons) */
192
+ .btn-links, .help-nav-btn {
193
+ background: transparent;
194
+ border: 1px solid var(--border);
195
+ color: var(--text-dim);
196
+ width: auto;
197
+ display: inline-block;
198
+ padding: 10px 25px;
199
  }
200
+ .btn-links:hover, .help-nav-btn:hover {
201
+ border-color: var(--text-main);
202
+ color: var(--text-main);
203
+ background: rgba(255,255,255,0.05);
 
 
 
 
204
  }
205
 
206
+ /* --- UTILITIES --- */
207
+ .link { color: var(--accent-blue); font-size: 0.9rem; float: right; margin-top: 5px;}
208
+ .link:hover { text-decoration: underline; }
209
 
210
+ .grid-buttons { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
211
 
212
+ /* Messages */
213
+ .error-message {
214
+ color: #fee2e2;
215
+ padding: 15px;
216
+ background: rgba(239, 68, 68, 0.15);
217
+ border: 1px solid var(--accent-red);
218
+ border-radius: 8px;
219
+ margin: 15px 0;
220
  text-align: center;
221
  }
222
+ .success-message {
223
+ color: #d1fae5;
224
+ padding: 15px;
225
+ background: rgba(16, 185, 129, 0.15);
226
+ border: 1px solid var(--accent-green);
227
+ border-radius: 8px;
228
+ margin: 15px 0;
229
+ text-align: center;
230
  }
231
 
232
+ /* --- GLOBAL NAV BUTTON AREA --- */
233
+ .back-nav-container {
234
+ margin-top: 60px;
235
+ padding-top: 30px;
236
+ border-top: 1px solid var(--border);
237
+ text-align: center;
238
  }
239
+ .back-nav-btn { margin-bottom: 5px; }
240
 
241
+ /* --- GLOBAL FOOTER --- */
242
+ .footer {
243
+ background: var(--bg-card);
244
+ border-top: 1px solid var(--border);
245
+ padding: 30px 20px;
246
+ margin-top: auto;
247
+ display: flex;
248
+ justify-content: space-between;
249
+ align-items: center;
250
+ font-size: 0.85rem;
251
+ color: var(--text-dim);
252
  }
253
+ .credit a { color: var(--accent-green); font-weight: 600; }
254
+ .credit a:hover { text-decoration: underline; }
255
 
256
+ @media (max-width: 600px) {
257
+ .footer { flex-direction: column; gap: 15px; text-align: center; }
 
 
 
 
258
  }
259
+ </style>
260
  {% block extra_css %}{% endblock %}
261
  </head>
262
  <body>
263
 
264
  <div class="header">
265
+ <h1>
266
+ <a href="{{ url_for('main.home') }}">Crypto<span style="color:var(--accent-green)">VAT</span></a>
267
+ </h1>
268
  <div>
269
+ <a href="{{ url_for('main.help_page') }}" class="icon-btn" title="Help">?</a>
270
  {% if session.get('user_id') %}
271
  {% if request.endpoint != 'main.setup' %}
272
+ <a href="{{ url_for('main.settings') }}" class="icon-btn" title="Settings">⚙️</a>
273
  {% endif %}
274
  <a href="{{ url_for('auth.logout') }}" class="logout-btn" title="Logout">➜]</a>
275
  {% endif %}
 
278
 
279
  <main>
280
  {% block content %}{% endblock %}
281
+
282
+ <div class="back-nav-container">
283
 
284
  {% if session.get('user_id') and request.endpoint not in ['main.home', 'main.setup', 'auth.login', 'auth.register', 'auth.reset_password', 'main.help_page'] %}
285
  <a href="{{ url_for('main.home') }}" class="btn btn-links back-nav-btn">
 
287
  </a>
288
 
289
  {% if request.endpoint == 'main.admin_dashboard' and server_time %}
290
+ <p style="color: var(--text-dim); font-size: 0.75rem; letter-spacing: 0.5px; margin-top: 15px; margin-bottom: 0; font-family: 'JetBrains Mono', monospace;">
291
  SERVER TIMESTAMP: {{ server_time }}
292
  </p>
293
  {% endif %}