harshdhane commited on
Commit
4b7e032
ยท
verified ยท
1 Parent(s): 6074b7f

Update templates/index.html

Browse files
Files changed (1) hide show
  1. templates/index.html +422 -126
templates/index.html CHANGED
@@ -5,176 +5,472 @@
5
  <title>{{ language_dict['excuse_header'] }} ๐ŸŽ™๏ธ</title>
6
  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
7
  <style>
 
 
 
 
 
 
8
  body {
9
- font-family: 'Segoe UI', sans-serif;
10
- background-color: #edf2fa;
 
11
  color: #333;
 
 
 
 
 
 
12
  padding: 20px;
13
- max-width: 800px;
14
- margin: auto;
15
  }
16
- h1, h2, h3 {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  color: #2c3e50;
 
 
 
 
 
 
 
 
 
18
  }
 
 
 
 
 
 
19
  form {
20
- background-color: #fff;
21
- padding: 20px;
22
- border-radius: 12px;
23
- box-shadow: 0 2px 10px rgba(0,0,0,0.05);
 
 
 
 
 
 
24
  margin-bottom: 20px;
25
  }
 
26
  label {
27
- font-weight: bold;
28
  display: block;
29
- margin-top: 15px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  }
31
- select, input[type="radio"] {
32
- margin-top: 5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  input[type="submit"], button {
35
- margin-top: 20px;
36
- background-color: #4CAF50;
37
  color: white;
38
- padding: 10px 18px;
39
  border: none;
40
- border-radius: 6px;
41
  cursor: pointer;
 
 
 
 
 
 
 
 
42
  }
 
43
  input[type="submit"]:hover, button:hover {
44
- background-color: #45a049;
 
 
 
 
 
 
45
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  .proof-img {
47
- max-width: 400px;
48
- margin-top: auto;
 
 
 
 
 
 
 
 
 
 
49
  border-radius: 10px;
50
- box-shadow: 0 0 8px rgba(0,0,0,0.1);
 
 
51
  }
 
52
  ol {
53
  padding-left: 0;
 
54
  }
 
55
  li {
56
- margin: 10px 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
58
- a {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  text-decoration: none;
60
- color: #0077cc;
 
 
 
 
 
 
 
61
  }
62
- a:hover {
63
- text-decoration: underline;
 
 
 
64
  }
 
65
  .prediction-box {
66
- background-color: #eef;
67
- padding: 12px;
68
- border-radius: 10px;
69
- margin-top: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
  </style>
72
  </head>
73
  <body>
74
  <div class="container">
 
 
75
 
76
- <h1>{{ language_dict['excuse_header'] }}</h1>
77
- <p>{{ language_dict['excuse_intro'] }}</p>
78
-
79
- <form method="post">
80
- <label>{{ language_dict['choose_scenario'] }}:</label>
81
- <select name="scenario">
82
- <option value="Work" {% if request.form.get('scenario') == 'Work' %}selected{% endif %}>{{ language_dict['work'] }}</option>
83
- <option value="School" {% if request.form.get('scenario') == 'School' %}selected{% endif %}>{{ language_dict['school'] }}</option>
84
- <option value="Social" {% if request.form.get('scenario') == 'Social' %}selected{% endif %}>{{ language_dict['social'] }}</option>
85
- <option value="Family" {% if request.form.get('scenario') == 'Family' %}selected{% endif %}>{{ language_dict['family'] }}</option>
86
- </select>
87
-
88
- <label>{{ language_dict['urgency'] }}:</label>
89
- <input type="radio" name="urgency" value="Low" {% if request.form.get('urgency') == 'Low' %}checked{% endif %}> Low
90
- <input type="radio" name="urgency" value="Medium" {% if request.form.get('urgency') == 'Medium' %}checked{% endif %}> Medium
91
- <input type="radio" name="urgency" value="High" {% if request.form.get('urgency') == 'High' %}checked{% endif %}> High
92
-
93
- <label>Select Language for Voice Output:</label>
94
- <select name="language" id="language">
95
- <option value="en-US" {% if selected_language == 'en-US' %}selected{% endif %}>English ๐Ÿ‡บ๐Ÿ‡ธ</option>
96
- <option value="hi-IN" {% if selected_language == 'hi-IN' %}selected{% endif %}>Hindi ๐Ÿ‡ฎ๐Ÿ‡ณ</option>
97
- <option value="te-IN" {% if selected_language == 'te-IN' %}selected{% endif %}>Telugu ๐Ÿ‡ฎ๐Ÿ‡ณ</option>
98
- <option value="es-ES" {% if selected_language == 'es-ES' %}selected{% endif %}>Spanish ๐Ÿ‡ช๐Ÿ‡ธ</option>
99
- <option value="fr-FR" {% if selected_language == 'fr-FR' %}selected{% endif %}>French ๐Ÿ‡ซ๐Ÿ‡ท</option>
100
- </select>
101
-
102
- <input type="submit" value="{{ language_dict['generate_excuse'] }}">
103
- </form>
104
- </div>
105
 
106
- {% if excuse %}
107
- <h2>Your Excuse:</h2>
108
- <p id="excuseText">{{ excuse }}</p>
109
- <button onclick="speakExcuse()">๐Ÿ”Š Play Excuse</button>
110
-
111
- <script>
112
- function speakExcuse() {
113
- const text = document.getElementById('excuseText').innerText;
114
- const language = document.getElementById('language').value;
115
- const utterance = new SpeechSynthesisUtterance(text);
116
- utterance.lang = language;
117
-
118
- function loadAndSpeak() {
119
- const voices = window.speechSynthesis.getVoices();
120
- let matchedVoice = voices.find(voice => voice.lang === language);
121
-
122
- // Telugu fallback
123
- if (language === 'te-IN' && !matchedVoice) {
124
- matchedVoice = voices.find(voice => voice.lang.startsWith('en'));
125
- utterance.lang = 'en-US';
126
- alert("โš ๏ธ Telugu voice not supported on your browser. Using English voice instead.");
127
- }
128
 
129
- if (matchedVoice) {
130
- utterance.voice = matchedVoice;
131
- }
 
132
 
133
- window.speechSynthesis.speak(utterance);
134
- }
135
-
136
- if (window.speechSynthesis.getVoices().length === 0) {
137
- // Wait for voices to load
138
- window.speechSynthesis.onvoiceschanged = loadAndSpeak;
139
- } else {
140
- loadAndSpeak();
141
- }
142
- }
143
- </script>
144
-
145
-
146
- </script>
147
- {% endif %}
148
-
149
- {% if proof %}
150
- <h3>Fake Proof:</h3>
151
- <img src="{{ proof }}" alt="Fake Proof" class="proof-img">
152
- {% endif %}
153
-
154
- {% if top_excuses %}
155
- <h2>๐Ÿ† Top Excuses:</h2>
156
- <ol>
157
- {% for excuse in top_excuses %}
158
- <li>
159
- {% if loop.index == 1 %}๐Ÿฅ‡{% elif loop.index == 2 %}๐Ÿฅˆ{% elif loop.index == 3 %}๐Ÿฅ‰{% endif %}
160
- <strong>{{ excuse }}</strong>
161
- </li>
162
- {% endfor %}
163
- </ol>
164
- {% endif %}
165
-
166
- {% if predicted_schedule %}
167
- <div class="prediction-box">
168
- ๐Ÿ“… <strong>Prediction:</strong> Based on your history, you may need your next excuse on: <strong>{{ predicted_schedule }}</strong>
169
- </div>
170
- {% endif %}
171
 
172
- <p><a href="{{ url_for('apology') }}">๐Ÿ’” Generate a guilt-tripping apology</a></p>
173
- <p><a href="{{ url_for('history') }}">๐Ÿ•’ View History and Favorites</a></p>
174
 
175
- </body>
176
- </html>
 
 
 
 
177
 
 
 
 
 
 
 
178
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
 
 
 
 
 
 
 
 
 
180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  <title>{{ language_dict['excuse_header'] }} ๐ŸŽ™๏ธ</title>
6
  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
7
  <style>
8
+ * {
9
+ margin: 0;
10
+ padding: 0;
11
+ box-sizing: border-box;
12
+ }
13
+
14
  body {
15
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
16
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
17
+ min-height: 100vh;
18
  color: #333;
19
+ line-height: 1.6;
20
+ }
21
+
22
+ .container {
23
+ max-width: 900px;
24
+ margin: 0 auto;
25
  padding: 20px;
 
 
26
  }
27
+
28
+ h1 {
29
+ text-align: center;
30
+ color: #000000;
31
+ font-size: 2.5rem;
32
+ margin-bottom: 10px;
33
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
34
+ font-weight: 700;
35
+ }
36
+
37
+ .container > p:first-of-type {
38
+ text-align: center;
39
+ color: #473737;
40
+ font-size: 1.1rem;
41
+ margin-bottom: 30px;
42
+ opacity: 0.9;
43
+ }
44
+
45
+ h2, h3 {
46
  color: #2c3e50;
47
+ margin-bottom: 15px;
48
+ font-weight: 600;
49
+ }
50
+
51
+ h2 {
52
+ font-size: 1.8rem;
53
+ border-bottom: 3px solid #3498db;
54
+ padding-bottom: 5px;
55
+ display: inline-block;
56
  }
57
+
58
+ h3 {
59
+ font-size: 1.4rem;
60
+ color: #e74c3c;
61
+ }
62
+
63
  form {
64
+ background: rgba(255, 255, 255, 0.95);
65
+ backdrop-filter: blur(10px);
66
+ padding: 30px;
67
+ border-radius: 15px;
68
+ box-shadow: 0 15px 35px rgba(0,0,0,0.1);
69
+ margin-bottom: 30px;
70
+ border: 1px solid rgba(255,255,255,0.2);
71
+ }
72
+
73
+ .form-group {
74
  margin-bottom: 20px;
75
  }
76
+
77
  label {
78
+ font-weight: 600;
79
  display: block;
80
+ margin-bottom: 8px;
81
+ color: #2c3e50;
82
+ font-size: 1rem;
83
+ }
84
+
85
+ select {
86
+ width: 100%;
87
+ padding: 12px 15px;
88
+ border: 2px solid #ddd;
89
+ border-radius: 8px;
90
+ font-size: 1rem;
91
+ background-color: #fff;
92
+ color: #333;
93
+ transition: all 0.3s ease;
94
+ appearance: none;
95
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
96
+ background-position: right 12px center;
97
+ background-repeat: no-repeat;
98
+ background-size: 16px;
99
+ padding-right: 40px;
100
+ }
101
+
102
+ select:focus {
103
+ outline: none;
104
+ border-color: #3498db;
105
+ box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
106
  }
107
+
108
+ .radio-group {
109
+ display: flex;
110
+ gap: 20px;
111
+ margin-top: 8px;
112
+ flex-wrap: wrap;
113
+ }
114
+
115
+ .radio-option {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 8px;
119
+ cursor: pointer;
120
+ padding: 8px 15px;
121
+ border: 2px solid #ddd;
122
+ border-radius: 25px;
123
+ transition: all 0.3s ease;
124
+ background-color: #fff;
125
+ }
126
+
127
+ .radio-option:hover {
128
+ border-color: #3498db;
129
+ background-color: #f8f9ff;
130
  }
131
+
132
+ .radio-option input[type="radio"] {
133
+ margin: 0;
134
+ accent-color: #3498db;
135
+ }
136
+
137
+ .radio-option input[type="radio"]:checked + span {
138
+ color: #3498db;
139
+ font-weight: 600;
140
+ }
141
+
142
+ .radio-option:has(input[type="radio"]:checked) {
143
+ border-color: #3498db;
144
+ background-color: #f8f9ff;
145
+ }
146
+
147
+ input[type="file"] {
148
+ width: 100%;
149
+ padding: 12px;
150
+ border: 2px dashed #ddd;
151
+ border-radius: 8px;
152
+ background-color: #f8f9fa;
153
+ cursor: pointer;
154
+ transition: all 0.3s ease;
155
+ }
156
+
157
+ input[type="file"]:hover {
158
+ border-color: #3498db;
159
+ background-color: #f0f8ff;
160
+ }
161
+
162
  input[type="submit"], button {
163
+ background: linear-gradient(135deg, #3498db, #2980b9);
 
164
  color: white;
165
+ padding: 15px 30px;
166
  border: none;
167
+ border-radius: 8px;
168
  cursor: pointer;
169
+ font-size: 1.1rem;
170
+ font-weight: 600;
171
+ transition: all 0.3s ease;
172
+ box-shadow: 0 4px 15px rgba(52, 152, 219, 0.3);
173
+ text-transform: uppercase;
174
+ letter-spacing: 0.5px;
175
+ width: 100%;
176
+ margin-top: 20px;
177
  }
178
+
179
  input[type="submit"]:hover, button:hover {
180
+ background: linear-gradient(135deg, #2980b9, #3498db);
181
+ transform: translateY(-2px);
182
+ box-shadow: 0 6px 20px rgba(52, 152, 219, 0.4);
183
+ }
184
+
185
+ input[type="submit"]:active, button:active {
186
+ transform: translateY(0);
187
  }
188
+
189
+ .result-section {
190
+ background: rgba(255, 255, 255, 0.95);
191
+ backdrop-filter: blur(10px);
192
+ padding: 25px;
193
+ border-radius: 15px;
194
+ box-shadow: 0 10px 30px rgba(0,0,0,0.1);
195
+ margin-bottom: 20px;
196
+ border: 1px solid rgba(255,255,255,0.2);
197
+ }
198
+
199
+ #excuseText {
200
+ background-color: #f8f9fa;
201
+ padding: 20px;
202
+ border-radius: 10px;
203
+ border-left: 4px solid #3498db;
204
+ font-size: 1.1rem;
205
+ line-height: 1.6;
206
+ margin-bottom: 15px;
207
+ color: #2c3e50;
208
+ }
209
+
210
+ .play-button {
211
+ background: linear-gradient(135deg, #27ae60, #2ecc71);
212
+ width: auto;
213
+ display: inline-block;
214
+ margin-top: 10px;
215
+ padding: 12px 25px;
216
+ font-size: 1rem;
217
+ }
218
+
219
+ .play-button:hover {
220
+ background: linear-gradient(135deg, #2ecc71, #27ae60);
221
+ }
222
+
223
  .proof-img {
224
+ display: block; /* Make the image a block-level element */
225
+ margin: 5px auto; /* Auto left and right margin centers it horizontally */
226
+ max-width: 500px;
227
+ height: 400px;
228
+ border-radius: 19px;
229
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
230
+ border: 3px solid #fff;
231
+ }
232
+
233
+ .placeholder-proof {
234
+ background-color: #f0f0f0;
235
+ padding: 20px;
236
  border-radius: 10px;
237
+ text-align: center;
238
+ margin: 20px 0;
239
+ border: 2px dashed #ccc;
240
  }
241
+
242
  ol {
243
  padding-left: 0;
244
+ counter-reset: item;
245
  }
246
+
247
  li {
248
+ margin: 15px 0;
249
+ padding: 15px;
250
+ background-color: #f8f9fa;
251
+ border-radius: 10px;
252
+ border-left: 4px solid #3498db;
253
+ list-style: none;
254
+ counter-increment: item;
255
+ position: relative;
256
+ transition: all 0.3s ease;
257
+ }
258
+
259
+ li:hover {
260
+ background-color: #e3f2fd;
261
+ transform: translateX(5px);
262
  }
263
+
264
+ li::before {
265
+ content: counter(item);
266
+ background: #3498db;
267
+ color: white;
268
+ font-weight: bold;
269
+ border-radius: 50%;
270
+ width: 30px;
271
+ height: 30px;
272
+ display: inline-flex;
273
+ align-items: center;
274
+ justify-content: center;
275
+ margin-right: 15px;
276
+ font-size: 0.9rem;
277
+ }
278
+
279
+ .navigation-links {
280
+ display: flex;
281
+ gap: 15px;
282
+ justify-content: center;
283
+ margin-top: 30px;
284
+ flex-wrap: wrap;
285
+ }
286
+
287
+ .navigation-links a {
288
  text-decoration: none;
289
+ color: #000000;
290
+ background: rgba(255, 255, 255, 0.2);
291
+ padding: 12px 20px;
292
+ border-radius: 25px;
293
+ transition: all 0.3s ease;
294
+ backdrop-filter: blur(10px);
295
+ border: 1px solid rgba(255, 255, 255, 0.3);
296
+ font-weight: 500;
297
  }
298
+
299
+ .navigation-links a:hover {
300
+ background: rgba(255, 255, 255, 0.3);
301
+ transform: translateY(-2px);
302
+ box-shadow: 0 5px 15px rgba(0,0,0,0.2);
303
  }
304
+
305
  .prediction-box {
306
+ background: linear-gradient(135deg, #ff7675, #fd79a8);
307
+ color: white;
308
+ padding: 20px;
309
+ border-radius: 15px;
310
+ margin: 20px 0;
311
+ text-align: center;
312
+ font-size: 1.1rem;
313
+ box-shadow: 0 8px 25px rgba(255, 118, 117, 0.3);
314
+ }
315
+
316
+ .prediction-box strong {
317
+ font-size: 1.2rem;
318
+ }
319
+
320
+ @media (max-width: 768px) {
321
+ .container {
322
+ padding: 15px;
323
+ }
324
+
325
+ h1 {
326
+ font-size: 2rem;
327
+ }
328
+
329
+ form {
330
+ padding: 20px;
331
+ }
332
+
333
+ .radio-group {
334
+ flex-direction: column;
335
+ gap: 10px;
336
+ }
337
+
338
+ .navigation-links {
339
+ flex-direction: column;
340
+ align-items: center;
341
+ }
342
+
343
+ .navigation-links a {
344
+ width: 80%;
345
+ text-align: center;
346
+ }
347
  }
348
  </style>
349
  </head>
350
  <body>
351
  <div class="container">
352
+ <h1>{{ language_dict['excuse_header'] }}</h1>
353
+ <p>{{ language_dict['excuse_intro'] }}</p>
354
 
355
+ <form method="post" enctype="multipart/form-data">
356
+ <div class="form-group">
357
+ <label>{{ language_dict['choose_scenario'] }}</label>
358
+ <select name="scenario">
359
+ <option value="Work" {% if request.form.get('scenario') == 'Work' %}selected{% endif %}>{{ language_dict['work'] }}</option>
360
+ <option value="School" {% if request.form.get('scenario') == 'School' %}selected{% endif %}>{{ language_dict['school'] }}</option>
361
+ <option value="Social" {% if request.form.get('scenario') == 'Social' %}selected{% endif %}>{{ language_dict['social'] }}</option>
362
+ <option value="Family" {% if request.form.get('scenario') == 'Family' %}selected{% endif %}>{{ language_dict['family'] }}</option>
363
+ </select>
364
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365
 
366
+ <div class="form-group">
367
+ <label>{{ language_dict['urgency'] }}:</label>
368
+ <div class="radio-group">
369
+ <label class="radio-option">
370
+ <input type="radio" name="urgency" value="Low" {% if request.form.get('urgency') == 'Low' %}checked{% endif %}>
371
+ <span>Low</span>
372
+ </label>
373
+ <label class="radio-option">
374
+ <input type="radio" name="urgency" value="Medium" {% if request.form.get('urgency') == 'Medium' %}checked{% endif %}>
375
+ <span>Medium</span>
376
+ </label>
377
+ <label class="radio-option">
378
+ <input type="radio" name="urgency" value="High" {% if request.form.get('urgency') == 'High' %}checked{% endif %}>
379
+ <span>High</span>
380
+ </label>
381
+ </div>
382
+ </div>
 
 
 
 
 
383
 
384
+ <div class="form-group">
385
+ <label>Upload Proof Image (optional):</label>
386
+ <input type="file" name="proof_image" accept="image/*">
387
+ </div>
388
 
389
+ <div class="form-group">
390
+ <label>Select Language for Voice Output:</label>
391
+ <select name="language" id="language">
392
+ <option value="en-US" {% if selected_language == 'en-US' %}selected{% endif %}>English ๐Ÿ‡บ๐Ÿ‡ธ</option>
393
+ <option value="hi-IN" {% if selected_language == 'hi-IN' %}selected{% endif %}>Hindi ๐Ÿ‡ฎ๐Ÿ‡ณ</option>
394
+ <option value="te-IN" {% if selected_language == 'te-IN' %}selected{% endif %}>Telugu ๐Ÿ‡ฎ๐Ÿ‡ณ</option>
395
+ <option value="es-ES" {% if selected_language == 'es-ES' %}selected{% endif %}>Spanish ๐Ÿ‡ช๐Ÿ‡ธ</option>
396
+ <option value="fr-FR" {% if selected_language == 'fr-FR' %}selected{% endif %}>French ๐Ÿ‡ซ๐Ÿ‡ท</option>
397
+ </select>
398
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
399
 
400
+ <input type="submit" value="{{ language_dict['generate_excuse'] }}">
401
+ </form>
402
 
403
+ {% if excuse %}
404
+ <div class="result-section">
405
+ <h2>{{ language_dict['your_excuse'] }}</h2>
406
+ <p id="excuseText">{{ excuse }}</p>
407
+ <button class="play-button" onclick="speakExcuse()">{{ language_dict['play_excuse'] }}</button>
408
+ </div>
409
 
410
+ <script>
411
+ function speakExcuse() {
412
+ const text = document.getElementById('excuseText').innerText;
413
+ const language = document.getElementById('language').value;
414
+ const utterance = new SpeechSynthesisUtterance(text);
415
+ utterance.lang = language;
416
 
417
+ function loadAndSpeak() {
418
+ const voices = window.speechSynthesis.getVoices();
419
+ let matchedVoice = voices.find(voice => voice.lang === language);
420
+ if (language === 'te-IN' && !matchedVoice) {
421
+ matchedVoice = voices.find(voice => voice.lang.startsWith('en'));
422
+ utterance.lang = 'en-US';
423
+ alert("โš ๏ธ Telugu voice not supported on your browser. Using English voice instead.");
424
+ }
425
+ if (matchedVoice) {
426
+ utterance.voice = matchedVoice;
427
+ }
428
+ window.speechSynthesis.speak(utterance);
429
+ }
430
 
431
+ if (window.speechSynthesis.getVoices().length === 0) {
432
+ window.speechSynthesis.onvoiceschanged = loadAndSpeak;
433
+ } else {
434
+ loadAndSpeak();
435
+ }
436
+ }
437
+ </script>
438
+ {% endif %}
439
 
440
+ {% if proof %}
441
+ <div class="result-section">
442
+ <h3>{{ language_dict['fake_proof'] }}</h3>
443
+ <img src="{{ proof }}" alt="Fake image detected" class="proof-img">
444
+ {% if proof_label %}
445
+ <p>{{ proof_label }}</p>
446
+ {% endif %}
447
+ </div>
448
+ {% endif %}
449
+
450
+ {% if top_excuses %}
451
+ <div class="result-section">
452
+ <h2>{{ language_dict['top_excuses'] }}</h2>
453
+ <ol>
454
+ {% for excuse in top_excuses %}
455
+ <li>
456
+ {% if loop.index == 1 %}๐Ÿฅ‡{% elif loop.index == 2 %}๐Ÿฅˆ{% elif loop.index == 3 %}๐Ÿฅ‰{% endif %}
457
+ <strong>{{ excuse }}</strong>
458
+ </li>
459
+ {% endfor %}
460
+ </ol>
461
+ </div>
462
+ {% endif %}
463
+
464
+ {% if predicted_schedule %}
465
+ <div class="prediction-box">
466
+ ๐Ÿ“… <strong>{{ language_dict['prediction'] }}</strong> <strong>{{ predicted_schedule }}</strong>
467
+ </div>
468
+ {% endif %}
469
+
470
+ <div class="navigation-links">
471
+ <a href="{{ url_for('apology') }}">{{ language_dict['apology_link'] }}</a>
472
+ <a href="{{ url_for('history') }}">๐Ÿ•’ {{ language_dict['history'] }} and {{ language_dict['favorites'] }}</a>
473
+ </div>
474
+ </div>
475
+ </body>
476
+ </html>