LukasBe commited on
Commit
57bd599
·
verified ·
1 Parent(s): 024ec85

Add 1 files

Browse files
Files changed (1) hide show
  1. index.html +457 -152
index.html CHANGED
@@ -1,223 +1,391 @@
1
  <!DOCTYPE html>
2
- <html lang="en">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Class Feedback Quest</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  <style>
10
- @keyframes progressBar {
11
- 0% { width: 0%; }
12
- 100% { width: var(--progress); }
 
 
13
  }
14
 
15
- .progress-animate {
16
- animation: progressBar 1s ease-in-out;
 
 
 
 
 
17
  }
18
 
19
- .badge-pop {
20
- animation: badgePop 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
 
 
 
 
 
 
21
  }
22
 
23
  @keyframes badgePop {
24
  0% { transform: scale(0); opacity: 0; }
25
- 80% { transform: scale(1.1); opacity: 1; }
26
  100% { transform: scale(1); opacity: 1; }
27
  }
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  .floating {
30
  animation: floating 3s ease-in-out infinite;
31
  }
32
 
33
  @keyframes floating {
34
  0% { transform: translateY(0px); }
35
- 50% { transform: translateY(-10px); }
36
  100% { transform: translateY(0px); }
37
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  </style>
39
  </head>
40
- <body class="bg-gradient-to-br from-indigo-100 to-purple-100 min-h-screen">
41
- <div class="container mx-auto px-4 py-8 max-w-md">
42
  <!-- Header with XP Bar -->
43
- <div class="bg-white rounded-xl shadow-lg p-6 mb-6">
44
  <div class="flex justify-between items-center mb-4">
45
- <h1 class="text-2xl font-bold text-indigo-800">Class Feedback Quest</h1>
 
 
 
46
  <div class="text-right">
47
- <div class="text-sm text-gray-600">Level <span id="level">1</span></div>
48
  <div class="text-xs text-gray-500">XP: <span id="currentXP">0</span>/<span id="maxXP">100</span></div>
49
  </div>
50
  </div>
51
 
52
- <div class="w-full bg-gray-200 rounded-full h-4 mb-2">
53
- <div id="xpBar" class="bg-gradient-to-r from-blue-500 to-purple-600 h-4 rounded-full progress-animate" style="--progress: 0%"></div>
54
  </div>
55
-
56
- <p class="text-sm text-gray-600">Complete surveys to level up and earn badges!</p>
57
  </div>
58
 
59
  <!-- Survey Container -->
60
- <div id="surveyContainer" class="bg-white rounded-xl shadow-lg p-6 mb-6">
61
- <div class="flex justify-between items-center mb-4">
62
- <h2 class="text-xl font-semibold text-indigo-700">Today's Class Feedback</h2>
63
- <div class="text-sm text-gray-500">Question <span id="currentQuestion">1</span>/<span id="totalQuestions">5</span></div>
 
 
 
 
 
64
  </div>
65
 
66
  <!-- Question 1 -->
67
  <div id="q1" class="question">
68
- <p class="text-lg font-medium mb-4">How engaging was today's class?</p>
69
  <div class="space-y-3">
70
- <div class="flex items-center">
71
- <input type="radio" id="q1-1" name="q1" value="5" class="h-5 w-5 text-indigo-600">
72
- <label for="q1-1" class="ml-3 block text-gray-700">🌟 Extremely engaging</label>
73
- </div>
74
- <div class="flex items-center">
75
- <input type="radio" id="q1-2" name="q1" value="4" class="h-5 w-5 text-indigo-600">
76
- <label for="q1-2" class="ml-3 block text-gray-700">👍 Very engaging</label>
77
- </div>
78
- <div class="flex items-center">
79
- <input type="radio" id="q1-3" name="q1" value="3" class="h-5 w-5 text-indigo-600">
80
- <label for="q1-3" class="ml-3 block text-gray-700">😐 Moderately engaging</label>
81
- </div>
82
- <div class="flex items-center">
83
- <input type="radio" id="q1-4" name="q1" value="2" class="h-5 w-5 text-indigo-600">
84
- <label for="q1-4" class="ml-3 block text-gray-700">👎 Slightly engaging</label>
85
- </div>
86
- <div class="flex items-center">
87
- <input type="radio" id="q1-5" name="q1" value="1" class="h-5 w-5 text-indigo-600">
88
- <label for="q1-5" class="ml-3 block text-gray-700">💤 Not engaging at all</label>
89
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  </div>
91
  </div>
92
 
93
  <!-- Question 2 -->
94
  <div id="q2" class="question hidden">
95
- <p class="text-lg font-medium mb-4">How well did you understand the material?</p>
96
  <div class="space-y-3">
97
- <div class="flex items-center">
98
- <input type="radio" id="q2-1" name="q2" value="5" class="h-5 w-5 text-indigo-600">
99
- <label for="q2-1" class="ml-3 block text-gray-700">🧠 Completely understood</label>
100
- </div>
101
- <div class="flex items-center">
102
- <input type="radio" id="q2-2" name="q2" value="4" class="h-5 w-5 text-indigo-600">
103
- <label for="q2-2" class="ml-3 block text-gray-700">💡 Mostly understood</label>
104
- </div>
105
- <div class="flex items-center">
106
- <input type="radio" id="q2-3" name="q2" value="3" class="h-5 w-5 text-indigo-600">
107
- <label for="q2-3" class="ml-3 block text-gray-700">🤔 Somewhat understood</label>
108
- </div>
109
- <div class="flex items-center">
110
- <input type="radio" id="q2-4" name="q2" value="2" class="h-5 w-5 text-indigo-600">
111
- <label for="q2-4" class="ml-3 block text-gray-700">❓ Barely understood</label>
112
- </div>
113
- <div class="flex items-center">
114
- <input type="radio" id="q2-5" name="q2" value="1" class="h-5 w-5 text-indigo-600">
115
- <label for="q2-5" class="ml-3 block text-gray-700">😵 Didn't understand at all</label>
116
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  </div>
118
  </div>
119
 
120
  <!-- Question 3 -->
121
  <div id="q3" class="question hidden">
122
- <p class="text-lg font-medium mb-4">What could make this class better?</p>
123
- <textarea id="q3-text" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500" rows="3" placeholder="Your suggestions..."></textarea>
 
 
 
 
 
 
124
  </div>
125
 
126
  <!-- Question 4 -->
127
  <div id="q4" class="question hidden">
128
- <p class="text-lg font-medium mb-4">How would you rate the pace of the class?</p>
129
  <div class="flex justify-between mb-2">
130
- <span class="text-sm text-gray-600">Too slow</span>
131
- <span class="text-sm text-gray-600">Perfect</span>
132
- <span class="text-sm text-gray-600">Too fast</span>
133
  </div>
134
- <input type="range" id="q4-range" min="1" max="5" value="3" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
135
- <div class="flex justify-between text-xs text-gray-500 mt-1">
136
- <span>1</span>
137
- <span>2</span>
138
- <span>3</span>
139
- <span>4</span>
140
- <span>5</span>
141
  </div>
142
  </div>
143
 
144
  <!-- Question 5 -->
145
  <div id="q5" class="question hidden">
146
- <p class="text-lg font-medium mb-4">Would you recommend this class to others?</p>
147
- <div class="flex space-x-4">
148
- <button onclick="selectRecommendation('yes')" class="flex-1 py-2 px-4 bg-green-100 hover:bg-green-200 text-green-800 rounded-lg transition">
149
- <i class="fas fa-thumbs-up mr-2"></i> Yes
 
 
 
150
  </button>
151
- <button onclick="selectRecommendation('neutral')" class="flex-1 py-2 px-4 bg-yellow-100 hover:bg-yellow-200 text-yellow-800 rounded-lg transition">
152
- <i class="fas fa-meh mr-2"></i> Neutral
 
 
 
153
  </button>
154
- <button onclick="selectRecommendation('no')" class="flex-1 py-2 px-4 bg-red-100 hover:bg-red-200 text-red-800 rounded-lg transition">
155
- <i class="fas fa-thumbs-down mr-2"></i> No
 
 
 
156
  </button>
157
  </div>
158
  </div>
159
 
160
  <!-- Navigation Buttons -->
161
- <div class="flex justify-between mt-6">
162
- <button id="prevBtn" class="py-2 px-4 bg-gray-200 hover:bg-gray-300 text-gray-700 rounded-lg transition hidden">
163
- <i class="fas fa-arrow-left mr-2"></i> Previous
164
  </button>
165
- <button id="nextBtn" class="py-2 px-4 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition ml-auto">
166
- Next <i class="fas fa-arrow-right ml-2"></i>
167
  </button>
168
- <button id="submitBtn" class="py-2 px-4 bg-green-600 hover:bg-green-700 text-white rounded-lg transition hidden">
169
- Submit <i class="fas fa-paper-plane ml-2"></i>
170
  </button>
171
  </div>
172
  </div>
173
 
174
  <!-- Badges Section -->
175
- <div class="bg-white rounded-xl shadow-lg p-6">
176
- <h2 class="text-xl font-semibold text-indigo-700 mb-4">Your Badges</h2>
 
 
 
177
  <div class="grid grid-cols-3 gap-4">
178
- <div id="feedbackExplorer" class="badge text-center opacity-30">
179
- <div class="mx-auto bg-gray-200 rounded-full w-16 h-16 flex items-center justify-center mb-2">
180
- <i class="fas fa-map text-2xl text-gray-500"></i>
181
  </div>
182
- <p class="text-xs font-medium">Feedback Explorer</p>
183
  </div>
184
- <div id="classArbiter" class="badge text-center opacity-30">
185
- <div class="mx-auto bg-gray-200 rounded-full w-16 h-16 flex items-center justify-center mb-2">
186
- <i class="fas fa-gavel text-2xl text-gray-500"></i>
187
  </div>
188
- <p class="text-xs font-medium">Class Arbiter</p>
189
  </div>
190
- <div id="feedbackMaster" class="badge text-center opacity-30">
191
- <div class="mx-auto bg-gray-200 rounded-full w-16 h-16 flex items-center justify-center mb-2">
192
- <i class="fas fa-trophy text-2xl text-gray-500"></i>
193
  </div>
194
- <p class="text-xs font-medium">Feedback Master</p>
195
  </div>
196
  </div>
197
  </div>
198
  </div>
199
 
200
  <!-- Completion Modal -->
201
- <div id="completionModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center hidden z-50">
202
- <div class="bg-white rounded-xl p-8 max-w-sm mx-4 text-center relative">
203
- <div class="absolute -top-8 left-1/2 transform -translate-x-1/2">
204
- <div class="w-16 h-16 bg-yellow-400 rounded-full flex items-center justify-center shadow-lg floating">
205
- <i class="fas fa-trophy text-3xl text-white"></i>
206
- </div>
207
- </div>
208
- <h2 class="text-2xl font-bold text-indigo-800 mt-6 mb-4">Survey Complete!</h2>
209
- <p class="text-gray-600 mb-4">You earned <span class="font-bold text-indigo-600">25 XP</span> and unlocked a new badge!</p>
210
 
211
- <div id="earnedBadge" class="mx-auto bg-gradient-to-r from-purple-400 to-indigo-500 rounded-full w-20 h-20 flex items-center justify-center mb-4 badge-pop">
212
- <i class="fas fa-gavel text-3xl text-white"></i>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  </div>
214
-
215
- <p class="font-medium text-indigo-700 mb-2">Class Arbiter</p>
216
- <p class="text-sm text-gray-500 mb-6">Awarded for completing your first survey!</p>
217
-
218
- <button onclick="closeModal()" class="w-full py-2 px-4 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition">
219
- Awesome! <i class="fas fa-check ml-2"></i>
220
- </button>
221
  </div>
222
  </div>
223
 
@@ -241,6 +409,8 @@
241
  const maxXPDisplay = document.getElementById('maxXP');
242
  const levelDisplay = document.getElementById('level');
243
  const completionModal = document.getElementById('completionModal');
 
 
244
 
245
  // Initialize
246
  document.addEventListener('DOMContentLoaded', function() {
@@ -251,12 +421,36 @@
251
  nextBtn.addEventListener('click', nextQuestion);
252
  prevBtn.addEventListener('click', prevQuestion);
253
  submitBtn.addEventListener('click', completeSurvey);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  });
255
 
256
  // Navigation functions
257
  function nextQuestion() {
258
  // Validate current question
259
  if (!validateQuestion(currentQuestion)) {
 
260
  return;
261
  }
262
 
@@ -277,6 +471,9 @@
277
  if (currentQuestion > 1) {
278
  addXP(5);
279
  }
 
 
 
280
  }
281
 
282
  function prevQuestion() {
@@ -292,6 +489,9 @@
292
 
293
  // Update button visibility
294
  updateButtonVisibility();
 
 
 
295
  }
296
 
297
  function updateButtonVisibility() {
@@ -319,35 +519,68 @@
319
  case 2:
320
  return document.querySelector(`input[name="q${qNum}"]:checked`) !== null;
321
  case 3:
322
- return document.getElementById('q3-text').value.trim() !== '';
323
  case 4:
324
  return true; // Range always has a value
325
  case 5:
326
- return document.querySelector('.bg-green-200, .bg-yellow-200, .bg-red-200') !== null;
327
  default:
328
  return false;
329
  }
330
  }
331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  // Recommendation selection
333
  function selectRecommendation(choice) {
334
  // Reset all buttons
335
  document.querySelectorAll('#q5 button').forEach(btn => {
336
- btn.classList.remove('bg-green-200', 'bg-yellow-200', 'bg-red-200');
337
- btn.classList.add(
338
- choice === 'yes' ? 'bg-green-100' :
339
- choice === 'neutral' ? 'bg-yellow-100' : 'bg-red-100'
340
- );
 
 
341
  });
342
 
343
  // Highlight selected button
344
  const selectedBtn = document.querySelector(
345
- choice === 'yes' ? '#q5 button.bg-green-100' :
346
- choice === 'neutral' ? '#q5 button.bg-yellow-100' : '#q5 button.bg-red-100'
347
  );
348
 
349
- selectedBtn.classList.remove('bg-green-100', 'bg-yellow-100', 'bg-red-100');
 
 
 
 
350
  selectedBtn.classList.add(
 
 
 
 
 
351
  choice === 'yes' ? 'bg-green-200' :
352
  choice === 'neutral' ? 'bg-yellow-200' : 'bg-red-200'
353
  );
@@ -364,6 +597,9 @@
364
  maxXP = Math.floor(maxXP * 1.5);
365
  levelDisplay.textContent = level;
366
  maxXPDisplay.textContent = maxXP;
 
 
 
367
  }
368
 
369
  currentXPDisplay.textContent = xp;
@@ -372,16 +608,33 @@
372
 
373
  function updateXPBar() {
374
  const percentage = (xp / maxXP) * 100;
375
- xpBar.style.setProperty('--progress', `${percentage}%`);
376
- xpBar.classList.remove('progress-animate');
377
- // Trigger reflow to restart animation
378
- void xpBar.offsetWidth;
379
- xpBar.classList.add('progress-animate');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
380
  }
381
 
382
  // Survey completion
383
  function completeSurvey() {
384
  if (!validateQuestion(currentQuestion)) {
 
385
  return;
386
  }
387
 
@@ -389,21 +642,73 @@
389
  addXP(20);
390
 
391
  // Unlock first badge
392
- document.getElementById('feedbackExplorer').classList.remove('opacity-30');
393
- document.getElementById('feedbackExplorer').querySelector('div').classList.remove('bg-gray-200');
394
- document.getElementById('feedbackExplorer').querySelector('div').classList.add('bg-gradient-to-r', 'from-blue-400', 'to-cyan-400');
395
- document.getElementById('feedbackExplorer').querySelector('i').classList.remove('text-gray-500');
396
- document.getElementById('feedbackExplorer').querySelector('i').classList.add('text-white');
397
 
398
  // Unlock Class Arbiter badge
399
- document.getElementById('classArbiter').classList.remove('opacity-30');
400
- document.getElementById('classArbiter').querySelector('div').classList.remove('bg-gray-200');
401
- document.getElementById('classArbiter').querySelector('div').classList.add('bg-gradient-to-r', 'from-purple-400', 'to-indigo-500');
402
- document.getElementById('classArbiter').querySelector('i').classList.remove('text-gray-500');
403
- document.getElementById('classArbiter').querySelector('i').classList.add('text-white');
404
 
405
  // Show completion modal
406
- completionModal.classList.remove('hidden');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  }
408
 
409
  function closeModal() {
 
1
  <!DOCTYPE html>
2
+ <html lang="cs">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Hodnocení Výuky - Hra</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <script>
10
+ tailwind.config = {
11
+ theme: {
12
+ extend: {
13
+ colors: {
14
+ 'accent': '#7c3aed',
15
+ 'accent-light': '#8b5cf6',
16
+ 'dark': '#1e1b4b',
17
+ 'light': '#f5f3ff',
18
+ 'fun-blue': '#3b82f6',
19
+ 'fun-pink': '#ec4899',
20
+ 'fun-green': '#10b981'
21
+ },
22
+ fontFamily: {
23
+ 'display': ['"Fredoka"', 'sans-serif'],
24
+ 'sans': ['"Inter"', 'sans-serif']
25
+ }
26
+ }
27
+ }
28
+ }
29
+ </script>
30
  <style>
31
+ @import url('https://fonts.googleapis.com/css2?family=Fredoka:wght@500;600&family=Inter:wght@400;500;600&display=swap');
32
+
33
+ body {
34
+ font-family: 'Inter', sans-serif;
35
+ background: radial-gradient(circle at 10% 20%, rgba(237, 233, 254, 0.5) 0%, rgba(221, 214, 254, 0.5) 90%);
36
  }
37
 
38
+ .progress-bar {
39
+ height: 12px;
40
+ border-radius: 6px;
41
+ background-size: 200% 100%;
42
+ background-image: linear-gradient(90deg, #ec4899 0%, #7c3aed 50%, #3b82f6 100%);
43
+ animation: shimmer 2s infinite linear;
44
+ transition: width 0.6s cubic-bezier(0.65, 0, 0.35, 1);
45
  }
46
 
47
+ @keyframes shimmer {
48
+ 0% { background-position: 200% 0; }
49
+ 100% { background-position: -200% 0; }
50
+ }
51
+
52
+ .badge-unlocked {
53
+ transform: scale(0);
54
+ animation: badgePop 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
55
  }
56
 
57
  @keyframes badgePop {
58
  0% { transform: scale(0); opacity: 0; }
59
+ 80% { transform: scale(1.1); }
60
  100% { transform: scale(1); opacity: 1; }
61
  }
62
 
63
+ .card-hover {
64
+ transition: all 0.3s ease;
65
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.02);
66
+ }
67
+
68
+ .card-hover:hover {
69
+ transform: translateY(-4px);
70
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
71
+ }
72
+
73
+ .option-card {
74
+ transition: all 0.2s ease;
75
+ }
76
+
77
+ .option-card:hover {
78
+ transform: translateY(-2px);
79
+ }
80
+
81
+ .option-card.selected {
82
+ border-color: #7c3aed;
83
+ background-color: #f5f3ff;
84
+ box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.2);
85
+ }
86
+
87
  .floating {
88
  animation: floating 3s ease-in-out infinite;
89
  }
90
 
91
  @keyframes floating {
92
  0% { transform: translateY(0px); }
93
+ 50% { transform: translateY(-12px); }
94
  100% { transform: translateY(0px); }
95
  }
96
+
97
+ .pulse {
98
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
99
+ }
100
+
101
+ @keyframes pulse {
102
+ 0%, 100% { opacity: 1; }
103
+ 50% { opacity: 0.5; }
104
+ }
105
+
106
+ .confetti {
107
+ position: absolute;
108
+ width: 10px;
109
+ height: 10px;
110
+ background-color: #f472b6;
111
+ opacity: 0;
112
+ }
113
+
114
+ @keyframes shake {
115
+ 0%, 100% { transform: translateX(0); }
116
+ 10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
117
+ 20%, 40%, 60%, 80% { transform: translateX(5px); }
118
+ }
119
+
120
+ .emoji-option {
121
+ font-size: 1.5rem;
122
+ margin-right: 8px;
123
+ }
124
+
125
+ .fun-border {
126
+ border: 3px dashed rgba(59, 130, 246, 0.3);
127
+ }
128
+
129
+ .fun-bg {
130
+ background: linear-gradient(45deg, #f5f3ff, #e0e7ff, #ede9fe);
131
+ }
132
  </style>
133
  </head>
134
+ <body class="min-h-screen py-8">
135
+ <div class="container mx-auto px-4 max-w-md">
136
  <!-- Header with XP Bar -->
137
+ <div class="bg-white rounded-2xl shadow-sm p-6 mb-6 card-hover fun-border fun-bg">
138
  <div class="flex justify-between items-center mb-4">
139
+ <div>
140
+ <h1 class="text-2xl font-display font-bold text-transparent bg-clip-text bg-gradient-to-r from-fun-pink to-fun-blue">Hodnocení Výuky</h1>
141
+ <p class="text-sm text-gray-500">Pomoz nám vylepšit výuku!</p>
142
+ </div>
143
  <div class="text-right">
144
+ <div class="text-sm font-medium text-dark">Level <span id="level" class="text-fun-blue">1</span></div>
145
  <div class="text-xs text-gray-500">XP: <span id="currentXP">0</span>/<span id="maxXP">100</span></div>
146
  </div>
147
  </div>
148
 
149
+ <div class="w-full bg-gray-100 rounded-full h-3 mb-1 overflow-hidden">
150
+ <div id="xpBar" class="progress-bar h-3" style="width: 0%"></div>
151
  </div>
152
+ <p class="text-xs text-gray-500 text-right">+5 XP za každou otázku</p>
 
153
  </div>
154
 
155
  <!-- Survey Container -->
156
+ <div id="surveyContainer" class="bg-white rounded-2xl shadow-sm p-6 mb-6 card-hover fun-bg">
157
+ <div class="flex justify-between items-center mb-6">
158
+ <div>
159
+ <h2 class="text-xl font-display font-semibold text-transparent bg-clip-text bg-gradient-to-r from-fun-blue to-fun-green">Dnešní Hodnocení</h2>
160
+ <p class="text-sm text-gray-500">Tvůj názor je důležitý!</p>
161
+ </div>
162
+ <div class="bg-gradient-to-r from-fun-blue to-fun-green text-white text-sm font-medium py-1 px-3 rounded-full">
163
+ <span id="currentQuestion">1</span>/<span id="totalQuestions">5</span>
164
+ </div>
165
  </div>
166
 
167
  <!-- Question 1 -->
168
  <div id="q1" class="question">
169
+ <p class="text-lg font-medium mb-4 text-dark">Jak moc dnešní hodina bavila?</p>
170
  <div class="space-y-3">
171
+ <label for="q1-1" class="block">
172
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-fun-pink/10">
173
+ <div class="flex items-center">
174
+ <input type="radio" id="q1-1" name="q1" value="5" class="h-5 w-5 text-accent focus:ring-accent-light">
175
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">🤩</span> Úplně nejvíc!</span>
176
+ </div>
177
+ </div>
178
+ </label>
179
+ <label for="q1-2" class="block">
180
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-fun-blue/10">
181
+ <div class="flex items-center">
182
+ <input type="radio" id="q1-2" name="q1" value="4" class="h-5 w-5 text-accent focus:ring-accent-light">
183
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">😎</span> Docela dobrý</span>
184
+ </div>
185
+ </div>
186
+ </label>
187
+ <label for="q1-3" class="block">
188
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-fun-green/10">
189
+ <div class="flex items-center">
190
+ <input type="radio" id="q1-3" name="q1" value="3" class="h-5 w-5 text-accent focus:ring-accent-light">
191
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">😐</span> Ušlo by</span>
192
+ </div>
193
+ </div>
194
+ </label>
195
+ <label for="q1-4" class="block">
196
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-yellow-100/10">
197
+ <div class="flex items-center">
198
+ <input type="radio" id="q1-4" name="q1" value="2" class="h-5 w-5 text-accent focus:ring-accent-light">
199
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">🙄</span> Trochu nuda</span>
200
+ </div>
201
+ </div>
202
+ </label>
203
+ <label for="q1-5" class="block">
204
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-red-100/10">
205
+ <div class="flex items-center">
206
+ <input type="radio" id="q1-5" name="q1" value="1" class="h-5 w-5 text-accent focus:ring-accent-light">
207
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">😴</span> Strašná nuda</span>
208
+ </div>
209
+ </div>
210
+ </label>
211
  </div>
212
  </div>
213
 
214
  <!-- Question 2 -->
215
  <div id="q2" class="question hidden">
216
+ <p class="text-lg font-medium mb-4 text-dark">Jak dobře jsi látce rozuměl/a?</p>
217
  <div class="space-y-3">
218
+ <label for="q2-1" class="block">
219
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-fun-pink/10">
220
+ <div class="flex items-center">
221
+ <input type="radio" id="q2-1" name="q2" value="5" class="h-5 w-5 text-accent focus:ring-accent-light">
222
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">🧠</span> Všechno chápu!</span>
223
+ </div>
224
+ </div>
225
+ </label>
226
+ <label for="q2-2" class="block">
227
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-fun-blue/10">
228
+ <div class="flex items-center">
229
+ <input type="radio" id="q2-2" name="q2" value="4" class="h-5 w-5 text-accent focus:ring-accent-light">
230
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">💡</span> Skoro všechno</span>
231
+ </div>
232
+ </div>
233
+ </label>
234
+ <label for="q2-3" class="block">
235
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-fun-green/10">
236
+ <div class="flex items-center">
237
+ <input type="radio" id="q2-3" name="q2" value="3" class="h-5 w-5 text-accent focus:ring-accent-light">
238
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">🤔</span> Něco chápu</span>
239
+ </div>
240
+ </div>
241
+ </label>
242
+ <label for="q2-4" class="block">
243
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-yellow-100/10">
244
+ <div class="flex items-center">
245
+ <input type="radio" id="q2-4" name="q2" value="2" class="h-5 w-5 text-accent focus:ring-accent-light">
246
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">❓</span> Málo chápu</span>
247
+ </div>
248
+ </div>
249
+ </label>
250
+ <label for="q2-5" class="block">
251
+ <div class="option-card border border-gray-200 rounded-xl p-4 cursor-pointer hover:bg-red-100/10">
252
+ <div class="flex items-center">
253
+ <input type="radio" id="q2-5" name="q2" value="1" class="h-5 w-5 text-accent focus:ring-accent-light">
254
+ <span class="ml-3 block text-gray-700"><span class="emoji-option">😵</span> Nerozumím vůbec</span>
255
+ </div>
256
+ </div>
257
+ </label>
258
  </div>
259
  </div>
260
 
261
  <!-- Question 3 -->
262
  <div id="q3" class="question hidden">
263
+ <p class="text-lg font-medium mb-4 text-dark">Co by hodinu vylepšilo?</p>
264
+ <div class="relative">
265
+ <textarea id="q3-text" class="w-full px-4 py-3 border border-gray-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-accent-light focus:border-transparent" rows="4" placeholder="Tvoje nápady..."></textarea>
266
+ <div class="absolute bottom-3 right-3 text-gray-400 text-sm">
267
+ <i class="fas fa-pen-fancy mr-1"></i>
268
+ <span id="charCount">0/200</span>
269
+ </div>
270
+ </div>
271
  </div>
272
 
273
  <!-- Question 4 -->
274
  <div id="q4" class="question hidden">
275
+ <p class="text-lg font-medium mb-4 text-dark">Jaké bylo tempo hodiny?</p>
276
  <div class="flex justify-between mb-2">
277
+ <span class="text-sm text-gray-600">Pomalé</span>
278
+ <span class="text-sm text-gray-600">Akorát</span>
279
+ <span class="text-sm text-gray-600">Rychlé</span>
280
  </div>
281
+ <input type="range" id="q4-range" min="1" max="5" value="3" class="w-full h-2 bg-gray-200 rounded-full appearance-none cursor-pointer accent-fun-blue">
282
+ <div class="flex justify-between mt-1">
283
+ <span class="text-xs text-gray-500">1</span>
284
+ <span class="text-xs text-gray-500">2</span>
285
+ <span class="text-xs text-gray-500">3</span>
286
+ <span class="text-xs text-gray-500">4</span>
287
+ <span class="text-xs text-gray-500">5</span>
288
  </div>
289
  </div>
290
 
291
  <!-- Question 5 -->
292
  <div id="q5" class="question hidden">
293
+ <p class="text-lg font-medium mb-4 text-dark">Doporučil/a bys tuto hodinu spolužákům?</p>
294
+ <div class="grid grid-cols-3 gap-3">
295
+ <button onclick="selectRecommendation('yes')" class="flex flex-col items-center justify-center py-4 px-2 bg-green-50 hover:bg-green-100 border border-green-100 rounded-xl transition option-card">
296
+ <div class="w-10 h-10 bg-green-100 rounded-full flex items-center justify-center mb-2">
297
+ <span class="emoji-option">👍</span>
298
+ </div>
299
+ <span class="text-sm font-medium text-green-800">Ano</span>
300
  </button>
301
+ <button onclick="selectRecommendation('neutral')" class="flex flex-col items-center justify-center py-4 px-2 bg-yellow-50 hover:bg-yellow-100 border border-yellow-100 rounded-xl transition option-card">
302
+ <div class="w-10 h-10 bg-yellow-100 rounded-full flex items-center justify-center mb-2">
303
+ <span class="emoji-option">🤷</span>
304
+ </div>
305
+ <span class="text-sm font-medium text-yellow-800">Možná</span>
306
  </button>
307
+ <button onclick="selectRecommendation('no')" class="flex flex-col items-center justify-center py-4 px-2 bg-red-50 hover:bg-red-100 border border-red-100 rounded-xl transition option-card">
308
+ <div class="w-10 h-10 bg-red-100 rounded-full flex items-center justify-center mb-2">
309
+ <span class="emoji-option">👎</span>
310
+ </div>
311
+ <span class="text-sm font-medium text-red-800">Ne</span>
312
  </button>
313
  </div>
314
  </div>
315
 
316
  <!-- Navigation Buttons -->
317
+ <div class="flex justify-between mt-8">
318
+ <button id="prevBtn" class="py-2.5 px-5 bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-xl transition font-medium hidden">
319
+ <i class="fas fa-arrow-left mr-2"></i> Zpět
320
  </button>
321
+ <button id="nextBtn" class="py-2.5 px-6 bg-gradient-to-r from-fun-blue to-fun-green hover:from-fun-blue/90 hover:to-fun-green/90 text-white rounded-xl transition font-medium ml-auto shadow-sm shadow-blue-500/30">
322
+ Pokračovat <i class="fas fa-arrow-right ml-2"></i>
323
  </button>
324
+ <button id="submitBtn" class="py-2.5 px-6 bg-gradient-to-r from-fun-pink to-fun-blue hover:from-fun-pink/90 hover:to-fun-blue/90 text-white rounded-xl transition font-medium hidden shadow-sm shadow-pink-500/30">
325
+ Odeslat <i class="fas fa-paper-plane ml-2"></i>
326
  </button>
327
  </div>
328
  </div>
329
 
330
  <!-- Badges Section -->
331
+ <div class="bg-white rounded-2xl shadow-sm p-6 card-hover fun-bg">
332
+ <div class="flex justify-between items-center mb-4">
333
+ <h2 class="text-xl font-display font-semibold text-transparent bg-clip-text bg-gradient-to-r from-fun-pink to-fun-blue">Tvoje Odznaky</h2>
334
+ <span class="text-xs bg-gradient-to-r from-fun-blue to-fun-green text-white font-medium py-1 px-2 rounded-full">3 k získání</span>
335
+ </div>
336
  <div class="grid grid-cols-3 gap-4">
337
+ <div id="feedbackExplorer" class="badge text-center opacity-40">
338
+ <div class="mx-auto bg-gray-100 rounded-full w-16 h-16 flex items-center justify-center mb-2">
339
+ <span class="emoji-option">🗺️</span>
340
  </div>
341
+ <p class="text-xs font-medium text-gray-500">Průzkumník</p>
342
  </div>
343
+ <div id="classArbiter" class="badge text-center opacity-40">
344
+ <div class="mx-auto bg-gray-100 rounded-full w-16 h-16 flex items-center justify-center mb-2">
345
+ <span class="emoji-option">🏆</span>
346
  </div>
347
+ <p class="text-xs font-medium text-gray-500">Hodnotitel</p>
348
  </div>
349
+ <div id="feedbackMaster" class="badge text-center opacity-40">
350
+ <div class="mx-auto bg-gray-100 rounded-full w-16 h-16 flex items-center justify-center mb-2">
351
+ <span class="emoji-option">👑</span>
352
  </div>
353
+ <p class="text-xs font-medium text-gray-500">Mistr</p>
354
  </div>
355
  </div>
356
  </div>
357
  </div>
358
 
359
  <!-- Completion Modal -->
360
+ <div id="completionModal" class="fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center p-4 hidden z-50">
361
+ <div class="bg-white rounded-2xl p-8 max-w-sm w-full text-center relative overflow-hidden">
362
+ <!-- Confetti elements -->
363
+ <div id="confetti-container" class="absolute inset-0 overflow-hidden pointer-events-none"></div>
 
 
 
 
 
364
 
365
+ <div class="relative z-10">
366
+ <div class="absolute -top-12 left-1/2 transform -translate-x-1/2">
367
+ <div class="w-20 h-20 bg-gradient-to-br from-yellow-400 to-yellow-500 rounded-full flex items-center justify-center shadow-lg floating">
368
+ <span class="emoji-option">🏆</span>
369
+ </div>
370
+ </div>
371
+
372
+ <div class="pt-12">
373
+ <h2 class="text-2xl font-display font-bold text-dark mt-6 mb-3">Hotovo!</h2>
374
+ <p class="text-gray-600 mb-4">Získal jsi <span class="font-bold text-fun-blue">25 XP</span> a nový odznak!</p>
375
+
376
+ <div id="earnedBadge" class="mx-auto bg-gradient-to-br from-purple-500 to-accent rounded-full w-24 h-24 flex items-center justify-center mb-4 relative">
377
+ <div class="absolute inset-0 rounded-full bg-white/10 backdrop-blur-sm"></div>
378
+ <span class="emoji-option">🏆</span>
379
+ </div>
380
+
381
+ <p class="font-display font-medium text-dark mb-1">Hodnotitel</p>
382
+ <p class="text-sm text-gray-500 mb-6">Ocenění za dokončení prvního hodnocení!</p>
383
+
384
+ <button onclick="closeModal()" class="w-full py-3 px-6 bg-gradient-to-r from-fun-blue to-fun-green hover:from-fun-blue/90 hover:to-fun-green/90 text-white rounded-xl transition font-medium shadow-sm shadow-blue-500/30">
385
+ Skvělý! <i class="fas fa-check ml-2"></i>
386
+ </button>
387
+ </div>
388
  </div>
 
 
 
 
 
 
 
389
  </div>
390
  </div>
391
 
 
409
  const maxXPDisplay = document.getElementById('maxXP');
410
  const levelDisplay = document.getElementById('level');
411
  const completionModal = document.getElementById('completionModal');
412
+ const q3Text = document.getElementById('q3-text');
413
+ const charCount = document.getElementById('charCount');
414
 
415
  // Initialize
416
  document.addEventListener('DOMContentLoaded', function() {
 
421
  nextBtn.addEventListener('click', nextQuestion);
422
  prevBtn.addEventListener('click', prevQuestion);
423
  submitBtn.addEventListener('click', completeSurvey);
424
+
425
+ // Set up option card selection
426
+ document.querySelectorAll('.option-card').forEach(card => {
427
+ card.addEventListener('click', function() {
428
+ const input = this.querySelector('input');
429
+ if (input) {
430
+ input.checked = true;
431
+ document.querySelectorAll('.option-card').forEach(c => c.classList.remove('selected'));
432
+ this.classList.add('selected');
433
+ }
434
+ });
435
+ });
436
+
437
+ // Set up textarea character count
438
+ q3Text.addEventListener('input', function() {
439
+ const count = this.value.length;
440
+ charCount.textContent = `${count}/200`;
441
+ if (count >= 190) {
442
+ charCount.classList.add('text-red-500');
443
+ } else {
444
+ charCount.classList.remove('text-red-500');
445
+ }
446
+ });
447
  });
448
 
449
  // Navigation functions
450
  function nextQuestion() {
451
  // Validate current question
452
  if (!validateQuestion(currentQuestion)) {
453
+ showValidationError();
454
  return;
455
  }
456
 
 
471
  if (currentQuestion > 1) {
472
  addXP(5);
473
  }
474
+
475
+ // Scroll to top of question
476
+ window.scrollTo({ top: 0, behavior: 'smooth' });
477
  }
478
 
479
  function prevQuestion() {
 
489
 
490
  // Update button visibility
491
  updateButtonVisibility();
492
+
493
+ // Scroll to top of question
494
+ window.scrollTo({ top: 0, behavior: 'smooth' });
495
  }
496
 
497
  function updateButtonVisibility() {
 
519
  case 2:
520
  return document.querySelector(`input[name="q${qNum}"]:checked`) !== null;
521
  case 3:
522
+ return q3Text.value.trim() !== '' && q3Text.value.length <= 200;
523
  case 4:
524
  return true; // Range always has a value
525
  case 5:
526
+ return document.querySelector('#q5 button.bg-green-100, #q5 button.bg-yellow-100, #q5 button.bg-red-100') !== null;
527
  default:
528
  return false;
529
  }
530
  }
531
 
532
+ function showValidationError() {
533
+ const currentQ = document.getElementById(`q${currentQuestion}`);
534
+ const errorEl = document.createElement('div');
535
+ errorEl.className = 'text-red-500 text-sm mt-2 flex items-center';
536
+ errorEl.innerHTML = '<i class="fas fa-exclamation-circle mr-1"></i> Prosím odpověz na otázku';
537
+
538
+ // Remove any existing error messages
539
+ const existingError = currentQ.querySelector('.text-red-500');
540
+ if (existingError) existingError.remove();
541
+
542
+ currentQ.appendChild(errorEl);
543
+
544
+ // Shake animation
545
+ currentQ.style.animation = 'none';
546
+ setTimeout(() => {
547
+ currentQ.style.animation = 'shake 0.5s cubic-bezier(.36,.07,.19,.97) both';
548
+ }, 10);
549
+
550
+ // Scroll to error
551
+ window.scrollTo({ top: currentQ.offsetTop - 20, behavior: 'smooth' });
552
+ }
553
+
554
  // Recommendation selection
555
  function selectRecommendation(choice) {
556
  // Reset all buttons
557
  document.querySelectorAll('#q5 button').forEach(btn => {
558
+ btn.classList.remove('bg-green-100', 'bg-yellow-100', 'bg-red-100');
559
+ btn.classList.remove('border-green-200', 'border-yellow-200', 'border-red-200');
560
+ btn.querySelector('div').classList.remove('bg-green-200', 'bg-yellow-200', 'bg-red-200');
561
+
562
+ const baseClass = choice === 'yes' ? 'green' : choice === 'neutral' ? 'yellow' : 'red';
563
+ btn.classList.add(`bg-${baseClass}-50`, `border-${baseClass}-100`);
564
+ btn.querySelector('div').classList.add(`bg-${baseClass}-100`);
565
  });
566
 
567
  // Highlight selected button
568
  const selectedBtn = document.querySelector(
569
+ choice === 'yes' ? '#q5 button:first-child' :
570
+ choice === 'neutral' ? '#q5 button:nth-child(2)' : '#q5 button:last-child'
571
  );
572
 
573
+ selectedBtn.classList.remove('bg-green-50', 'bg-yellow-50', 'bg-red-50');
574
+ selectedBtn.classList.add(
575
+ choice === 'yes' ? 'bg-green-100' :
576
+ choice === 'neutral' ? 'bg-yellow-100' : 'bg-red-100'
577
+ );
578
  selectedBtn.classList.add(
579
+ choice === 'yes' ? 'border-green-200' :
580
+ choice === 'neutral' ? 'border-yellow-200' : 'border-red-200'
581
+ );
582
+ selectedBtn.querySelector('div').classList.remove('bg-green-100', 'bg-yellow-100', 'bg-red-100');
583
+ selectedBtn.querySelector('div').classList.add(
584
  choice === 'yes' ? 'bg-green-200' :
585
  choice === 'neutral' ? 'bg-yellow-200' : 'bg-red-200'
586
  );
 
597
  maxXP = Math.floor(maxXP * 1.5);
598
  levelDisplay.textContent = level;
599
  maxXPDisplay.textContent = maxXP;
600
+
601
+ // Show level up animation
602
+ showLevelUp();
603
  }
604
 
605
  currentXPDisplay.textContent = xp;
 
608
 
609
  function updateXPBar() {
610
  const percentage = (xp / maxXP) * 100;
611
+ xpBar.style.width = `${percentage}%`;
612
+ }
613
+
614
+ function showLevelUp() {
615
+ const levelUpEl = document.createElement('div');
616
+ levelUpEl.className = 'fixed inset-0 flex items-center justify-center z-50 bg-black/50';
617
+ levelUpEl.innerHTML = `
618
+ <div class="bg-white rounded-2xl p-8 max-w-sm text-center relative overflow-hidden">
619
+ <div class="absolute -top-12 left-1/2 transform -translate-x-1/2">
620
+ <div class="w-20 h-20 bg-gradient-to-br from-blue-500 to-cyan-400 rounded-full flex items-center justify-center shadow-lg">
621
+ <span class="emoji-option">🎮</span>
622
+ </div>
623
+ </div>
624
+ <h2 class="text-2xl font-display font-bold text-dark mt-8 mb-2">Level Up!</h2>
625
+ <p class="text-gray-600 mb-6">Dosáhl jsi levelu <span class="font-bold text-fun-blue">${level}</span>!</p>
626
+ <button onclick="this.parentElement.parentElement.remove()" class="w-full py-3 px-6 bg-gradient-to-r from-fun-blue to-fun-green hover:from-fun-blue/90 hover:to-fun-green/90 text-white rounded-xl transition font-medium">
627
+ Pokračovat <i class="fas fa-arrow-right ml-2"></i>
628
+ </button>
629
+ </div>
630
+ `;
631
+ document.body.appendChild(levelUpEl);
632
  }
633
 
634
  // Survey completion
635
  function completeSurvey() {
636
  if (!validateQuestion(currentQuestion)) {
637
+ showValidationError();
638
  return;
639
  }
640
 
 
642
  addXP(20);
643
 
644
  // Unlock first badge
645
+ unlockBadge('feedbackExplorer', 'from-blue-400 to-cyan-400');
 
 
 
 
646
 
647
  // Unlock Class Arbiter badge
648
+ setTimeout(() => {
649
+ unlockBadge('classArbiter', 'from-purple-500 to-accent');
650
+ }, 300);
 
 
651
 
652
  // Show completion modal
653
+ setTimeout(() => {
654
+ completionModal.classList.remove('hidden');
655
+ createConfetti();
656
+ }, 800);
657
+ }
658
+
659
+ function unlockBadge(badgeId, gradient) {
660
+ const badge = document.getElementById(badgeId);
661
+ badge.classList.remove('opacity-40');
662
+ badge.classList.add('badge-unlocked');
663
+
664
+ const icon = badge.querySelector('div');
665
+ icon.classList.remove('bg-gray-100');
666
+ icon.classList.add(`bg-gradient-to-r`, ...gradient.split(' '));
667
+
668
+ badge.querySelector('.emoji-option').classList.add('text-2xl');
669
+
670
+ badge.querySelector('p').classList.remove('text-gray-500');
671
+ badge.querySelector('p').classList.add('text-dark');
672
+ }
673
+
674
+ function createConfetti() {
675
+ const container = document.getElementById('confetti-container');
676
+ container.innerHTML = '';
677
+
678
+ for (let i = 0; i < 50; i++) {
679
+ const confetti = document.createElement('div');
680
+ confetti.className = 'confetti';
681
+
682
+ // Random position
683
+ const xPos = Math.random() * 100;
684
+ const delay = Math.random() * 3;
685
+ const duration = 2 + Math.random() * 3;
686
+ const size = 5 + Math.random() * 5;
687
+
688
+ // Random color
689
+ const colors = ['#f472b6', '#60a5fa', '#34d399', '#fbbf24', '#a78bfa'];
690
+ const color = colors[Math.floor(Math.random() * colors.length)];
691
+
692
+ confetti.style.left = `${xPos}%`;
693
+ confetti.style.top = '-10px';
694
+ confetti.style.width = `${size}px`;
695
+ confetti.style.height = `${size}px`;
696
+ confetti.style.backgroundColor = color;
697
+ confetti.style.animation = `fall ${duration}s ease-in ${delay}s forwards`;
698
+
699
+ container.appendChild(confetti);
700
+ }
701
+
702
+ // Add fall animation
703
+ const style = document.createElement('style');
704
+ style.innerHTML = `
705
+ @keyframes fall {
706
+ 0% { transform: translateY(0) rotate(0deg); opacity: 0; }
707
+ 10% { opacity: 1; }
708
+ 100% { transform: translateY(100vh) rotate(360deg); opacity: 0; }
709
+ }
710
+ `;
711
+ document.head.appendChild(style);
712
  }
713
 
714
  function closeModal() {