SaitBurak commited on
Commit
5e1be77
·
verified ·
1 Parent(s): 48f39f7

undefined - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +1141 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Simalsaitwedding
3
- emoji: 🐨
4
- colorFrom: pink
5
- colorTo: green
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: simalsaitwedding
3
+ emoji: 🐳
4
+ colorFrom: blue
5
+ colorTo: red
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,1141 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="tr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>💕 Düğünümüz 💕</title>
7
+ <!-- EmailJS CDN REMOVED - Not needed anymore -->
8
+ <!-- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@emailjs/browser@4/dist/email.min.js"></script> -->
9
+ <!-- Google Fonts -->
10
+ <link href="https://fonts.googleapis.com/css2?family=Great+Vibes&family=Playfair+Display:wght@400;600;700&family=Inter:wght@300;400;500&display=swap" rel="stylesheet">
11
+ <style>
12
+ * {
13
+ margin: 0;
14
+ padding: 0;
15
+ box-sizing: border-box;
16
+ }
17
+ body {
18
+ font-family: 'Inter', sans-serif;
19
+ background:
20
+ radial-gradient(circle at 20% 50%, rgba(255, 182, 193, 0.3) 0%, transparent 50%),
21
+ radial-gradient(circle at 80% 20%, rgba(255, 192, 203, 0.3) 0%, transparent 50%),
22
+ radial-gradient(circle at 40% 80%, rgba(221, 160, 221, 0.2) 0%, transparent 50%),
23
+ linear-gradient(135deg, #ffeef8 0%, #f8f0ff 25%, #fff0f5 50%, #faf0e6 75%, #f0f8ff 100%);
24
+ min-height: 100vh;
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ position: relative;
29
+ overflow-x: hidden;
30
+ }
31
+ /* Floating hearts animation */
32
+ .floating-hearts {
33
+ position: fixed;
34
+ width: 100%;
35
+ height: 100%;
36
+ overflow: hidden;
37
+ pointer-events: none;
38
+ z-index: 1;
39
+ }
40
+ .heart {
41
+ position: absolute;
42
+ font-size: 20px;
43
+ color: rgba(255, 182, 193, 0.4);
44
+ animation: float 8s infinite linear;
45
+ }
46
+ @keyframes float {
47
+ 0% {
48
+ transform: translateY(100vh) rotate(0deg);
49
+ opacity: 0;
50
+ }
51
+ 10% {
52
+ opacity: 1;
53
+ }
54
+ 90% {
55
+ opacity: 1;
56
+ }
57
+ 100% {
58
+ transform: translateY(-100px) rotate(360deg);
59
+ opacity: 0;
60
+ }
61
+ }
62
+ .container {
63
+ background: rgba(255, 255, 255, 0.95);
64
+ backdrop-filter: blur(20px);
65
+ border-radius: 30px;
66
+ box-shadow:
67
+ 0 25px 50px rgba(0,0,0,0.1),
68
+ 0 0 0 1px rgba(255,255,255,0.2);
69
+ max-width: 650px;
70
+ width: 90%;
71
+ padding: 60px 50px;
72
+ text-align: center;
73
+ position: relative;
74
+ z-index: 10;
75
+ border: 2px solid rgba(255, 192, 203, 0.2);
76
+ }
77
+ .container::before {
78
+ content: '';
79
+ position: absolute;
80
+ top: -2px;
81
+ left: -2px;
82
+ right: -2px;
83
+ bottom: -2px;
84
+ background: linear-gradient(45deg, #ff69b4, #dda0dd, #ffc0cb, #f0e68c);
85
+ border-radius: 32px;
86
+ z-index: -1;
87
+ }
88
+ .main-title {
89
+ font-family: 'Great Vibes', cursive;
90
+ color: #d4395b;
91
+ margin-bottom: 20px;
92
+ font-size: 4rem;
93
+ font-weight: 400;
94
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
95
+ position: relative;
96
+ }
97
+ .subtitle {
98
+ font-family: 'Playfair Display', serif;
99
+ color: #8b4b7a;
100
+ margin-bottom: 40px;
101
+ font-size: 1.3rem;
102
+ font-weight: 400;
103
+ letter-spacing: 2px;
104
+ }
105
+ .decorative-line {
106
+ width: 200px;
107
+ height: 2px;
108
+ background: linear-gradient(90deg, transparent, #dda0dd, transparent);
109
+ margin: 20px auto;
110
+ position: relative;
111
+ }
112
+ .decorative-line::before,
113
+ .decorative-line::after {
114
+ content: '🌸';
115
+ position: absolute;
116
+ top: -10px;
117
+ font-size: 20px;
118
+ }
119
+ .decorative-line::before {
120
+ left: -15px;
121
+ }
122
+ .decorative-line::after {
123
+ right: -15px;
124
+ }
125
+ .main-options {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: 25px;
129
+ margin: 40px 0;
130
+ }
131
+ .option-btn {
132
+ background: linear-gradient(135deg, #ff69b4 0%, #dda0dd 50%, #ffc0cb 100%);
133
+ color: white;
134
+ border: none;
135
+ padding: 25px 30px;
136
+ border-radius: 20px;
137
+ font-family: 'Playfair Display', serif;
138
+ font-size: 1.3rem;
139
+ font-weight: 600;
140
+ cursor: pointer;
141
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
142
+ position: relative;
143
+ overflow: hidden;
144
+ box-shadow: 0 8px 25px rgba(255, 105, 180, 0.3);
145
+ text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
146
+ }
147
+ .option-btn::before {
148
+ content: '';
149
+ position: absolute;
150
+ top: 0;
151
+ left: -100%;
152
+ width: 100%;
153
+ height: 100%;
154
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
155
+ transition: left 0.6s;
156
+ }
157
+ .option-btn:hover::before {
158
+ left: 100%;
159
+ }
160
+ .option-btn:hover {
161
+ transform: translateY(-8px);
162
+ box-shadow: 0 15px 35px rgba(255, 105, 180, 0.4);
163
+ background: linear-gradient(135deg, #ff1493 0%, #ba55d3 50%, #ff69b4 100%);
164
+ }
165
+ .attendance-section, .memory-section, .media-section {
166
+ display: none;
167
+ animation: slideIn 0.6s ease;
168
+ }
169
+ @keyframes slideIn {
170
+ from {
171
+ opacity: 0;
172
+ transform: translateY(30px);
173
+ }
174
+ to {
175
+ opacity: 1;
176
+ transform: translateY(0);
177
+ }
178
+ }
179
+ .section-title {
180
+ font-family: 'Playfair Display', serif;
181
+ color: #d4395b;
182
+ font-size: 2.2rem;
183
+ font-weight: 600;
184
+ margin-bottom: 30px;
185
+ position: relative;
186
+ }
187
+ .attendance-options {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 20px;
191
+ margin: 30px 0;
192
+ }
193
+ .attendance-btn {
194
+ background: rgba(255, 255, 255, 0.9);
195
+ border: 3px solid transparent;
196
+ background-clip: padding-box;
197
+ color: #8b4b7a;
198
+ padding: 20px 25px;
199
+ border-radius: 15px;
200
+ cursor: pointer;
201
+ transition: all 0.3s ease;
202
+ font-family: 'Playfair Display', serif;
203
+ font-size: 1.2rem;
204
+ font-weight: 500;
205
+ position: relative;
206
+ box-shadow: 0 5px 15px rgba(0,0,0,0.1);
207
+ }
208
+ .attendance-btn::before {
209
+ content: '';
210
+ position: absolute;
211
+ top: -3px;
212
+ left: -3px;
213
+ right: -3px;
214
+ bottom: -3px;
215
+ background: linear-gradient(45deg, #ff69b4, #dda0dd, #ffc0cb);
216
+ border-radius: 18px;
217
+ z-index: -1;
218
+ opacity: 0;
219
+ transition: opacity 0.3s ease;
220
+ }
221
+ .attendance-btn:hover::before,
222
+ .attendance-btn.selected::before {
223
+ opacity: 1;
224
+ }
225
+ .attendance-btn:hover,
226
+ .attendance-btn.selected {
227
+ color: white;
228
+ background: linear-gradient(135deg, #ff69b4, #dda0dd);
229
+ transform: translateY(-3px);
230
+ box-shadow: 0 10px 25px rgba(255, 105, 180, 0.3);
231
+ }
232
+ .form-section {
233
+ display: none;
234
+ margin-top: 30px;
235
+ animation: fadeInUp 0.5s ease;
236
+ }
237
+ .form-section.show {
238
+ display: block;
239
+ }
240
+ @keyframes fadeInUp {
241
+ from {
242
+ opacity: 0;
243
+ transform: translateY(20px);
244
+ }
245
+ to {
246
+ opacity: 1;
247
+ transform: translateY(0);
248
+ }
249
+ }
250
+ .form-group {
251
+ margin: 25px 0;
252
+ text-align: left;
253
+ }
254
+ .form-group label {
255
+ display: block;
256
+ margin-bottom: 8px;
257
+ color: #8b4b7a;
258
+ font-family: 'Playfair Display', serif;
259
+ font-weight: 600;
260
+ font-size: 1.1rem;
261
+ }
262
+ .form-group input, .form-group textarea {
263
+ width: 100%;
264
+ padding: 15px 20px;
265
+ border: 2px solid #f0c2d4;
266
+ border-radius: 12px;
267
+ font-size: 1rem;
268
+ font-family: 'Inter', sans-serif;
269
+ background: rgba(255, 255, 255, 0.8);
270
+ transition: all 0.3s ease;
271
+ resize: vertical;
272
+ }
273
+ .form-group textarea {
274
+ min-height: 120px;
275
+ line-height: 1.6;
276
+ }
277
+ .form-group input:focus, .form-group textarea:focus {
278
+ outline: none;
279
+ border-color: #ff69b4;
280
+ background: rgba(255, 255, 255, 1);
281
+ box-shadow: 0 0 20px rgba(255, 105, 180, 0.2);
282
+ }
283
+ /* Media Upload Styles */
284
+ .media-intro {
285
+ background: linear-gradient(135deg, #e3f2fd, #f3e5f5);
286
+ padding: 25px;
287
+ border-radius: 15px;
288
+ margin: 25px 0;
289
+ border: 2px solid rgba(63, 81, 181, 0.2);
290
+ text-align: left;
291
+ }
292
+ .media-intro h4 {
293
+ color: #1565c0;
294
+ font-family: 'Playfair Display', serif;
295
+ font-size: 1.3rem;
296
+ margin-bottom: 10px;
297
+ }
298
+ .media-intro p {
299
+ color: #1565c0;
300
+ font-size: 1rem;
301
+ line-height: 1.5;
302
+ margin-bottom: 10px;
303
+ }
304
+ .file-upload-area {
305
+ border: 3px dashed #dda0dd;
306
+ border-radius: 15px;
307
+ padding: 40px;
308
+ text-align: center;
309
+ background: rgba(221, 160, 221, 0.05);
310
+ transition: all 0.3s ease;
311
+ cursor: pointer;
312
+ position: relative;
313
+ margin: 25px 0;
314
+ }
315
+ .file-upload-area:hover {
316
+ border-color: #ff69b4;
317
+ background: rgba(255, 105, 180, 0.1);
318
+ transform: translateY(-2px);
319
+ }
320
+ .file-upload-area.dragover {
321
+ border-color: #ff69b4;
322
+ background: rgba(255, 105, 180, 0.1);
323
+ transform: scale(1.02);
324
+ }
325
+ #fileInput {
326
+ display: none;
327
+ }
328
+ .upload-icon {
329
+ font-size: 4rem;
330
+ color: #dda0dd;
331
+ margin-bottom: 20px;
332
+ }
333
+ .upload-text {
334
+ font-family: 'Playfair Display', serif;
335
+ font-size: 1.3rem;
336
+ color: #8b4b7a;
337
+ margin-bottom: 10px;
338
+ }
339
+ .upload-subtext {
340
+ color: #8b4b7a;
341
+ font-size: 1rem;
342
+ opacity: 0.8;
343
+ }
344
+ .file-preview-container {
345
+ display: none;
346
+ margin: 25px 0;
347
+ text-align: left;
348
+ }
349
+ .file-preview-grid {
350
+ display: grid;
351
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
352
+ gap: 15px;
353
+ margin: 20px 0;
354
+ }
355
+ .file-preview-item {
356
+ position: relative;
357
+ border-radius: 12px;
358
+ overflow: hidden;
359
+ box-shadow: 0 5px 15px rgba(0,0,0,0.1);
360
+ background: white;
361
+ }
362
+ .file-preview-item img, .file-preview-item video {
363
+ width: 100%;
364
+ height: 120px;
365
+ object-fit: cover;
366
+ border-radius: 8px;
367
+ }
368
+ .file-preview-item .file-info {
369
+ position: absolute;
370
+ bottom: 0;
371
+ left: 0;
372
+ right: 0;
373
+ background: rgba(0,0,0,0.7);
374
+ color: white;
375
+ padding: 8px;
376
+ font-size: 0.8rem;
377
+ }
378
+ .remove-file {
379
+ position: absolute;
380
+ top: 5px;
381
+ right: 5px;
382
+ background: rgba(220, 53, 69, 0.9);
383
+ color: white;
384
+ border: none;
385
+ border-radius: 50%;
386
+ width: 25px;
387
+ height: 25px;
388
+ font-size: 12px;
389
+ cursor: pointer;
390
+ display: flex;
391
+ align-items: center;
392
+ justify-content: center;
393
+ }
394
+ .file-size-info {
395
+ background: linear-gradient(135deg, #fff3cd, #ffeaa7);
396
+ border: 2px solid #ffc107;
397
+ padding: 15px;
398
+ border-radius: 10px;
399
+ margin: 20px 0;
400
+ color: #856404;
401
+ font-size: 0.9rem;
402
+ }
403
+ .submit-btn {
404
+ background: linear-gradient(135deg, #28a745, #20c997, #17a2b8);
405
+ color: white;
406
+ border: none;
407
+ padding: 18px 40px;
408
+ border-radius: 15px;
409
+ font-family: 'Playfair Display', serif;
410
+ font-size: 1.2rem;
411
+ font-weight: 600;
412
+ cursor: pointer;
413
+ margin-top: 30px;
414
+ transition: all 0.3s ease;
415
+ box-shadow: 0 8px 20px rgba(40, 167, 69, 0.3);
416
+ }
417
+ .submit-btn:hover {
418
+ transform: translateY(-3px);
419
+ box-shadow: 0 12px 30px rgba(40, 167, 69, 0.4);
420
+ background: linear-gradient(135deg, #218838, #17a2b8, #138496);
421
+ }
422
+ .submit-btn:disabled {
423
+ background: #d6d8db;
424
+ cursor: not-allowed;
425
+ transform: none;
426
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
427
+ }
428
+ .back-btn {
429
+ background: rgba(108, 117, 125, 0.1);
430
+ color: #6c757d;
431
+ border: 2px solid #dee2e6;
432
+ padding: 12px 25px;
433
+ border-radius: 10px;
434
+ cursor: pointer;
435
+ margin-top: 25px;
436
+ font-family: 'Inter', sans-serif;
437
+ font-weight: 500;
438
+ transition: all 0.3s ease;
439
+ }
440
+ .back-btn:hover {
441
+ background: #6c757d;
442
+ color: white;
443
+ border-color: #6c757d;
444
+ }
445
+ .loading {
446
+ display: none;
447
+ margin-top: 20px;
448
+ }
449
+ .spinner {
450
+ border: 4px solid rgba(255, 105, 180, 0.2);
451
+ border-top: 4px solid #ff69b4;
452
+ border-radius: 50%;
453
+ width: 40px;
454
+ height: 40px;
455
+ animation: spin 1s linear infinite;
456
+ margin: 0 auto 15px;
457
+ }
458
+ @keyframes spin {
459
+ 0% { transform: rotate(0deg); }
460
+ 100% { transform: rotate(360deg); }
461
+ }
462
+ .loading p {
463
+ color: #8b4b7a;
464
+ font-family: 'Playfair Display', serif;
465
+ font-style: italic;
466
+ }
467
+ .success-message {
468
+ display: none;
469
+ background: linear-gradient(135deg, #d4edda, #c3e6cb);
470
+ color: #155724;
471
+ padding: 30px;
472
+ border-radius: 20px;
473
+ margin-top: 20px;
474
+ border: 2px solid #c3e6cb;
475
+ animation: celebrationPulse 0.6s ease;
476
+ }
477
+ .error-message {
478
+ display: none;
479
+ background: linear-gradient(135deg, #f8d7da, #f1b0b7);
480
+ color: #721c24;
481
+ padding: 30px;
482
+ border-radius: 20px;
483
+ margin-top: 20px;
484
+ border: 2px solid #f1b0b7;
485
+ }
486
+ .message-title {
487
+ font-family: 'Playfair Display', serif;
488
+ font-size: 1.5rem;
489
+ font-weight: 600;
490
+ margin-bottom: 10px;
491
+ }
492
+ @keyframes celebrationPulse {
493
+ 0%, 100% { transform: scale(1); }
494
+ 50% { transform: scale(1.05); }
495
+ }
496
+ .memory-intro {
497
+ background: linear-gradient(135deg, #e8f5e8, #f0fff0);
498
+ padding: 25px;
499
+ border-radius: 15px;
500
+ margin: 25px 0;
501
+ border: 2px solid rgba(40, 167, 69, 0.2);
502
+ text-align: left;
503
+ }
504
+ .memory-intro h4 {
505
+ color: #155724;
506
+ font-family: 'Playfair Display', serif;
507
+ font-size: 1.3rem;
508
+ margin-bottom: 10px;
509
+ }
510
+ .memory-intro p {
511
+ color: #155724;
512
+ font-size: 1rem;
513
+ line-height: 1.5;
514
+ }
515
+ @media (max-width: 768px) {
516
+ .container {
517
+ padding: 40px 30px;
518
+ margin: 20px;
519
+ }
520
+ .main-title {
521
+ font-size: 3rem;
522
+ }
523
+ .subtitle {
524
+ font-size: 1.1rem;
525
+ letter-spacing: 1px;
526
+ }
527
+ .option-btn {
528
+ font-size: 1.1rem;
529
+ padding: 20px 25px;
530
+ }
531
+ .section-title {
532
+ font-size: 1.8rem;
533
+ }
534
+ .file-upload-area {
535
+ padding: 30px 20px;
536
+ }
537
+ .upload-icon {
538
+ font-size: 3rem;
539
+ }
540
+ }
541
+ @media (max-width: 480px) {
542
+ .main-title {
543
+ font-size: 2.5rem;
544
+ }
545
+ .container {
546
+ padding: 30px 20px;
547
+ }
548
+ .file-preview-grid {
549
+ grid-template-columns: repeat(auto-fit, minmax(80px, 1fr));
550
+ }
551
+ .file-preview-item img, .file-preview-item video {
552
+ height: 80px;
553
+ }
554
+ }
555
+ </style>
556
+ </head>
557
+ <body>
558
+ <div class="floating-hearts" id="hearts"></div>
559
+ <div class="container">
560
+ <h1 class="main-title">Düğünümüz</h1>
561
+ <p class="subtitle">Özel Günümüzü Paylaşın</p>
562
+ <div class="decorative-line"></div>
563
+ <div id="mainMenu" class="main-options">
564
+ <button class="option-btn" onclick="showAttendance()">
565
+ 💌 Katılım Bildireceğim
566
+ </button>
567
+ <button class="option-btn" onclick="showMediaUpload()">
568
+ 📷 Foto/Video Yükleyeceğim
569
+ </button>
570
+ <button class="option-btn" onclick="showMemories()">
571
+ 💝 Anı Bırakacağım
572
+ </button>
573
+ </div>
574
+ <!-- Attendance Section -->
575
+ <div id="attendanceSection" class="attendance-section">
576
+ <h2 class="section-title">💕 Katılım Durumunuz</h2>
577
+ <div class="attendance-options">
578
+ <button class="attendance-btn" onclick="selectAttendance('attending')">
579
+ ✨ Katılacağım
580
+ </button>
581
+ <button class="attendance-btn" onclick="selectAttendance('not-attending')">
582
+ 💔 Maalesef gelemeyeceğim
583
+ </button>
584
+ </div>
585
+ <div id="attendingForm" class="form-section">
586
+ <div class="form-group">
587
+ <label for="guestName">💫 Adınız Soyadınız:</label>
588
+ <input type="text" id="guestName" placeholder="Adınızı ve soyadınızı yazın..." required>
589
+ </div>
590
+ <div class="form-group">
591
+ <label for="guestCount">👥 Kaç kişi katılacaksınız?</label>
592
+ <input type="number" id="guestCount" min="1" max="10" value="1" required>
593
+ </div>
594
+ </div>
595
+ <div id="submitSection" class="form-section">
596
+ <button class="submit-btn" onclick="submitAttendance()" id="submitBtn">
597
+ 💌 Gönder
598
+ </button>
599
+ <div class="loading" id="loading">
600
+ <div class="spinner"></div>
601
+ <p>Mesajınız gönderiliyor...</p>
602
+ </div>
603
+ </div>
604
+ <button class="back-btn" onclick="goBack()">← Ana Menüye Dön</button>
605
+ </div>
606
+ <!-- Media Upload Section -->
607
+ <div id="mediaSection" class="media-section">
608
+ <h2 class="section-title">📷 Foto/Video Paylaşın</h2>
609
+ <div class="media-intro">
610
+ <h4>📸 Anılarınızı Bizimle Paylaşın</h4>
611
+ <p>Birlikte çektiğimiz fotoğrafları, videolar ve özel anları bizimle paylaşabilirsiniz! Düğün albümümüze katkıda bulunun. 💕</p>
612
+ <p><strong>⚠️ Dosya Limitleri:</strong> Fotoğraflar max 5MB, videolar max 25MB. JPEG, PNG, MP4, MOV formatları desteklenir.</p>
613
+ </div>
614
+ <div class="form-section show">
615
+ <div class="form-group">
616
+ <label for="mediaCaption">💫 Fotoğraf/Video Açıklaması (İsteğe bağlı):</label>
617
+ <textarea
618
+ id="mediaCaption"
619
+ placeholder="Bu fotoğraf/video hakkında kısa bir açıklama yazabilirsiniz..."
620
+ maxlength="500"
621
+ ></textarea>
622
+ <small style="color: #8b4b7a; font-style: italic;">En fazla 500 karakter</small>
623
+ </div>
624
+ <div class="file-upload-area" onclick="document.getElementById('fileInput').click()">
625
+ <div class="upload-icon">📷</div>
626
+ <div class="upload-text">Dosya Seç veya Buraya Sürükle</div>
627
+ <div class="upload-subtext">Fotoğraf: JPEG, PNG (max 5MB)<br>Video: MP4, MOV (max 25MB)</div>
628
+ <input
629
+ type="file"
630
+ id="fileInput"
631
+ accept="image/jpeg,image/png,video/mp4,video/quicktime"
632
+ multiple
633
+ >
634
+ </div>
635
+ <div class="file-size-info">
636
+ <!-- Updated message -->
637
+ <strong>📋 Bilgi:</strong> Form artık dosyaları doğrudan sunucuya göndermektedir.
638
+ </div>
639
+ <div id="filePreviewContainer" class="file-preview-container">
640
+ <h4>📁 Seçilen Dosyalar:</h4>
641
+ <div id="filePreviewGrid" class="file-preview-grid"></div>
642
+ </div>
643
+ <button class="submit-btn" onclick="submitMedia()" id="mediaSubmitBtn">
644
+ 📷 Dosyaları Gönder
645
+ </button>
646
+ <div class="loading" id="mediaLoading">
647
+ <div class="spinner"></div>
648
+ <p>Dosyalarınız gönderiliyor...</p>
649
+ </div>
650
+ </div>
651
+ <button class="back-btn" onclick="goBackFromMedia()">← Ana Menüye Dön</button>
652
+ </div>
653
+ <!-- Memory Section - GÜNCELLENMİŞ -->
654
+ <div id="memorySection" class="memory-section">
655
+ <h2 class="section-title">💝 Anı Bırakın</h2>
656
+ <div class="memory-intro">
657
+ <h4>✨ Özel Anılarınızı Paylaşın</h4>
658
+ <p>Bu özel günümüzde, sizinle paylaştığımız güzel anıları, iyi dileklerinizi veya bizim için yazdığınız özel mesajları bırakabilirsiniz. Her anınız bizim için değerli! 💕</p>
659
+ </div>
660
+ <div class="form-section show">
661
+ <!-- YENİ: İsim alanı eklendi -->
662
+ <div class="form-group">
663
+ <label for="memoryName">💫 Adınız:</label>
664
+ <input type="text" id="memoryName" placeholder="Adınızı yazın..." required maxlength="100">
665
+ </div>
666
+ <div class="form-group">
667
+ <label for="memoryText">💭 Anınızı, dileğinizi veya mesajınızı yazın:</label>
668
+ <textarea
669
+ id="memoryText"
670
+ placeholder="Sizinle paylaştığımız güzel anıları, iyi dileklerinizi veya özel mesajınızı buraya yazabilirsiniz..."
671
+ required
672
+ maxlength="1000"
673
+ ></textarea>
674
+ <small style="color: #8b4b7a; font-style: italic;">En fazla 1000 karakter</small>
675
+ </div>
676
+ <button class="submit-btn" onclick="submitMemory()" id="memorySubmitBtn">
677
+ 💝 Anımı Gönder
678
+ </button>
679
+ <div class="loading" id="memoryLoading">
680
+ <div class="spinner"></div>
681
+ <p>Anınız gönderiliyor...</p>
682
+ </div>
683
+ </div>
684
+ <button class="back-btn" onclick="goBackFromMemory()">← Ana Menüye Dön</button>
685
+ </div>
686
+ <div id="successMessage" class="success-message">
687
+ <h3 class="message-title">🎉 Harika! Teşekkürler!</h3>
688
+ <p>Bilgileriniz başarıyla gönderildi. Düğün detayları için yakında sizinle iletişime geçeceğiz. Özel günümüzde yanımızda olacağınız için çok mutluyuz! 💕</p>
689
+ </div>
690
+ <div id="memorySuccessMessage" class="success-message">
691
+ <h3 class="message-title">💝 Çok Teşekkürler!</h3>
692
+ <p>Güzel anınız ve mesajınız bizlere ulaştı! Bu özel paylaşımınız için çok teşekkür ederiz. Düğünümüzde anılarınızı sizinle birlikte kutlayacağız! ✨💕</p>
693
+ </div>
694
+ <div id="mediaSuccessMessage" class="success-message">
695
+ <h3 class="message-title">📷 Harika!</h3>
696
+ <p>Fotoğraf ve videolarınız başarıyla gönderildi! Bu özel anıları bizimle paylaştığınız için çok teşekkür ederiz. Düğün albümümüzü daha da güzel yaptınız! 🎉💕</p>
697
+ </div>
698
+ <div id="errorMessage" class="error-message">
699
+ <h3 class="message-title">😔 Bir Hata Oluştu</h3>
700
+ <p>Mesajınız gönderilirken bir sorun yaşandı. Lütfen tekrar deneyiniz veya bizimle doğrudan iletişime geçin.</p>
701
+ </div>
702
+ </div>
703
+ <script>
704
+ // EmailJS initialization REMOVED
705
+ // emailjs.init({
706
+ // publicKey: '6QyIx9pDuv0DaUy39', // Your EmailJS public key
707
+ // });
708
+ let selectedAttendance = null;
709
+ let selectedFiles = [];
710
+ // Create floating hearts
711
+ function createHearts() {
712
+ const heartsContainer = document.getElementById('hearts');
713
+ const heartSymbols = ['💕', '💖', '💗', '🌸', '🌺', '🦋'];
714
+ setInterval(() => {
715
+ const heart = document.createElement('div');
716
+ heart.className = 'heart';
717
+ heart.innerHTML = heartSymbols[Math.floor(Math.random() * heartSymbols.length)];
718
+ heart.style.left = Math.random() * 100 + 'vw';
719
+ heart.style.animationDuration = Math.random() * 3 + 6 + 's';
720
+ heart.style.opacity = Math.random() * 0.5 + 0.2;
721
+ heartsContainer.appendChild(heart);
722
+ setTimeout(() => {
723
+ heart.remove();
724
+ }, 9000);
725
+ }, 2000);
726
+ }
727
+ function showAttendance() {
728
+ hideAllSections();
729
+ document.getElementById('attendanceSection').style.display = 'block';
730
+ }
731
+ function showMediaUpload() {
732
+ hideAllSections();
733
+ document.getElementById('mediaSection').style.display = 'block';
734
+ }
735
+ function showMemories() {
736
+ hideAllSections();
737
+ document.getElementById('memorySection').style.display = 'block';
738
+ }
739
+ function hideAllSections() {
740
+ document.getElementById('mainMenu').style.display = 'none';
741
+ document.getElementById('attendanceSection').style.display = 'none';
742
+ document.getElementById('memorySection').style.display = 'none';
743
+ document.getElementById('mediaSection').style.display = 'none';
744
+ // Hide all messages
745
+ document.getElementById('successMessage').style.display = 'none';
746
+ document.getElementById('memorySuccessMessage').style.display = 'none';
747
+ document.getElementById('mediaSuccessMessage').style.display = 'none';
748
+ document.getElementById('errorMessage').style.display = 'none';
749
+ }
750
+ // File Upload Functionality
751
+ function setupFileUpload() {
752
+ const fileInput = document.getElementById('fileInput');
753
+ const fileUploadArea = document.querySelector('.file-upload-area');
754
+ // File input change event
755
+ fileInput.addEventListener('change', handleFileSelect);
756
+ // Drag and drop events
757
+ fileUploadArea.addEventListener('dragover', (e) => {
758
+ e.preventDefault();
759
+ fileUploadArea.classList.add('dragover');
760
+ });
761
+ fileUploadArea.addEventListener('dragleave', () => {
762
+ fileUploadArea.classList.remove('dragover');
763
+ });
764
+ fileUploadArea.addEventListener('drop', (e) => {
765
+ e.preventDefault();
766
+ fileUploadArea.classList.remove('dragover');
767
+ const files = Array.from(e.dataTransfer.files);
768
+ handleFiles(files);
769
+ });
770
+ }
771
+ function handleFileSelect(e) {
772
+ const files = Array.from(e.target.files);
773
+ handleFiles(files);
774
+ }
775
+ function handleFiles(files) {
776
+ for (let file of files) {
777
+ if (validateFile(file)) {
778
+ selectedFiles.push(file);
779
+ }
780
+ }
781
+ updateFilePreview();
782
+ }
783
+ function validateFile(file) {
784
+ const allowedImageTypes = ['image/jpeg', 'image/png'];
785
+ const allowedVideoTypes = ['video/mp4', 'video/quicktime'];
786
+ const maxImageSize = 5 * 1024 * 1024; // 5MB
787
+ const maxVideoSize = 25 * 1024 * 1024; // 25MB
788
+ if (allowedImageTypes.includes(file.type)) {
789
+ if (file.size > maxImageSize) {
790
+ alert(`📸 ${file.name} dosyası çok büyük! Fotoğraflar maximum 5MB olabilir.`);
791
+ return false;
792
+ }
793
+ } else if (allowedVideoTypes.includes(file.type)) {
794
+ if (file.size > maxVideoSize) {
795
+ alert(`🎥 ${file.name} dosyası çok büyük! Videolar maximum 25MB olabilir.`);
796
+ return false;
797
+ }
798
+ } else {
799
+ alert(`❌ ${file.name} desteklenmeyen dosya formatı! Sadece JPEG, PNG, MP4, MOV dosyaları kabul edilir.`);
800
+ return false;
801
+ }
802
+ return true;
803
+ }
804
+ function updateFilePreview() {
805
+ const previewContainer = document.getElementById('filePreviewContainer');
806
+ const previewGrid = document.getElementById('filePreviewGrid');
807
+ if (selectedFiles.length === 0) {
808
+ previewContainer.style.display = 'none';
809
+ return;
810
+ }
811
+ previewContainer.style.display = 'block';
812
+ previewGrid.innerHTML = '';
813
+ selectedFiles.forEach((file, index) => {
814
+ const previewItem = document.createElement('div');
815
+ previewItem.className = 'file-preview-item';
816
+ if (file.type.startsWith('image/')) {
817
+ const img = document.createElement('img');
818
+ img.src = URL.createObjectURL(file);
819
+ previewItem.appendChild(img);
820
+ } else if (file.type.startsWith('video/')) {
821
+ const video = document.createElement('video');
822
+ video.src = URL.createObjectURL(file);
823
+ video.muted = true;
824
+ previewItem.appendChild(video);
825
+ }
826
+ const fileInfo = document.createElement('div');
827
+ fileInfo.className = 'file-info';
828
+ fileInfo.innerHTML = `${file.name}<br>${(file.size / 1024 / 1024).toFixed(2)} MB`;
829
+ previewItem.appendChild(fileInfo);
830
+ const removeBtn = document.createElement('button');
831
+ removeBtn.className = 'remove-file';
832
+ removeBtn.innerHTML = '×';
833
+ removeBtn.onclick = () => removeFile(index);
834
+ previewItem.appendChild(removeBtn);
835
+ previewGrid.appendChild(previewItem);
836
+ });
837
+ }
838
+ function removeFile(index) {
839
+ selectedFiles.splice(index, 1);
840
+ updateFilePreview();
841
+ }
842
+ // --- UPDATED SUBMIT FUNCTIONS ---
843
+ // --- IMPORTANT: Change this URL to your deployed backend URL when you deploy ---
844
+ // const BACKEND_URL = 'http://localhost:8000'; // For local testing
845
+ const BACKEND_URL = 'https://weddingapp-vhr5.onrender.com'; // Change to your backend URL
846
+ async function submitMedia() {
847
+ const submitBtn = document.getElementById('mediaSubmitBtn');
848
+ const loading = document.getElementById('mediaLoading');
849
+ const successMessage = document.getElementById('mediaSuccessMessage');
850
+ const errorMessage = document.getElementById('errorMessage');
851
+ const mediaCaption = document.getElementById('mediaCaption').value.trim();
852
+ if (selectedFiles.length === 0) {
853
+ alert('📷 Lütfen en az bir dosya seçin.');
854
+ return;
855
+ }
856
+ // Show loading state
857
+ submitBtn.disabled = true;
858
+ submitBtn.textContent = '📷 Gönderiliyor...';
859
+ loading.style.display = 'block';
860
+ try {
861
+ // Create FormData object to send files and text data
862
+ const formData = new FormData();
863
+ if (mediaCaption) { // Only append caption if it exists
864
+ formData.append('caption', mediaCaption); // Append text data
865
+ }
866
+ selectedFiles.forEach(file => {
867
+ formData.append('mediaFiles', file); // Append each file
868
+ });
869
+ const response = await fetch(`${BACKEND_URL}/api/media`, {
870
+ method: 'POST',
871
+ body: formData // Send FormData (automatically sets Content-Type: multipart/form-data)
872
+ // DO NOT set Content-Type header manually when sending FormData
873
+ });
874
+ const result = await response.json();
875
+ if (response.ok) {
876
+ console.log('✅ Media uploaded successfully:', result);
877
+ // Check if all uploads were successful based on backend response
878
+ if (result.failed_uploads && result.failed_uploads.length > 0) {
879
+ console.warn('Some files failed to upload:', result.failed_uploads);
880
+ // You might want to show a partial success message or retry failed ones
881
+ // For now, we'll treat the overall request as successful if it returns 200
882
+ }
883
+ // Hide media section and show success message
884
+ hideAllSections();
885
+ successMessage.style.display = 'block';
886
+ // Add celebration effect
887
+ createCelebrationHearts();
888
+ // Reset after 5 seconds
889
+ setTimeout(() => {
890
+ successMessage.style.display = 'none';
891
+ document.getElementById('mainMenu').style.display = 'block';
892
+ resetMediaForm();
893
+ }, 5000);
894
+ } else {
895
+ // Handle non-2xx responses (e.g., 400, 500)
896
+ throw new Error(result.detail || result.message || 'Upload failed');
897
+ }
898
+ } catch (error) {
899
+ console.error('❌ Media upload failed:', error);
900
+ // Show error message
901
+ errorMessage.style.display = 'block';
902
+ // Hide error after 4 seconds
903
+ setTimeout(() => {
904
+ errorMessage.style.display = 'none';
905
+ }, 4000);
906
+ } finally {
907
+ // Reset loading state
908
+ submitBtn.disabled = false;
909
+ submitBtn.textContent = '📷 Dosyaları Gönder';
910
+ loading.style.display = 'none';
911
+ }
912
+ }
913
+ function selectAttendance(type) {
914
+ selectedAttendance = type;
915
+ // Remove selected class from all buttons
916
+ document.querySelectorAll('.attendance-btn').forEach(btn => {
917
+ btn.classList.remove('selected');
918
+ });
919
+ // Add selected class to clicked button
920
+ event.target.classList.add('selected');
921
+ const attendingForm = document.getElementById('attendingForm');
922
+ const submitSection = document.getElementById('submitSection');
923
+ if (type === 'attending') {
924
+ attendingForm.style.display = 'block';
925
+ } else {
926
+ attendingForm.style.display = 'none';
927
+ }
928
+ submitSection.style.display = 'block';
929
+ }
930
+ async function submitAttendance() {
931
+ const submitBtn = document.getElementById('submitBtn');
932
+ const loading = document.getElementById('loading');
933
+ const successMessage = document.getElementById('successMessage');
934
+ const errorMessage = document.getElementById('errorMessage');
935
+ // Get form values
936
+ const guestName = document.getElementById('guestName').value.trim();
937
+ const guestCount = document.getElementById('guestCount').value;
938
+ if (!selectedAttendance) {
939
+ alert('Lütfen katılım durumunuzu seçin.');
940
+ return;
941
+ }
942
+ if (selectedAttendance === 'attending' && (!guestName || !guestCount)) {
943
+ alert('💫 Lütfen adınızı ve katılımcı sayısını girin.');
944
+ return;
945
+ }
946
+ // Show loading state
947
+ submitBtn.disabled = true;
948
+ submitBtn.textContent = '💌 Gönderiliyor...';
949
+ loading.style.display = 'block';
950
+ try {
951
+ // Prepare data to send as JSON
952
+ let requestData = { status: selectedAttendance };
953
+ if (selectedAttendance === 'attending') {
954
+ requestData.name = guestName;
955
+ requestData.number = guestCount;
956
+ }
957
+ const response = await fetch(`${BACKEND_URL}/api/attendance`, {
958
+ method: 'POST',
959
+ headers: {
960
+ 'Content-Type': 'application/json' // Sending JSON data
961
+ },
962
+ body: JSON.stringify(requestData) // Convert data to JSON string
963
+ });
964
+ const result = await response.json();
965
+ if (response.ok) {
966
+ console.log('✅ Attendance submitted successfully:', result);
967
+ // Hide attendance section and show success message
968
+ hideAllSections();
969
+ successMessage.style.display = 'block';
970
+ // Add celebration effect
971
+ createCelebrationHearts();
972
+ // Reset after 5 seconds
973
+ setTimeout(() => {
974
+ successMessage.style.display = 'none';
975
+ document.getElementById('mainMenu').style.display = 'block';
976
+ resetAttendanceForm();
977
+ }, 5000);
978
+ } else {
979
+ // Handle non-2xx responses (e.g., 400, 500)
980
+ throw new Error(result.detail || result.message || 'Submission failed');
981
+ }
982
+ } catch (error) {
983
+ console.error('❌ Attendance submission failed:', error);
984
+ // Show error message
985
+ errorMessage.style.display = 'block';
986
+ // Hide error after 4 seconds
987
+ setTimeout(() => {
988
+ errorMessage.style.display = 'none';
989
+ }, 4000);
990
+ } finally {
991
+ // Reset loading state
992
+ submitBtn.disabled = false;
993
+ submitBtn.textContent = '💌 Gönder';
994
+ loading.style.display = 'none';
995
+ }
996
+ }
997
+ // GÜNCELLENMİŞ submitMemory fonksiyonu
998
+ async function submitMemory() {
999
+ const submitBtn = document.getElementById('memorySubmitBtn');
1000
+ const loading = document.getElementById('memoryLoading');
1001
+ const successMessage = document.getElementById('memorySuccessMessage');
1002
+ const errorMessage = document.getElementById('errorMessage');
1003
+
1004
+ // YENİ: İsim alanını al
1005
+ const memoryName = document.getElementById('memoryName').value.trim();
1006
+ const memoryText = document.getElementById('memoryText').value.trim();
1007
+
1008
+ // YENİ: İsim alanını kontrol et
1009
+ if (!memoryName) {
1010
+ alert('💫 Lütfen adınızı yazın.');
1011
+ return;
1012
+ }
1013
+
1014
+ if (!memoryText) {
1015
+ alert('💭 Lütfen anınızı veya mesajınızı yazın.');
1016
+ return;
1017
+ }
1018
+
1019
+ if (memoryText.length > 1000) {
1020
+ alert('📝 Mesajınız 1000 karakterden uzun olamaz.');
1021
+ return;
1022
+ }
1023
+
1024
+ // Show loading state
1025
+ submitBtn.disabled = true;
1026
+ submitBtn.textContent = '💝 Gönderiliyor...';
1027
+ loading.style.display = 'block';
1028
+
1029
+ try {
1030
+ // GÜNCELLENMİŞ: name alanını ekledik
1031
+ const requestData = {
1032
+ name: memoryName, // <-- YENİ
1033
+ memo: memoryText
1034
+ };
1035
+
1036
+ const response = await fetch(`${BACKEND_URL}/api/memory`, {
1037
+ method: 'POST',
1038
+ headers: {
1039
+ 'Content-Type': 'application/json'
1040
+ },
1041
+ body: JSON.stringify(requestData)
1042
+ });
1043
+
1044
+ const result = await response.json();
1045
+ if (response.ok) {
1046
+ console.log('✅ Memory submitted successfully:', result);
1047
+ // Hide memory section and show success message
1048
+ hideAllSections();
1049
+ successMessage.style.display = 'block';
1050
+ // Add celebration effect
1051
+ createCelebrationHearts();
1052
+ // Reset after 5 seconds
1053
+ setTimeout(() => {
1054
+ successMessage.style.display = 'none';
1055
+ document.getElementById('mainMenu').style.display = 'block';
1056
+ resetMemoryForm();
1057
+ }, 5000);
1058
+ } else {
1059
+ throw new Error(result.detail || result.message || 'Submission failed');
1060
+ }
1061
+ } catch (error) {
1062
+ console.error('❌ Memory submission failed:', error);
1063
+ errorMessage.style.display = 'block';
1064
+ setTimeout(() => {
1065
+ errorMessage.style.display = 'none';
1066
+ }, 4000);
1067
+ } finally {
1068
+ submitBtn.disabled = false;
1069
+ submitBtn.textContent = '💝 Anımı Gönder';
1070
+ loading.style.display = 'none';
1071
+ }
1072
+ }
1073
+ // --- END OF UPDATED SUBMIT FUNCTIONS ---
1074
+ function createCelebrationHearts() {
1075
+ const container = document.querySelector('.container');
1076
+ for (let i = 0; i < 20; i++) {
1077
+ const heart = document.createElement('div');
1078
+ heart.innerHTML = '💖';
1079
+ heart.style.position = 'absolute';
1080
+ heart.style.left = Math.random() * 100 + '%';
1081
+ heart.style.top = Math.random() * 100 + '%';
1082
+ heart.style.fontSize = '24px';
1083
+ heart.style.pointerEvents = 'none';
1084
+ heart.style.animation = 'celebrationPulse 1s ease';
1085
+ container.appendChild(heart);
1086
+ setTimeout(() => heart.remove(), 1000);
1087
+ }
1088
+ }
1089
+ function goBack() {
1090
+ hideAllSections();
1091
+ document.getElementById('mainMenu').style.display = 'block';
1092
+ resetAttendanceForm();
1093
+ }
1094
+ function goBackFromMemory() {
1095
+ hideAllSections();
1096
+ document.getElementById('mainMenu').style.display = 'block';
1097
+ resetMemoryForm();
1098
+ }
1099
+ function goBackFromMedia() {
1100
+ hideAllSections();
1101
+ document.getElementById('mainMenu').style.display = 'block';
1102
+ resetMediaForm();
1103
+ }
1104
+ function resetAttendanceForm() {
1105
+ selectedAttendance = null;
1106
+ document.getElementById('guestName').value = '';
1107
+ document.getElementById('guestCount').value = '1';
1108
+ document.getElementById('attendingForm').style.display = 'none';
1109
+ document.getElementById('submitSection').style.display = 'none';
1110
+ document.querySelectorAll('.attendance-btn').forEach(btn => {
1111
+ btn.classList.remove('selected');
1112
+ });
1113
+ }
1114
+ // GÜNCELLENMİŞ resetMemoryForm fonksiyonu
1115
+ function resetMemoryForm() {
1116
+ document.getElementById('memoryName').value = ''; // YENİ
1117
+ document.getElementById('memoryText').value = '';
1118
+ }
1119
+ function resetMediaForm() {
1120
+ selectedFiles = [];
1121
+ document.getElementById('mediaCaption').value = '';
1122
+ document.getElementById('fileInput').value = '';
1123
+ updateFilePreview();
1124
+ }
1125
+ // Initialize everything when page loads
1126
+ document.addEventListener('DOMContentLoaded', function() {
1127
+ createHearts();
1128
+ setupFileUpload();
1129
+ });
1130
+ // Add fade out animation for coming soon messages
1131
+ const style = document.createElement('style');
1132
+ style.textContent = `
1133
+ @keyframes fadeOut {
1134
+ from { opacity: 1; transform: translateY(0); }
1135
+ to { opacity: 0; transform: translateY(-20px); }
1136
+ }
1137
+ `;
1138
+ document.head.appendChild(style);
1139
+ </script>
1140
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=SaitBurak/simalsaitwedding" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
1141
+ </html>