samirerty commited on
Commit
92c78ab
·
verified ·
1 Parent(s): 916363c

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +406 -519
index.html CHANGED
@@ -3,90 +3,101 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>بازخورد ناشناس محترمانه | اسپری محترمانه</title>
7
-
8
- <!-- Import Fonts: Vazirmatn for Persian and Poppins for English numbers/symbols -->
9
- <link rel="preconnect" href="https://fonts.googleapis.com">
10
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
- <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&family=Vazirmatn:wght@300;400;700&display=swap" rel="stylesheet">
12
-
13
- <!-- Import Icons: RemixIcon -->
14
- <link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
15
-
16
  <style>
17
- /* --- CSS Variables & Reset --- */
18
- :root {
19
- --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
20
- --glass-bg: rgba(255, 255, 255, 0.1);
21
- --glass-border: rgba(255, 255, 255, 0.2);
22
- --glass-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
23
- --text-color: #ffffff;
24
- --text-muted: rgba(255, 255, 255, 0.7);
25
- --accent-good: #00d2ff;
26
- --accent-bad: #ff6b6b;
27
- --bg-dark: #0f172a;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  }
29
 
30
- * {
31
- box-sizing: border-box;
32
- margin: 0;
33
- padding: 0;
34
- outline: none;
35
  }
36
 
37
- body {
38
- font-family: 'Vazirmatn', sans-serif;
39
- background: var(--bg-dark);
40
- background-image:
41
- radial-gradient(circle at 10% 20%, rgba(118, 75, 162, 0.4) 0%, transparent 40%),
42
- radial-gradient(circle at 90% 80%, rgba(102, 126, 234, 0.4) 0%, transparent 40%);
43
- color: var(--text-color);
44
- min-height: 100vh;
45
- overflow-x: hidden;
46
- line-height: 1.6;
47
  }
48
 
49
- /* --- Global Classes --- */
50
- .container {
51
- max-width: 1200px;
52
- margin: 0 auto;
53
- padding: 0 20px;
 
 
54
  }
55
 
56
- .glass-panel {
57
- background: var(--glass-bg);
58
- backdrop-filter: blur(12px);
59
- -webkit-backdrop-filter: blur(12px);
60
- border: 1px solid var(--glass-border);
61
- box-shadow: var(--glass-shadow);
62
- border-radius: 20px;
63
  }
64
 
65
- .btn {
66
- cursor: pointer;
67
- border: none;
68
- padding: 12px 24px;
69
- border-radius: 12px;
70
- font-family: 'Vazirmatn', sans-serif;
71
- font-weight: 600;
72
  transition: all 0.3s ease;
73
- display: inline-flex;
74
- align-items: center;
75
- justify-content: center;
76
- gap: 8px;
77
  }
78
 
79
- .gradient-text {
80
- background: linear-gradient(to right, #4facfe 0%, #00f2fe 100%);
 
 
 
 
 
 
 
 
81
  -webkit-background-clip: text;
82
  -webkit-text-fill-color: transparent;
 
83
  }
84
 
85
- /* --- Animations --- */
86
  .fade-in-up {
87
  opacity: 0;
88
  transform: translateY(30px);
89
- transition: opacity 0.8s ease-out, transform 0.8s ease-out;
90
  }
91
 
92
  .fade-in-up.visible {
@@ -94,480 +105,308 @@
94
  transform: translateY(0);
95
  }
96
 
97
- @keyframes float {
98
- 0% { transform: translateY(0px); }
99
- 50% { transform: translateY(-20px); }
100
- 100% { transform: translateY(0px); }
101
- }
102
-
103
- .floating-orb {
104
- position: fixed;
105
- border-radius: 50%;
106
- filter: blur(80px);
107
- z-index: -1;
108
- animation: float 6s ease-in-out infinite;
109
- }
110
-
111
- /* --- Header --- */
112
- header {
113
- padding: 20px 0;
114
- position: fixed;
115
- width: 100%;
116
- top: 0;
117
- z-index: 1000;
118
- transition: background 0.3s;
119
- }
120
-
121
- header.scrolled {
122
- background: rgba(15, 23, 42, 0.8);
123
- backdrop-filter: blur(10px);
124
- border-bottom: 1px solid var(--glass-border);
125
- }
126
-
127
- .nav-wrapper {
128
- display: flex;
129
- justify-content: space-between;
130
- align-items: center;
131
- }
132
-
133
- .logo {
134
- font-size: 1.5rem;
135
- font-weight: 700;
136
- display: flex;
137
- align-items: center;
138
- gap: 10px;
139
- }
140
-
141
- .built-with {
142
- font-size: 0.9rem;
143
- color: var(--text-muted);
144
- text-decoration: none;
145
- transition: color 0.3s;
146
- font-family: 'Poppins', sans-serif;
147
- }
148
-
149
- .built-with:hover {
150
- color: #00f2fe;
151
- }
152
-
153
- /* --- Hero Section --- */
154
- .hero {
155
- padding: 160px 0 80px;
156
- text-align: center;
157
  }
158
 
159
- .hero h1 {
160
- font-size: 3rem;
161
- margin-bottom: 20px;
162
- line-height: 1.2;
163
  }
164
 
165
- .hero p {
166
- font-size: 1.2rem;
167
- color: var(--text-muted);
168
- max-width: 600px;
169
- margin: 0 auto 50px;
170
  }
171
-
172
- /* --- Selection Cards --- */
173
- .selection-grid {
174
- display: grid;
175
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
176
- gap: 30px;
177
- margin-bottom: 80px;
178
- }
179
-
180
- .select-card {
181
- padding: 40px;
182
- text-align: center;
183
- cursor: pointer;
184
- transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
185
- position: relative;
186
- overflow: hidden;
187
  }
188
-
189
- .select-card:hover {
190
- transform: scale(1.05) translateY(-10px);
191
- background: rgba(255, 255, 255, 0.15);
192
- border-color: rgba(255, 255, 255, 0.4);
193
  }
194
-
195
- .select-card i {
196
- font-size: 4rem;
197
- margin-bottom: 20px;
198
- display: block;
199
- }
200
-
201
- .select-card h3 {
202
- font-size: 1.5rem;
203
- margin-bottom: 10px;
204
- }
205
-
206
- .card-good i { color: var(--accent-good); text-shadow: 0 0 20px rgba(0, 210, 255, 0.5); }
207
- .card-bad i { color: var(--accent-bad); text-shadow: 0 0 20px rgba(255, 107, 107, 0.5); }
208
-
209
- /* --- Form Section --- */
210
- .form-section {
211
- display: none; /* Hidden by default */
212
- max-width: 600px;
213
- margin: 0 auto 100px;
214
- position: relative;
215
- }
216
-
217
- .form-section.active {
218
- display: block;
219
- animation: fadeIn 0.5s ease-out;
220
- }
221
-
222
- @keyframes fadeIn {
223
- from { opacity: 0; transform: translateY(20px); }
224
- to { opacity: 1; transform: translateY(0); }
225
- }
226
-
227
- .form-header {
228
- display: flex;
229
- justify-content: space-between;
230
- align-items: center;
231
- margin-bottom: 30px;
232
- }
233
-
234
- .back-btn {
235
- background: transparent;
236
- color: var(--text-muted);
237
- border: 1px solid var(--glass-border);
238
- padding: 8px 16px;
239
  }
240
 
241
- .back-btn:hover {
 
 
 
242
  color: white;
243
- border-color: white;
244
- }
245
-
246
- .form-group {
247
- margin-bottom: 20px;
248
- }
249
-
250
- .form-group label {
251
- display: block;
252
- margin-bottom: 8px;
253
- font-weight: 500;
254
- }
255
-
256
- .form-control {
257
- width: 100%;
258
- padding: 15px;
259
- background: rgba(0, 0, 0, 0.2);
260
- border: 1px solid var(--glass-border);
261
- border-radius: 12px;
262
- color: white;
263
- font-family: 'Vazirmatn', sans-serif;
264
- font-size: 1rem;
265
  transition: all 0.3s;
266
  }
267
-
268
- .form-control:focus {
269
- border-color: #00f2fe;
270
- box-shadow: 0 0 15px rgba(0, 242, 254, 0.2);
271
- background: rgba(0, 0, 0, 0.4);
272
- }
273
-
274
- .submit-btn {
275
- width: 100%;
276
- background: var(--primary-gradient);
277
- color: white;
278
- font-size: 1.1rem;
279
- padding: 15px;
280
- margin-top: 10px;
281
- }
282
-
283
- .submit-btn:hover {
284
- box-shadow: 0 0 20px rgba(118, 75, 162, 0.6);
285
- }
286
-
287
- /* --- Success Message --- */
288
- .success-message {
289
- display: none;
290
- text-align: center;
291
- padding: 40px;
292
- }
293
-
294
- .success-icon {
295
- font-size: 5rem;
296
- color: #00f2fe;
297
- margin-bottom: 20px;
298
- animation: scaleIn 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
299
- }
300
-
301
- @keyframes scaleIn {
302
- from { transform: scale(0); }
303
- to { transform: scale(1); }
304
- }
305
-
306
- /* --- How It Works --- */
307
- .how-it-works {
308
- padding: 80px 0;
309
- text-align: center;
310
- }
311
-
312
- .steps-container {
313
- display: flex;
314
- justify-content: center;
315
- flex-wrap: wrap;
316
- gap: 40px;
317
- margin-top: 50px;
318
- }
319
-
320
- .step-item {
321
- flex: 1;
322
- min-width: 250px;
323
- max-width: 300px;
324
  }
325
 
326
- .step-icon-box {
327
- width: 80px;
328
- height: 80px;
329
- margin: 0 auto 20px;
330
- background: rgba(255, 255, 255, 0.05);
331
- border-radius: 50%;
332
- display: flex;
333
- align-items: center;
334
- justify-content: center;
335
- font-size: 2rem;
336
- border: 1px solid var(--glass-border);
337
  position: relative;
 
338
  }
339
-
340
- .step-number {
341
  position: absolute;
342
- top: -5px;
343
- right: -5px;
344
- width: 25px;
345
- height: 25px;
346
- background: var(--primary-gradient);
347
- border-radius: 50%;
348
- font-size: 0.8rem;
349
- display: flex;
350
- align-items: center;
351
- justify-content: center;
352
- font-family: 'Poppins', sans-serif;
353
- }
354
-
355
- /* --- Footer --- */
356
- footer {
357
- border-top: 1px solid var(--glass-border);
358
- padding: 40px 0;
359
- margin-top: 60px;
360
- background: rgba(0, 0, 0, 0.2);
361
- }
362
-
363
- .footer-content {
364
- display: flex;
365
- justify-content: space-between;
366
- align-items: center;
367
- flex-wrap: wrap;
368
- gap: 20px;
369
- }
370
-
371
- .footer-links a {
372
- color: var(--text-muted);
373
- text-decoration: none;
374
- margin-right: 20px;
375
- transition: color 0.3s;
376
- }
377
-
378
- .footer-links a:hover {
379
- color: white;
380
  }
381
-
382
- /* --- Responsive --- */
383
- @media (max-width: 768px) {
384
- .hero h1 { font-size: 2rem; }
385
- .select-card { padding: 30px 20px; }
386
- .footer-content { flex-direction: column; text-align: center; }
387
- .footer-links a { margin: 0 10px; }
388
  }
389
  </style>
390
  </head>
391
- <body>
392
 
393
  <!-- Background Elements -->
394
- <div class="floating-orb" style="width: 300px; height: 300px; background: #764ba2; top: 10%; left: -100px;"></div>
395
- <div class="floating-orb" style="width: 400px; height: 400px; background: #4facfe; bottom: 10%; right: -150px; animation-delay: 2s;"></div>
396
-
397
- <!-- Header -->
398
- <header id="main-header">
399
- <div class="container nav-wrapper">
400
- <div class="logo">
401
- <i class="ri-scent-line" style="color: #00f2fe;"></i>
402
- <span>اسپری محترمانه</span>
 
 
 
 
 
 
 
 
 
 
 
 
403
  </div>
404
- <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="built-with">
405
- Built with anycoder <i class="ri-external-link-line"></i>
406
- </a>
407
  </div>
408
- </header>
409
 
410
  <!-- Main Content -->
411
- <main>
 
412
  <!-- Hero Section -->
413
- <section class="hero container">
414
- <h1 class="fade-in-up">
415
- بدون شرم، بازخورد بده.<br>
416
- <span class="gradient-text">ناشناس، محترمانه و رایگان.</span>
417
  </h1>
418
- <p class="fade-in-up" style="transition-delay: 0.2s;">
419
- آیا می‌خواهید به کسی بگویید که بوی خوبی می‌دهد یا از بوی بد خبردارش کنید؟
420
- ابزار ما به شما کمک می‌کند بدون رو در روی شدن، پیامتان را ارسال کنید.
421
  </p>
422
-
423
- <!-- Selection Type -->
424
- <div class="selection-grid fade-in-up" style="transition-delay: 0.4s;">
425
- <!-- Good Smell Card -->
426
- <div class="glass-panel select-card card-good" onclick="selectType('good')">
427
- <i class="ri-heart-pulse-line"></i>
428
- <h3>گزارش بوی خوب</h3>
429
- <p>کسی امروز عالی بو می‌کند! به او انرژی مثبت بده.</p>
430
- </div>
431
-
432
- <!-- Bad Smell Card -->
433
- <div class="glass-panel select-card card-bad" onclick="selectType('bad')">
434
- <i class="ri-user-unfollow-line"></i>
435
- <h3>اطلاع‌رسانی بوی بد</h3>
436
- <p>کسی متوجه بوی بد خودش نیست؟ با محترمانه به او بگو.</p>
437
- </div>
438
  </div>
439
  </section>
440
 
441
- <!-- Form Section (Dynamic) -->
442
- <section id="form-section" class="container form-section glass-panel">
443
- <div class="form-header">
444
- <h2 id="form-title">ارسال پیام</h2>
445
- <button class="btn back-btn" onclick="closeForm()">
446
- <i class="ri-arrow-right-line"></i> بازگشت
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
447
  </button>
448
  </div>
 
449
 
450
- <form id="feedback-form" onsubmit="handleSubmit(event)">
451
- <div class="form-group">
452
- <label for="recipient">ایمیل یا شماره موبایل دریافت‌کننده</label>
453
- <input type="text" id="recipient" class="form-control" placeholder="مثال: example@gmail.com" required>
454
- </div>
 
455
 
456
- <div class="form-group">
457
- <label for="smell-type">نوع بو</label>
458
- <select id="smell-type" class="form-control" required>
459
- <option value="" disabled selected>انتخاب کنید...</option>
460
- <!-- Options populated by JS -->
461
- </select>
462
- </div>
463
 
464
- <div class="form-group">
465
- <label for="message">پیام اختصاصی (اختیاری)</label>
466
- <textarea id="message" class="form-control" rows="3" placeholder="چیزی اضافه کن..."></textarea>
467
- </div>
 
 
468
 
469
- <button type="submit" class="btn submit-btn" id="submit-btn">
470
- <span>ارسال ناشناس</span> <i class="ri-send-plane-fill"></i>
471
- </button>
472
- </form>
473
-
474
- <!-- Success Message -->
475
- <div id="success-message" class="success-message">
476
- <i class="ri-checkbox-circle-fill success-icon"></i>
477
- <h3>پیام با موفقیت ارسال شد!</h3>
478
- <p>شما یک دوست خوب هستید. بازخورد ناشناس شما به زودی تحویل داده می‌شود.</p>
479
- <button class="btn back-btn" onclick="closeForm()" style="margin-top: 20px;">بستن</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
  </div>
481
  </section>
482
 
483
- <!-- How It Works -->
484
- <section class="how-it-works container fade-in-up">
485
- <h2>چگونه کار می‌کند؟</h2>
486
- <div class="steps-container">
487
- <div class="step-item">
488
- <div class="step-icon-box">
489
- <span class="step-number">1</span>
490
- <i class="ri-cursor-line"></i>
491
- </div>
492
- <h4>انتخاب کنید</h4>
493
- <p>انتخاب کنید که می‌خواهید بوی خوب را تحسین کنید یا بوی بد را اطلاع دهید.</p>
494
  </div>
495
- <div class="step-item">
496
- <div class="step-icon-box">
497
- <span class="step-number">2</span>
498
- <i class="ri-edit-line"></i>
499
- </div>
500
- <h4>جزئیات را بنویسید</h4>
501
- <p>اطلاعات تماس طرف مقابل و نوع بو را وارد کنید.</p>
502
  </div>
503
- <div class="step-item">
504
- <div class="step-icon-box">
505
- <span class="step-number">3</span>
506
- <i class="ri-send-plane-2-line"></i>
507
- </div>
508
- <h4>ارسال کنید</h4>
509
- <p>ما پیام شما را به صورت ناشناس و محترمانه برای او ارسال می‌کنیم.</p>
510
  </div>
511
  </div>
512
  </section>
 
513
  </main>
514
 
515
  <!-- Footer -->
516
- <footer>
517
- <div class="container footer-content">
518
- <div class="logo">
519
- <i class="ri-scent-line"></i>
520
- <span>اسپری محترمانه</span>
521
- </div>
522
- <div class="footer-links">
523
- <a href="#">شرایط استفاده</a>
524
- <a href="#">حریم خصوصی</a>
525
- <a href="#">پشتیبانی</a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
526
  </div>
527
- <div style="font-size: 0.8rem; color: var(--text-muted);">
528
- © 2023 تمامی حقوق محفوظ است.
529
  </div>
530
  </div>
531
  </footer>
532
 
533
- <!-- JavaScript -->
534
  <script>
535
- // Configuration data
536
- const smellOptions = {
 
 
 
537
  good: [
538
- "عطر خوشبو",
539
- "ادکلن گران‌قیمت",
540
- "شامپوی مو",
541
- "خوشبویی طبیعی",
542
- "بوی تازه لباسشویی"
 
 
543
  ],
544
  bad: [
545
- "بوی بد دهان",
546
- "تعریق شدید",
547
- "بوی پا",
548
- "بوی سیگار",
549
- "بوی نامطبوع بدن",
550
- "نیاز به دوش گرفتن"
 
551
  ]
552
  };
553
 
554
- const formTitle = {
555
- good: "✨ تحسین بوی خوب",
556
- bad: "⚠️ اطلاع‌رسانی محترمانه"
557
- };
558
-
559
- // DOM Elements
560
- const formSection = document.getElementById('form-section');
561
- const formTitleEl = document.getElementById('form-title');
562
- const smellTypeSelect = document.getElementById('smell-type');
563
- const feedbackForm = document.getElementById('feedback-form');
564
- const successMessage = document.getElementById('success-message');
565
- const submitBtn = document.getElementById('submit-btn');
566
- const header = document.getElementById('main-header');
567
 
568
  // Scroll Animation Observer
569
  const observerOptions = {
570
- threshold: 0.1
 
571
  };
572
 
573
  const observer = new IntersectionObserver((entries) => {
@@ -580,82 +419,130 @@
580
 
581
  document.querySelectorAll('.fade-in-up').forEach(el => observer.observe(el));
582
 
583
- // Scroll Effect for Header
584
- window.addEventListener('scroll', () => {
585
- if (window.scrollY > 50) {
586
- header.classList.add('scrolled');
587
- } else {
588
- header.classList.remove('scrolled');
589
- }
590
- });
591
-
592
  // Functions
 
 
 
 
593
  function selectType(type) {
594
- // Update form content based on type
595
- formTitleEl.textContent = formTitle[type];
 
 
 
596
 
597
- // Clear and populate dropdown
598
- smellTypeSelect.innerHTML = '<option value="" disabled selected>انتخاب کنید...</option>';
599
- smellOptions[type].forEach(option => {
600
- const opt = document.createElement('option');
601
- opt.value = option;
602
- opt.textContent = option;
603
- smellTypeSelect.appendChild(opt);
 
604
  });
605
 
606
- // Styling based on type
607
  if (type === 'good') {
608
- formSection.style.borderColor = 'rgba(0, 210, 255, 0.3)';
 
 
 
609
  } else {
610
- formSection.style.borderColor = 'rgba(255, 107, 107, 0.3)';
 
 
 
611
  }
612
 
613
- // Show Form
614
- formSection.classList.add('active');
 
 
615
 
616
- // Scroll to form
617
- setTimeout(() => {
618
- formSection.scrollIntoView({ behavior: 'smooth', block: 'center' });
619
- }, 100);
620
  }
621
 
622
  function closeForm() {
623
- formSection.classList.remove('active');
624
- feedbackForm.style.display = 'block';
625
- successMessage.style.display = 'none';
626
- feedbackForm.reset();
627
-
628
- // Scroll back to selection
629
- document.querySelector('.selection-grid').scrollIntoView({ behavior: 'smooth' });
630
  }
631
 
632
- function handleSubmit(e) {
633
- e.preventDefault();
 
 
 
 
 
 
 
634
 
635
- // Simple Validation
636
- const recipient = document.getElementById('recipient').value;
637
- const smell = document.getElementById('smell-type').value;
 
 
 
638
 
639
- if (!recipient || !smell) {
640
- alert("لطفاً تمام فیلدهای ضروری را پر کنید.");
 
 
 
 
 
 
 
 
 
 
 
641
  return;
 
 
 
642
  }
643
 
644
- // Simulate Loading
645
  const originalBtnContent = submitBtn.innerHTML;
646
  submitBtn.disabled = true;
647
- submitBtn.innerHTML = '<i class="ri-loader-4-line ri-spin"></i> در حال ارسال...';
 
648
 
649
- // Simulate API Call delay
650
  setTimeout(() => {
651
- feedbackForm.style.display = 'none';
652
- successMessage.style.display = 'block';
 
653
 
654
- // Reset Button
655
  submitBtn.disabled = false;
656
  submitBtn.innerHTML = originalBtnContent;
 
 
 
657
  }, 1500);
658
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
659
  </script>
660
  </body>
661
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>ScentFeedback - بازخورد ناشناس</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
9
+ <!-- Lucide Icons -->
10
+ <script src="https://unpkg.com/lucide@latest"></script>
 
 
 
 
 
11
  <style>
12
+ /* Custom CSS for Glassmorphism and Animations */
13
+ body {
14
+ font-family: 'Vazirmatn', sans-serif;
15
+ background-color: #0f172a;
16
+ overflow-x: hidden;
17
+ }
18
+
19
+ /* Animated Gradient Background */
20
+ .gradient-bg {
21
+ position: fixed;
22
+ top: 0;
23
+ left: 0;
24
+ width: 100%;
25
+ height: 100%;
26
+ z-index: -1;
27
+ background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
28
+ background-size: 400% 400%;
29
+ animation: gradient 15s ease infinite;
30
+ opacity: 0.15;
31
+ }
32
+
33
+ .gradient-bg::before {
34
+ content: '';
35
+ position: absolute;
36
+ top: -50%;
37
+ left: -50%;
38
+ width: 200%;
39
+ height: 200%;
40
+ background: radial-gradient(circle, rgba(99,102,241,0.4) 0%, rgba(168,85,247,0.2) 25%, transparent 70%);
41
+ animation: float 20s infinite ease-in-out;
42
  }
43
 
44
+ @keyframes gradient {
45
+ 0% { background-position: 0% 50%; }
46
+ 50% { background-position: 100% 50%; }
47
+ 100% { background-position: 0% 50%; }
 
48
  }
49
 
50
+ @keyframes float {
51
+ 0%, 100% { transform: translate(0, 0) rotate(0deg); }
52
+ 33% { transform: translate(30px, -50px) rotate(10deg); }
53
+ 66% { transform: translate(-20px, 20px) rotate(-5deg); }
 
 
 
 
 
 
54
  }
55
 
56
+ /* Glassmorphism Classes */
57
+ .glass {
58
+ background: rgba(255, 255, 255, 0.05);
59
+ backdrop-filter: blur(16px);
60
+ -webkit-backdrop-filter: blur(16px);
61
+ border: 1px solid rgba(255, 255, 255, 0.1);
62
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
63
  }
64
 
65
+ .glass-strong {
66
+ background: rgba(255, 255, 255, 0.1);
67
+ backdrop-filter: blur(20px);
68
+ -webkit-backdrop-filter: blur(20px);
69
+ border: 1px solid rgba(255, 255, 255, 0.2);
70
+ box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
 
71
  }
72
 
73
+ .glass-card {
74
+ background: linear-gradient(135deg, rgba(255,255,255,0.1), rgba(255,255,255,0.05));
75
+ backdrop-filter: blur(20px);
76
+ border: 1px solid rgba(255,255,255,0.18);
77
+ box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.2);
 
 
78
  transition: all 0.3s ease;
 
 
 
 
79
  }
80
 
81
+ .glass-card:hover {
82
+ transform: translateY(-5px) scale(1.02);
83
+ background: linear-gradient(135deg, rgba(255,255,255,0.15), rgba(255,255,255,0.1));
84
+ box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.4);
85
+ border-color: rgba(255,255,255,0.3);
86
+ }
87
+
88
+ /* Text Gradients */
89
+ .text-gradient {
90
+ background: linear-gradient(to right, #818cf8, #c084fc, #f472b6);
91
  -webkit-background-clip: text;
92
  -webkit-text-fill-color: transparent;
93
+ background-clip: text;
94
  }
95
 
96
+ /* Animations */
97
  .fade-in-up {
98
  opacity: 0;
99
  transform: translateY(30px);
100
+ transition: opacity 0.6s ease-out, transform 0.6s ease-out;
101
  }
102
 
103
  .fade-in-up.visible {
 
105
  transform: translateY(0);
106
  }
107
 
108
+ .slide-in {
109
+ animation: slideIn 0.5s ease-out forwards;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  }
111
 
112
+ @keyframes slideIn {
113
+ from { opacity: 0; transform: translateX(20px); }
114
+ to { opacity: 1; transform: translateX(0); }
 
115
  }
116
 
117
+ /* Custom Scrollbar */
118
+ ::-webkit-scrollbar {
119
+ width: 8px;
 
 
120
  }
121
+ ::-webkit-scrollbar-track {
122
+ background: rgba(255,255,255,0.05);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  }
124
+ ::-webkit-scrollbar-thumb {
125
+ background: rgba(255,255,255,0.2);
126
+ border-radius: 4px;
 
 
127
  }
128
+ ::-webkit-scrollbar-thumb:hover {
129
+ background: rgba(255,255,255,0.3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
131
 
132
+ /* Input Styles */
133
+ .glass-input {
134
+ background: rgba(255,255,255,0.05);
135
+ border: 1px solid rgba(255,255,255,0.1);
136
  color: white;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  transition: all 0.3s;
138
  }
139
+ .glass-input:focus {
140
+ background: rgba(255,255,255,0.1);
141
+ border-color: rgba(167, 139, 250, 0.5);
142
+ outline: none;
143
+ box-shadow: 0 0 0 3px rgba(167, 139, 250, 0.2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
 
146
+ /* Button Shine Effect */
147
+ .btn-shine {
 
 
 
 
 
 
 
 
 
148
  position: relative;
149
+ overflow: hidden;
150
  }
151
+ .btn-shine::after {
152
+ content: '';
153
  position: absolute;
154
+ top: -50%;
155
+ left: -50%;
156
+ width: 200%;
157
+ height: 200%;
158
+ background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.3) 50%, rgba(255,255,255,0) 100%);
159
+ transform: rotate(30deg);
160
+ transition: all 0.6s;
161
+ opacity: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  }
163
+ .btn-shine:hover::after {
164
+ opacity: 1;
165
+ left: 100%;
 
 
 
 
166
  }
167
  </style>
168
  </head>
169
+ <body class="text-white min-h-screen relative">
170
 
171
  <!-- Background Elements -->
172
+ <div class="gradient-bg"></div>
173
+ <div class="fixed top-20 right-20 w-72 h-72 bg-purple-500 rounded-full mix-blend-multiply filter blur-3xl opacity-20 animate-blob"></div>
174
+ <div class="fixed bottom-20 left-20 w-72 h-72 bg-blue-500 rounded-full mix-blend-multiply filter blur-3xl opacity-20 animate-blob animation-delay-2000"></div>
175
+ <div class="fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-indigo-500 rounded-full mix-blend-multiply filter blur-3xl opacity-20 animate-blob animation-delay-4000"></div>
176
+
177
+ <!-- Navigation -->
178
+ <nav class="fixed w-full z-50 glass-strong border-b border-white/10">
179
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
180
+ <div class="flex items-center justify-between h-16">
181
+ <div class="flex items-center gap-2">
182
+ <i data-lucide="wind" class="w-8 h-8 text-indigo-400"></i>
183
+ <span class="font-bold text-xl tracking-tight">ScentFlow</span>
184
+ </div>
185
+ <div class="hidden md:block">
186
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="text-xs text-indigo-300 hover:text-white transition-colors border border-indigo-500/30 rounded-full px-3 py-1 glass hover:bg-indigo-500/20">
187
+ Built with anycoder
188
+ </a>
189
+ </div>
190
+ <div class="md:hidden text-xs text-indigo-300 border border-indigo-500/30 rounded-full px-2 py-1">
191
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank">Built with anycoder</a>
192
+ </div>
193
  </div>
 
 
 
194
  </div>
195
+ </nav>
196
 
197
  <!-- Main Content -->
198
+ <main class="pt-24 pb-12 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto">
199
+
200
  <!-- Hero Section -->
201
+ <section class="text-center mb-20 fade-in-up">
202
+ <h1 class="text-5xl md:text-7xl font-black mb-6 leading-tight">
203
+ بازخورد ناشناس،<br>
204
+ <span class="text-gradient">محترمانه و سریع</span>
205
  </h1>
206
+ <p class="text-lg md:text-xl text-gray-300 max-w-2xl mx-auto mb-8 leading-relaxed">
207
+ بوی خوب را تشویق کنید، بوی بد را بدون دردسر و به صورت کاملاً ناشناس گزارش دهید.
208
+ راهی جدید برای بهبود فضای مشترک.
209
  </p>
210
+ <div class="flex justify-center gap-4">
211
+ <button onclick="scrollToSection('selection')" class="glass-card px-8 py-4 rounded-full font-bold text-lg btn-shine group">
212
+ شروع کنید
213
+ <i data-lucide="arrow-down" class="inline-block mr-2 w-5 h-5 group-hover:translate-y-1 transition-transform"></i>
214
+ </button>
 
 
 
 
 
 
 
 
 
 
 
215
  </div>
216
  </section>
217
 
218
+ <!-- Selection Section -->
219
+ <section id="selection" class="mb-20 fade-in-up">
220
+ <h2 class="text-3xl font-bold text-center mb-12 text-white/90">نوع بازخورد خود را انتخاب کنید</h2>
221
+ <div class="grid md:grid-cols-2 gap-8 max-w-4xl mx-auto">
222
+ <!-- Good Scent Card -->
223
+ <button onclick="selectType('good')" class="glass-card p-8 rounded-3xl text-center group relative overflow-hidden">
224
+ <div class="absolute inset-0 bg-gradient-to-br from-emerald-500/20 to-teal-500/20 opacity-0 group-hover:opacity-100 transition-opacity duration-500"></div>
225
+ <div class="relative z-10">
226
+ <div class="w-20 h-20 mx-auto mb-6 rounded-2xl bg-gradient-to-br from-emerald-400/30 to-teal-400/30 flex items-center justify-center border border-emerald-400/30 group-hover:scale-110 transition-transform duration-300">
227
+ <i data-lucide="sparkles" class="w-10 h-10 text-emerald-300"></i>
228
+ </div>
229
+ <h3 class="text-2xl font-bold mb-3 text-emerald-100">گزارش بوی خوب</h3>
230
+ <p class="text-gray-400 text-sm leading-relaxed">
231
+ عطر، غذا، یا هر بو خوشایند دیگری را تشویق کنید. لبخند را به لب کسی بیاورید.
232
+ </p>
233
+ </div>
234
+ </button>
235
+
236
+ <!-- Bad Scent Card -->
237
+ <button onclick="selectType('bad')" class="glass-card p-8 rounded-3xl text-center group relative overflow-hidden">
238
+ <div class="absolute inset-0 bg-gradient-to-br from-rose-500/20 to-orange-500/20 opacity-0 group-hover:opacity-100 transition-opacity duration-500"></div>
239
+ <div class="relative z-10">
240
+ <div class="w-20 h-20 mx-auto mb-6 rounded-2xl bg-gradient-to-br from-rose-400/30 to-orange-400/30 flex items-center justify-center border border-rose-400/30 group-hover:scale-110 transition-transform duration-300">
241
+ <i data-lucide="alert-triangle" class="w-10 h-10 text-rose-300"></i>
242
+ </div>
243
+ <h3 class="text-2xl font-bold mb-3 text-rose-100">اطلاع‌رسانی بوی بد</h3>
244
+ <p class="text-gray-400 text-sm leading-relaxed">
245
+ بدون بی‌احترامی و به صورت محرمانه، در مورد بوهای نامطبوع اطلاع‌رسانی کنید.
246
+ </p>
247
+ </div>
248
  </button>
249
  </div>
250
+ </section>
251
 
252
+ <!-- Form Section (Hidden by default) -->
253
+ <section id="formSection" class="hidden max-w-2xl mx-auto mb-20 fade-in-up">
254
+ <div class="glass-strong rounded-3xl p-8 md:p-12 border border-white/20 shadow-2xl relative overflow-hidden">
255
+ <!-- Decorative gradient -->
256
+ <div class="absolute -top-24 -right-24 w-48 h-48 bg-purple-500/30 rounded-full blur-3xl"></div>
257
+ <div class="absolute -bottom-24 -left-24 w-48 h-48 bg-blue-500/30 rounded-full blur-3xl"></div>
258
 
259
+ <button onclick="closeForm()" class="absolute top-4 left-4 p-2 rounded-full hover:bg-white/10 transition-colors">
260
+ <i data-lucide="x" class="w-6 h-6 text-gray-400"></i>
261
+ </button>
 
 
 
 
262
 
263
+ <div class="relative z-10">
264
+ <div class="text-center mb-8">
265
+ <div id="formIcon" class="w-16 h-16 mx-auto rounded-2xl flex items-center justify-center mb-4"></div>
266
+ <h2 id="formTitle" class="text-2xl font-bold mb-2"></h2>
267
+ <p class="text-gray-400 text-sm">اطلاعات زیر را پر کنید. گیرنده هویت شما را نخواهد دانست.</p>
268
+ </div>
269
 
270
+ <form id="feedbackForm" onsubmit="handleSubmit(event)" class="space-y-6">
271
+ <div>
272
+ <label class="block text-sm font-medium text-gray-300 mb-2">ایمیل یا شماره موبایل گیرنده</label>
273
+ <input type="text" id="recipient" required placeholder="example@email.com یا 09xxxxxxxxx"
274
+ class="w-full px-4 py-3 rounded-xl glass-input text-right placeholder-gray-500">
275
+ <p id="recipientError" class="text-rose-400 text-xs mt-1 hidden">لطفاً یک ایمیل یا شماره موبایل معتبر وارد کنید.</p>
276
+ </div>
277
+
278
+ <div>
279
+ <label class="block text-sm font-medium text-gray-300 mb-2">نوع بو</label>
280
+ <select id="scentType" onchange="handleScentChange()" class="w-full px-4 py-3 rounded-xl glass-input text-right cursor-pointer">
281
+ <!-- Options populated by JS -->
282
+ </select>
283
+ </div>
284
+
285
+ <div id="customScentContainer" class="hidden">
286
+ <label class="block text-sm font-medium text-gray-300 mb-2">توضیح بو (اختیاری)</label>
287
+ <input type="text" id="customScent" placeholder="مثال: عطر گل یاس..."
288
+ class="w-full px-4 py-3 rounded-xl glass-input text-right placeholder-gray-500">
289
+ </div>
290
+
291
+ <div>
292
+ <label class="block text-sm font-medium text-gray-300 mb-2">پیام تکمیلی (اختیاری)</label>
293
+ <textarea id="message" rows="3" placeholder="پیام کوتاه خود را اینجا بنویسید..."
294
+ class="w-full px-4 py-3 rounded-xl glass-input text-right placeholder-gray-500 resize-none"></textarea>
295
+ </div>
296
+
297
+ <button type="submit" id="submitBtn" class="w-full py-4 rounded-xl font-bold text-lg bg-gradient-to-r from-indigo-500 to-purple-600 hover:from-indigo-600 hover:to-purple-700 transition-all transform hover:scale-[1.02] active:scale-[0.98] shadow-lg shadow-indigo-500/30 flex items-center justify-center gap-2">
298
+ <span>ارسال ناشناس</span>
299
+ <i data-lucide="send" class="w-5 h-5"></i>
300
+ </button>
301
+ </form>
302
+
303
+ <!-- Success Message -->
304
+ <div id="successMessage" class="hidden text-center py-12">
305
+ <div class="w-20 h-20 mx-auto mb-6 rounded-full bg-emerald-500/20 flex items-center justify-center border border-emerald-400/50 animate-bounce">
306
+ <i data-lucide="check" class="w-10 h-10 text-emerald-400"></i>
307
+ </div>
308
+ <h3 class="text-2xl font-bold text-white mb-3">بازخورد با موفقیت ارسال شد!</h3>
309
+ <p class="text-gray-400 mb-6">از اینکه به بهبود فضای مشترک کمک کردید، سپاسگزاریم.</p>
310
+ <button onclick="resetForm()" class="px-6 py-3 rounded-xl glass-card text-sm hover:bg-white/10 transition-colors">
311
+ ارسال بازخورد جدید
312
+ </button>
313
+ </div>
314
+ </div>
315
  </div>
316
  </section>
317
 
318
+ <!-- How it Works -->
319
+ <section class="mb-20 fade-in-up">
320
+ <h2 class="text-3xl font-bold text-center mb-12 text-white/90">چگونه کار می‌کند؟</h2>
321
+ <div class="grid md:grid-cols-3 gap-6">
322
+ <div class="glass p-6 rounded-2xl text-center group hover:border-indigo-400/50 transition-colors">
323
+ <div class="w-12 h-12 mx-auto mb-4 rounded-full bg-indigo-500/20 flex items-center justify-center text-indigo-300 font-bold text-xl border border-indigo-500/30">۱</div>
324
+ <h3 class="font-bold mb-2 text-lg">انتخاب نوع</h3>
325
+ <p class="text-sm text-gray-400">بوی خوب یا بد را انتخاب کنید. رابط کاربری ساده ما راهنمای شماست.</p>
 
 
 
326
  </div>
327
+ <div class="glass p-6 rounded-2xl text-center group hover:border-purple-400/50 transition-colors">
328
+ <div class="w-12 h-12 mx-auto mb-4 rounded-full bg-purple-500/20 flex items-center justify-center text-purple-300 font-bold text-xl border border-purple-500/30">۲</div>
329
+ <h3 class="font-bold mb-2 text-lg">اطلاعات گیرنده</h3>
330
+ <p class="text-sm text-gray-400">ایمیل یا شماره موبایل فرد را وارد کنید. هویت شما کاملاً مخفی است.</p>
 
 
 
331
  </div>
332
+ <div class="glass p-6 rounded-2xl text-center group hover:border-pink-400/50 transition-colors">
333
+ <div class="w-12 h-12 mx-auto mb-4 rounded-full bg-pink-500/20 flex items-center justify-center text-pink-300 font-bold text-xl border border-pink-500/30">۳</div>
334
+ <h3 class="font-bold mb-2 text-lg">ارسال ناشناس</h3>
335
+ <p class="text-sm text-gray-400">با یک کلیک بازخورد را بفرستید. پیام شما به صورت رمزنگاری شده ارسال می‌شود.</p>
 
 
 
336
  </div>
337
  </div>
338
  </section>
339
+
340
  </main>
341
 
342
  <!-- Footer -->
343
+ <footer class="glass-strong border-t border-white/10 mt-20">
344
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
345
+ <div class="grid md:grid-cols-4 gap-8">
346
+ <div class="col-span-2">
347
+ <div class="flex items-center gap-2 mb-4">
348
+ <i data-lucide="wind" class="w-6 h-6 text-indigo-400"></i>
349
+ <span class="font-bold text-lg">ScentFlow</span>
350
+ </div>
351
+ <p class="text-gray-400 text-sm leading-relaxed max-w-sm">
352
+ پلتفرم ارسال بازخورد ناشناس با رویکردی محترمانه و مدرن. ما اعتقاد داریم ارتباط سازنده باید بدون ترس باشد.
353
+ </p>
354
+ </div>
355
+ <div>
356
+ <h4 class="font-bold mb-4 text-white/90">لینک‌های سریع</h4>
357
+ <ul class="space-y-2 text-sm text-gray-400">
358
+ <li><a href="#" class="hover:text-indigo-400 transition-colors">صفحه اصلی</a></li>
359
+ <li><a href="#" class="hover:text-indigo-400 transition-colors">چگونه کار می‌کند</a></li>
360
+ <li><a href="#" class="hover:text-indigo-400 transition-colors">سوالات متداول</a></li>
361
+ </ul>
362
+ </div>
363
+ <div>
364
+ <h4 class="font-bold mb-4 text-white/90">قانونی</h4>
365
+ <ul class="space-y-2 text-sm text-gray-400">
366
+ <li><a href="#" class="hover:text-indigo-400 transition-colors">شرایط استفاده</a></li>
367
+ <li><a href="#" class="hover:text-indigo-400 transition-colors">حریم خصوصی</a></li>
368
+ <li><a href="#" class="hover:text-indigo-400 transition-colors">پشتیبانی</a></li>
369
+ </ul>
370
+ </div>
371
  </div>
372
+ <div class="border-t border-white/10 mt-8 pt-8 text-center text-sm text-gray-500">
373
+ <p>© ۲۰۲۴ ScentFlow. تمامی حقوق محفوظ است.</p>
374
  </div>
375
  </div>
376
  </footer>
377
 
 
378
  <script>
379
+ // Initialize Lucide Icons
380
+ lucide.createIcons();
381
+
382
+ // Data for scent types
383
+ const scentOptions = {
384
  good: [
385
+ { value: '', label: 'انتخاب کنید...' },
386
+ { value: 'perfume', label: 'عطر و ادکلن' },
387
+ { value: 'flowers', label: 'گل و گیاه' },
388
+ { value: 'food', label: 'غذا و خوراکی' },
389
+ { value: 'clean', label: 'بو تمیز و پاکیزگی' },
390
+ { value: 'coffee', label: 'قهوه' },
391
+ { value: 'other', label: 'سایر (توضیح دهید)' }
392
  ],
393
  bad: [
394
+ { value: '', label: 'انتخاب کنید...' },
395
+ { value: 'sweat', label: 'عرق و بدن' },
396
+ { value: 'food', label: 'باقی‌مانده غذا' },
397
+ { value: 'smoke', label: 'دود سیگار' },
398
+ { value: 'chemical', label: 'مواد شیمیایی' },
399
+ { value: 'trash', label: 'زباله' },
400
+ { value: 'other', label: 'سایر (توضیح دهید)' }
401
  ]
402
  };
403
 
404
+ let currentType = null;
 
 
 
 
 
 
 
 
 
 
 
 
405
 
406
  // Scroll Animation Observer
407
  const observerOptions = {
408
+ threshold: 0.1,
409
+ rootMargin: '0px 0px -50px 0px'
410
  };
411
 
412
  const observer = new IntersectionObserver((entries) => {
 
419
 
420
  document.querySelectorAll('.fade-in-up').forEach(el => observer.observe(el));
421
 
 
 
 
 
 
 
 
 
 
422
  // Functions
423
+ function scrollToSection(id) {
424
+ document.getElementById(id).scrollIntoView({ behavior: 'smooth' });
425
+ }
426
+
427
  function selectType(type) {
428
+ currentType = type;
429
+ const formSection = document.getElementById('formSection');
430
+ const formTitle = document.getElementById('formTitle');
431
+ const formIcon = document.getElementById('formIcon');
432
+ const scentSelect = document.getElementById('scentType');
433
 
434
+ // Populate select options
435
+ scentSelect.innerHTML = '';
436
+ scentOptions[type].forEach(opt => {
437
+ const option = document.createElement('option');
438
+ option.value = opt.value;
439
+ option.textContent = opt.label;
440
+ option.className = 'bg-slate-800 text-white';
441
+ scentSelect.appendChild(option);
442
  });
443
 
444
+ // Set header and icon based on type
445
  if (type === 'good') {
446
+ formTitle.textContent = 'گزارش بوی خوب';
447
+ formTitle.className = 'text-2xl font-bold mb-2 text-emerald-300';
448
+ formIcon.className = 'w-16 h-16 mx-auto rounded-2xl bg-emerald-500/20 flex items-center justify-center border border-emerald-400/30 mb-4';
449
+ formIcon.innerHTML = '<i data-lucide="sparkles" class="w-8 h-8 text-emerald-400"></i>';
450
  } else {
451
+ formTitle.textContent = 'اطلاع‌رسانی بوی بد';
452
+ formTitle.className = 'text-2xl font-bold mb-2 text-rose-300';
453
+ formIcon.className = 'w-16 h-16 mx-auto rounded-2xl bg-rose-500/20 flex items-center justify-center border border-rose-400/30 mb-4';
454
+ formIcon.innerHTML = '<i data-lucide="alert-triangle" class="w-8 h-8 text-rose-400"></i>';
455
  }
456
 
457
+ // Show form
458
+ formSection.classList.remove('hidden');
459
+ formSection.classList.add('slide-in');
460
+ scrollToSection('formSection');
461
 
462
+ // Re-init icons for new elements
463
+ lucide.createIcons();
 
 
464
  }
465
 
466
  function closeForm() {
467
+ document.getElementById('formSection').classList.add('hidden');
468
+ document.getElementById('formSection').classList.remove('slide-in');
469
+ currentType = null;
 
 
 
 
470
  }
471
 
472
+ function handleScentChange() {
473
+ const select = document.getElementById('scentType');
474
+ const customContainer = document.getElementById('customScentContainer');
475
+ if (select.value === 'other') {
476
+ customContainer.classList.remove('hidden');
477
+ } else {
478
+ customContainer.classList.add('hidden');
479
+ }
480
+ }
481
 
482
+ function validateInput(value) {
483
+ // Simple validation for email or phone
484
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
485
+ const phoneRegex = /^09[0-9]{9}$/;
486
+ return emailRegex.test(value) || phoneRegex.test(value);
487
+ }
488
 
489
+ function handleSubmit(e) {
490
+ e.preventDefault();
491
+
492
+ const recipient = document.getElementById('recipient').value.trim();
493
+ const recipientError = document.getElementById('recipientError');
494
+ const submitBtn = document.getElementById('submitBtn');
495
+ const form = document.getElementById('feedbackForm');
496
+ const successMessage = document.getElementById('successMessage');
497
+
498
+ // Validation
499
+ if (!validateInput(recipient)) {
500
+ recipientError.classList.remove('hidden');
501
+ document.getElementById('recipient').classList.add('border-rose-500');
502
  return;
503
+ } else {
504
+ recipientError.classList.add('hidden');
505
+ document.getElementById('recipient').classList.remove('border-rose-500');
506
  }
507
 
508
+ // Loading state
509
  const originalBtnContent = submitBtn.innerHTML;
510
  submitBtn.disabled = true;
511
+ submitBtn.innerHTML = '<div class="w-6 h-6 border-2 border-white/30 border-t-white rounded-full animate-spin"></div>';
512
+ submitBtn.classList.add('opacity-75', 'cursor-not-allowed');
513
 
514
+ // Simulate API call
515
  setTimeout(() => {
516
+ form.style.display = 'none';
517
+ successMessage.classList.remove('hidden');
518
+ successMessage.classList.add('slide-in');
519
 
520
+ // Reset button
521
  submitBtn.disabled = false;
522
  submitBtn.innerHTML = originalBtnContent;
523
+ submitBtn.classList.remove('opacity-75', 'cursor-not-allowed');
524
+
525
+ lucide.createIcons();
526
  }, 1500);
527
  }
528
+
529
+ function resetForm() {
530
+ document.getElementById('feedbackForm').reset();
531
+ document.getElementById('feedbackForm').style.display = 'block';
532
+ document.getElementById('successMessage').classList.add('hidden');
533
+ document.getElementById('customScentContainer').classList.add('hidden');
534
+ closeForm();
535
+ scrollToSection('selection');
536
+ }
537
+
538
+ // Add input validation listener
539
+ document.getElementById('recipient').addEventListener('input', function(e) {
540
+ const error = document.getElementById('recipientError');
541
+ if (validateInput(e.target.value.trim())) {
542
+ error.classList.add('hidden');
543
+ e.target.classList.remove('border-rose-500');
544
+ }
545
+ });
546
  </script>
547
  </body>
548
  </html>