samirerty commited on
Commit
6877882
·
verified ·
1 Parent(s): 5abd225

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +292 -421
index.html CHANGED
@@ -3,24 +3,20 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>چت روم شیشه‌ای | iOS Glassmorphism</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
10
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
11
-
12
  <style>
13
  :root {
14
- --glass-bg: rgba(255, 255, 255, 0.15);
15
- --glass-border: rgba(255, 255, 255, 0.25);
16
- --glass-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15);
17
  --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
18
  --secondary-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
19
  --accent-gradient: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
20
- --text-primary: #1a1a2e;
21
- --text-secondary: #4a4a6a;
22
- --white: #ffffff;
23
- --blur-amount: blur(20px);
24
  }
25
 
26
  * {
@@ -31,28 +27,22 @@
31
 
32
  body {
33
  font-family: 'Vazirmatn', sans-serif;
34
- background: linear-gradient(135deg, #667eea 0%, #764ba2 25%, #f093fb 50%, #f5576c 75%, #4facfe 100%);
35
- background-size: 400% 400%;
36
- animation: gradientShift 15s ease infinite;
37
  min-height: 100vh;
 
 
38
  overflow-x: hidden;
39
  position: relative;
40
  }
41
 
42
- @keyframes gradientShift {
43
- 0% { background-position: 0% 50%; }
44
- 50% { background-position: 100% 50%; }
45
- 100% { background-position: 0% 50%; }
46
- }
47
-
48
- /* Floating Background Elements */
49
  .bg-shapes {
50
  position: fixed;
 
 
51
  width: 100%;
52
  height: 100%;
53
  overflow: hidden;
54
- z-index: 0;
55
- pointer-events: none;
56
  }
57
 
58
  .shape {
@@ -65,31 +55,29 @@
65
  .shape-1 {
66
  width: 400px;
67
  height: 400px;
68
- background: rgba(255, 255, 255, 0.4);
69
- border-radius: 50%;
70
- top: -10%;
71
- right: -10%;
72
  animation-delay: 0s;
73
  }
74
 
75
  .shape-2 {
76
  width: 300px;
77
  height: 300px;
78
- background: rgba(255, 255, 255, 0.3);
79
- border-radius: 50%;
80
- bottom: 10%;
81
- left: -5%;
82
- animation-delay: -5s;
83
  }
84
 
85
  .shape-3 {
86
  width: 250px;
87
  height: 250px;
88
- background: rgba(255, 255, 255, 0.35);
89
- border-radius: 50%;
90
- top: 40%;
91
- left: 30%;
92
- animation-delay: -10s;
93
  }
94
 
95
  @keyframes float {
@@ -98,154 +86,122 @@
98
  66% { transform: translate(-20px, 20px) scale(0.9); }
99
  }
100
 
101
- /* Header */
102
  .header {
103
  position: fixed;
104
  top: 0;
105
- width: 100%;
 
106
  padding: 1rem 2rem;
107
- z-index: 1000;
108
- background: rgba(255, 255, 255, 0.1);
109
- backdrop-filter: var(--blur-amount);
110
- -webkit-backdrop-filter: var(--blur-amount);
111
  border-bottom: 1px solid var(--glass-border);
 
112
  display: flex;
113
  justify-content: space-between;
114
  align-items: center;
115
  }
116
 
117
- .brand {
118
- display: flex;
119
- align-items: center;
120
- gap: 0.5rem;
121
- color: var(--white);
122
- font-weight: 700;
123
- font-size: 1.2rem;
124
- text-shadow: 0 2px 4px rgba(0,0,0,0.1);
125
- }
126
-
127
- .brand i {
128
  font-size: 1.5rem;
 
 
 
129
  }
130
 
131
- .built-with {
132
- background: rgba(255, 255, 255, 0.2);
 
133
  padding: 0.5rem 1rem;
134
- border-radius: 50px;
135
- color: var(--white);
136
  text-decoration: none;
137
  font-size: 0.85rem;
138
- font-weight: 500;
139
  transition: all 0.3s ease;
140
- border: 1px solid rgba(255, 255, 255, 0.3);
141
  backdrop-filter: blur(10px);
142
  }
143
 
144
- .built-with:hover {
145
- background: rgba(255, 255, 255, 0.3);
146
  transform: translateY(-2px);
147
- box-shadow: 0 5px 15px rgba(0,0,0,0.1);
148
  }
149
 
150
  /* Main Container */
151
  .container {
152
- position: relative;
153
- z-index: 1;
154
  max-width: 1200px;
155
  margin: 0 auto;
156
  padding: 8rem 2rem 4rem;
157
- display: flex;
158
- flex-direction: column;
159
- align-items: center;
160
- gap: 3rem;
 
 
 
 
161
  }
162
 
163
- /* Hero Section Glass Card */
164
- .hero-glass {
165
  background: var(--glass-bg);
166
- backdrop-filter: var(--blur-amount);
167
- -webkit-backdrop-filter: var(--blur-amount);
168
  border: 1px solid var(--glass-border);
169
  border-radius: 30px;
170
  padding: 3rem;
171
- width: 100%;
172
- max-width: 800px;
173
- box-shadow: var(--glass-shadow);
174
- text-align: center;
175
  position: relative;
176
  overflow: hidden;
177
- transform: translateY(0);
178
- transition: transform 0.3s ease;
179
  }
180
 
181
- .hero-glass::before {
182
  content: '';
183
  position: absolute;
184
  top: -50%;
185
  left: -50%;
186
  width: 200%;
187
  height: 200%;
188
- background: linear-gradient(
189
- 45deg,
190
- transparent 30%,
191
- rgba(255, 255, 255, 0.3) 50%,
192
- transparent 70%
193
- );
194
- transform: rotate(45deg);
195
- transition: all 0.6s;
196
- opacity: 0;
197
- }
198
-
199
- .hero-glass:hover::before {
200
- animation: shimmer 0.6s ease-in-out;
201
  }
202
 
203
  @keyframes shimmer {
204
- 0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); opacity: 0; }
205
- 50% { opacity: 1; }
206
- 100% { transform: translateX(100%) translateY(100%) rotate(45deg); opacity: 0; }
207
  }
208
 
209
- .hero-glass:hover {
210
- transform: translateY(-5px);
211
- }
212
-
213
- .hero-icon {
214
- width: 100px;
215
- height: 100px;
216
- background: var(--white);
217
- border-radius: 50%;
218
- display: flex;
219
- align-items: center;
220
- justify-content: center;
221
- margin: 0 auto 1.5rem;
222
- font-size: 3rem;
223
- box-shadow: 0 10px 30px rgba(0,0,0,0.1);
224
  position: relative;
225
- overflow: hidden;
226
  }
227
 
228
- .hero-icon::after {
229
- content: '';
230
- position: absolute;
231
- inset: 0;
232
- background: var(--primary-gradient);
233
- opacity: 0.1;
234
  }
235
 
236
- h1 {
237
- font-size: 2.5rem;
238
- font-weight: 800;
239
- color: var(--text-primary);
240
- margin-bottom: 0.5rem;
241
- text-shadow: 0 2px 4px rgba(0,0,0,0.05);
242
  }
243
 
244
  .subtitle {
245
  font-size: 1.25rem;
246
  color: var(--text-secondary);
247
- font-weight: 500;
248
- opacity: 0.9;
 
249
  }
250
 
251
  /* Features Grid */
@@ -253,24 +209,23 @@
253
  display: grid;
254
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
255
  gap: 2rem;
256
- width: 100%;
257
- max-width: 1000px;
258
  }
259
 
260
- .feature-card {
261
  background: var(--glass-bg);
262
- backdrop-filter: var(--blur-amount);
263
- -webkit-backdrop-filter: var(--blur-amount);
264
  border: 1px solid var(--glass-border);
265
  border-radius: 24px;
266
- padding: 2rem;
267
  text-align: center;
268
  transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
269
  position: relative;
270
  overflow: hidden;
271
  }
272
 
273
- .feature-card::before {
274
  content: '';
275
  position: absolute;
276
  top: 0;
@@ -279,127 +234,117 @@
279
  height: 4px;
280
  background: var(--accent-gradient);
281
  transform: scaleX(0);
282
- transition: transform 0.3s ease;
283
  }
284
 
285
- .feature-card:hover {
286
  transform: translateY(-10px) scale(1.02);
287
- box-shadow: 0 20px 40px rgba(0,0,0,0.1);
288
- background: rgba(255, 255, 255, 0.25);
 
289
  }
290
 
291
- .feature-card:hover::before {
292
  transform: scaleX(1);
293
  }
294
 
295
  .feature-icon {
296
- width: 70px;
297
- height: 70px;
298
- background: rgba(255, 255, 255, 0.5);
299
- border-radius: 20px;
300
  display: flex;
301
  align-items: center;
302
  justify-content: center;
303
  margin: 0 auto 1.5rem;
304
  font-size: 2rem;
305
- color: var(--text-primary);
306
- transition: all 0.3s ease;
307
- box-shadow: 0 4px 15px rgba(0,0,0,0.05);
308
  }
309
 
310
- .feature-card:hover .feature-icon {
311
  transform: scale(1.1) rotate(5deg);
312
- background: var(--white);
313
  }
314
 
315
- .feature-card h3 {
316
- font-size: 1.3rem;
317
  color: var(--text-primary);
318
- margin-bottom: 0.5rem;
319
- font-weight: 700;
 
320
  }
321
 
322
- .feature-card p {
323
  color: var(--text-secondary);
324
- font-size: 0.95rem;
325
  line-height: 1.6;
326
  }
327
 
328
  /* CTA Section */
329
- .cta-glass {
330
- background: rgba(255, 255, 255, 0.2);
331
- backdrop-filter: var(--blur-amount);
332
- -webkit-backdrop-filter: var(--blur-amount);
333
- border: 1px solid var(--glass-border);
334
- border-radius: 50px;
335
- padding: 1rem;
336
  display: flex;
337
- gap: 1rem;
338
- flex-wrap: wrap;
339
  justify-content: center;
340
- box-shadow: var(--glass-shadow);
341
- margin-top: 1rem;
342
  }
343
 
344
  .btn {
345
- padding: 1rem 2.5rem;
 
346
  border-radius: 50px;
347
- text-decoration: none;
348
- font-weight: 600;
349
  font-size: 1.1rem;
350
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
 
 
351
  border: none;
352
  cursor: pointer;
353
- position: relative;
354
  overflow: hidden;
 
 
355
  display: inline-flex;
356
  align-items: center;
357
  gap: 0.5rem;
358
  }
359
 
360
  .btn-primary {
361
- background: var(--white);
362
- color: #667eea;
363
- box-shadow: 0 4px 15px rgba(0,0,0,0.1);
 
364
  }
365
 
366
- .btn-primary:hover {
367
- transform: translateY(-2px);
368
- box-shadow: 0 8px 25px rgba(0,0,0,0.15);
369
- background: linear-gradient(135deg, #ffffff 0%, #f0f0f0 100%);
370
  }
371
 
372
- .btn-secondary {
373
- background: transparent;
374
- color: var(--white);
375
- border: 2px solid rgba(255, 255, 255, 0.5);
 
 
 
 
 
376
  }
377
 
378
- .btn-secondary:hover {
379
- background: rgba(255, 255, 255, 0.2);
380
- border-color: var(--white);
381
- transform: translateY(-2px);
382
  }
383
 
384
- .btn::after {
385
- content: '';
386
- position: absolute;
387
- top: 50%;
388
- left: 50%;
389
- width: 0;
390
- height: 0;
391
- border-radius: 50%;
392
- background: rgba(255, 255, 255, 0.5);
393
- transform: translate(-50%, -50%);
394
- transition: width 0.6s, height 0.6s;
395
  }
396
 
397
- .btn:active::after {
398
- width: 300px;
399
- height: 300px;
400
  }
401
 
402
- /* Particles */
403
  .particles {
404
  position: fixed;
405
  top: 0;
@@ -414,14 +359,14 @@
414
  position: absolute;
415
  width: 6px;
416
  height: 6px;
417
- background: rgba(255, 255, 255, 0.5);
418
  border-radius: 50%;
419
- animation: particleFloat 15s infinite;
420
  }
421
 
422
- @keyframes particleFloat {
423
- 0%, 100% {
424
- transform: translateY(100vh) rotate(0deg);
425
  opacity: 0;
426
  }
427
  10% {
@@ -431,65 +376,67 @@
431
  opacity: 1;
432
  }
433
  100% {
434
- transform: translateY(-100vh) rotate(720deg);
435
  opacity: 0;
436
  }
437
  }
438
 
439
- /* Responsive */
440
  @media (max-width: 768px) {
441
- h1 {
442
- font-size: 1.8rem;
443
  }
444
 
445
- .hero-glass {
446
- padding: 2rem 1.5rem;
447
  }
448
 
449
  .features {
450
  grid-template-columns: 1fr;
 
451
  }
452
 
453
- .cta-glass {
454
  flex-direction: column;
455
- width: 100%;
456
  }
457
 
458
  .btn {
459
  width: 100%;
 
460
  justify-content: center;
461
  }
462
 
463
  .header {
464
- padding: 1rem;
465
  }
466
  }
467
 
468
  /* Loading Animation */
469
- .loader {
470
  position: fixed;
471
  top: 0;
472
  left: 0;
473
  width: 100%;
474
  height: 100%;
475
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
476
  z-index: 9999;
477
  display: flex;
478
- justify-content: center;
479
  align-items: center;
480
- transition: opacity 0.5s ease;
 
481
  }
482
 
483
- .loader.hidden {
484
  opacity: 0;
485
- pointer-events: none;
486
  }
487
 
488
- .loader-spinner {
489
- width: 50px;
490
- height: 50px;
491
- border: 4px solid rgba(255, 255, 255, 0.3);
492
- border-top-color: var(--white);
493
  border-radius: 50%;
494
  animation: spin 1s linear infinite;
495
  }
@@ -498,38 +445,29 @@
498
  to { transform: rotate(360deg); }
499
  }
500
 
501
- /* Interactive Elements */
502
- .status-indicator {
503
- display: inline-flex;
504
- align-items: center;
505
- gap: 0.5rem;
506
- background: rgba(255, 255, 255, 0.2);
507
- padding: 0.5rem 1rem;
508
- border-radius: 50px;
509
- font-size: 0.9rem;
510
- color: var(--white);
511
- margin-top: 1rem;
512
- backdrop-filter: blur(10px);
513
- }
514
-
515
- .status-dot {
516
- width: 8px;
517
- height: 8px;
518
- background: #4ade80;
519
- border-radius: 50%;
520
- animation: pulse 2s infinite;
521
  }
522
 
523
- @keyframes pulse {
524
- 0%, 100% { opacity: 1; }
525
- 50% { opacity: 0.5; }
 
526
  }
527
  </style>
528
  </head>
529
  <body>
530
- <!-- Loader -->
531
- <div class="loader" id="loader">
532
- <div class="loader-spinner"></div>
533
  </div>
534
 
535
  <!-- Background Shapes -->
@@ -539,71 +477,64 @@
539
  <div class="shape shape-3"></div>
540
  </div>
541
 
542
- <!-- Particles Container -->
543
  <div class="particles" id="particles"></div>
544
 
545
  <!-- Header -->
546
  <header class="header">
547
- <div class="brand">
548
- <i class="fas fa-comments"></i>
549
- <span>چت روم شیشه‌ای</span>
550
  </div>
551
- <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="built-with">
552
- <i class="fas fa-code"></i>
553
- Built with anycoder
554
  </a>
555
  </header>
556
 
557
  <!-- Main Content -->
558
  <div class="container">
559
- <!-- Hero Section -->
560
- <div class="hero-glass" data-tilt>
561
- <div class="hero-icon">
562
- <i class="fas fa-comment-dots" style="background: var(--primary-gradient); -webkit-background-clip: text; -webkit-text-fill-color: transparent;"></i>
563
- </div>
564
- <h1>💬 چت روم ساده</h1>
565
- <p class="subtitle">محلی برای گفتگو با دوستان در فضایی مدرن و شیشه‌ای</p>
566
-
567
- <div class="status-indicator">
568
- <span class="status-dot"></span>
569
- <span>۱۲۳ کاربر آنلاین</span>
570
  </div>
571
  </div>
572
-
573
- <!-- Features Grid -->
574
  <div class="features">
575
- <div class="feature-card">
576
  <div class="feature-icon">
577
- <i class="fas fa-mobile-alt" style="color: #667eea;"></i>
578
  </div>
579
  <h3>ثبت‌نام آسان</h3>
580
- <p>با شماره موبایل ثبت‌نام کنید و در کمتر از ۳۰ ثانیه وارد شوید</p>
581
  </div>
582
-
583
- <div class="feature-card">
584
- <div class="feature-icon">
585
- <i class="fas fa-users" style="color: #f5576c;"></i>
586
  </div>
587
  <h3>ساخت اتاق</h3>
588
  <p>تا ۳ اتاق مختلف بسازید و دوستان خود را دعوت کنید</p>
589
  </div>
590
-
591
- <div class="feature-card">
592
- <div class="feature-icon">
593
- <i class="fas fa-bolt" style="color: #4facfe;"></i>
594
  </div>
595
  <h3>چت زنده</h3>
596
- <p>گفتگوی آنلاین و سریع با سرعت انتقال پیام کمتر از ۱۰۰ میلی‌ثانیه</p>
597
  </div>
598
  </div>
599
-
600
- <!-- CTA Section -->
601
- <div class="cta-glass">
602
- <a href="#" class="btn btn-primary" onclick="handleAction('register')">
603
  <i class="fas fa-rocket"></i>
604
  شروع کنید
605
  </a>
606
- <a href="#" class="btn btn-secondary" onclick="handleAction('login')">
607
  <i class="fas fa-sign-in-alt"></i>
608
  ورود
609
  </a>
@@ -621,169 +552,109 @@
621
  // Create floating particles
622
  function createParticles() {
623
  const container = document.getElementById('particles');
624
- const particleCount = 20;
625
-
626
  for (let i = 0; i < particleCount; i++) {
627
  const particle = document.createElement('div');
628
  particle.className = 'particle';
629
  particle.style.left = Math.random() * 100 + '%';
630
- particle.style.animationDelay = Math.random() * 15 + 's';
631
  particle.style.animationDuration = (Math.random() * 10 + 10) + 's';
 
 
632
  container.appendChild(particle);
633
  }
634
  }
635
 
636
  createParticles();
637
 
638
- // 3D Tilt Effect for Hero Card
639
- const heroCard = document.querySelector('.hero-glass');
640
-
641
- heroCard.addEventListener('mousemove', (e) => {
642
- const rect = heroCard.getBoundingClientRect();
643
- const x = e.clientX - rect.left;
644
- const y = e.clientY - rect.top;
645
-
646
- const centerX = rect.width / 2;
647
- const centerY = rect.height / 2;
648
-
649
- const rotateX = (y - centerY) / 20;
650
- const rotateY = (centerX - x) / 20;
651
-
652
- heroCard.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateY(-5px)`;
653
- });
654
 
655
- heroCard.addEventListener('mouseleave', () => {
656
- heroCard.style.transform = 'perspective(1000px) rotateX(0) rotateY(0) translateY(0)';
 
 
 
 
657
  });
658
 
659
- // Button Click Handlers
660
- function handleAction(action) {
661
- const btn = event.currentTarget;
662
-
663
- // Create ripple effect
664
- const ripple = document.createElement('span');
665
- ripple.style.position = 'absolute';
666
- ripple.style.width = '20px';
667
- ripple.style.height = '20px';
668
- ripple.style.background = 'rgba(255,255,255,0.5)';
669
- ripple.style.borderRadius = '50%';
670
- ripple.style.transform = 'translate(-50%, -50%)';
671
- ripple.style.pointerEvents = 'none';
672
- ripple.style.animation = 'ripple 0.6s ease-out';
673
-
674
- const rect = btn.getBoundingClientRect();
675
- ripple.style.left = (event.clientX - rect.left) + 'px';
676
- ripple.style.top = (event.clientY - rect.top) + 'px';
677
-
678
- btn.style.position = 'relative';
679
- btn.style.overflow = 'hidden';
680
- btn.appendChild(ripple);
681
-
682
- setTimeout(() => ripple.remove(), 600);
683
-
684
- // Simulate action
685
- setTimeout(() => {
686
- if (action === 'register') {
687
- showNotification('در حال انتقال به صفحه ثبت‌نام...', 'info');
688
- } else {
689
- showNotification('در حال انتقال به صفحه ورود...', 'info');
690
- }
691
- }, 300);
692
- }
693
-
694
- // Custom Notification System
695
- function showNotification(message, type = 'info') {
696
- const notification = document.createElement('div');
697
- notification.style.cssText = `
698
- position: fixed;
699
- top: 100px;
700
- left: 50%;
701
- transform: translateX(-50%) translateY(-20px);
702
- background: rgba(255, 255, 255, 0.9);
703
- backdrop-filter: blur(20px);
704
- padding: 1rem 2rem;
705
- border-radius: 16px;
706
- box-shadow: 0 10px 40px rgba(0,0,0,0.1);
707
- z-index: 9999;
708
- font-family: 'Vazirmatn', sans-serif;
709
- font-weight: 600;
710
- color: #667eea;
711
- border: 1px solid rgba(255,255,255,0.5);
712
- opacity: 0;
713
- transition: all 0.3s ease;
714
- direction: rtl;
715
- `;
716
- notification.textContent = message;
717
- document.body.appendChild(notification);
718
 
719
- // Animate in
720
- requestAnimationFrame(() => {
721
- notification.style.opacity = '1';
722
- notification.style.transform = 'translateX(-50%) translateY(0)';
 
723
  });
724
-
725
- // Remove after delay
726
- setTimeout(() => {
727
- notification.style.opacity = '0';
728
- notification.style.transform = 'translateX(-50%) translateY(-20px)';
729
- setTimeout(() => notification.remove(), 300);
730
- }, 3000);
731
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
732
 
733
- // Add ripple animation to styles dynamically
734
  const style = document.createElement('style');
735
  style.textContent = `
736
  @keyframes ripple {
737
  to {
738
- width: 200px;
739
- height: 200px;
740
  opacity: 0;
741
  }
742
  }
743
  `;
744
  document.head.appendChild(style);
745
 
746
- // Parallax effect on scroll
747
- window.addEventListener('scroll', () => {
748
- const scrolled = window.pageYOffset;
749
- const parallax = document.querySelector('.shape-1');
750
- const parallax2 = document.querySelector('.shape-2');
751
-
752
- parallax.style.transform = `translateY(${scrolled * 0.5}px)`;
753
- parallax2.style.transform = `translateY(${scrolled * 0.3}px)`;
754
- });
755
-
756
- // Intersection Observer for fade-in animations
757
- const observerOptions = {
758
- threshold: 0.1,
759
- rootMargin: '0px 0px -50px 0px'
760
- };
761
-
762
- const observer = new IntersectionObserver((entries) => {
763
- entries.forEach(entry => {
764
- if (entry.isIntersecting) {
765
- entry.target.style.opacity = '1';
766
- entry.target.style.transform = 'translateY(0)';
767
  }
768
  });
769
- }, observerOptions);
770
-
771
- // Observe feature cards
772
- document.querySelectorAll('.feature-card').forEach((card, index) => {
773
- card.style.opacity = '0';
774
- card.style.transform = 'translateY(30px)';
775
- card.style.transition = `all 0.6s ease ${index * 0.1}s`;
776
- observer.observe(card);
777
  });
778
-
779
- // Dynamic online user count
780
- setInterval(() => {
781
- const statusSpan = document.querySelector('.status-indicator span:last-child');
782
- const currentUsers = parseInt(statusSpan.textContent);
783
- const change = Math.floor(Math.random() * 5) - 2; // -2 to +2
784
- const newUsers = Math.max(100, currentUsers + change);
785
- statusSpan.textContent = `${newUsers} کاربر آنلاین`;
786
- }, 5000);
787
  </script>
788
  </body>
789
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>چت روم ساده | iOS Glassmorphism</title>
 
 
 
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
8
+ <link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;600;800&display=swap" rel="stylesheet">
9
  <style>
10
  :root {
11
+ --glass-bg: rgba(255, 255, 255, 0.1);
12
+ --glass-border: rgba(255, 255, 255, 0.2);
13
+ --glass-shadow: rgba(0, 0, 0, 0.1);
14
  --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
15
  --secondary-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
16
  --accent-gradient: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
17
+ --text-primary: #ffffff;
18
+ --text-secondary: rgba(255, 255, 255, 0.8);
19
+ --blur-amount: 20px;
 
20
  }
21
 
22
  * {
 
27
 
28
  body {
29
  font-family: 'Vazirmatn', sans-serif;
 
 
 
30
  min-height: 100vh;
31
+ background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #6e48aa 100%);
32
+ background-attachment: fixed;
33
  overflow-x: hidden;
34
  position: relative;
35
  }
36
 
37
+ /* Animated Background Shapes */
 
 
 
 
 
 
38
  .bg-shapes {
39
  position: fixed;
40
+ top: 0;
41
+ left: 0;
42
  width: 100%;
43
  height: 100%;
44
  overflow: hidden;
45
+ z-index: -1;
 
46
  }
47
 
48
  .shape {
 
55
  .shape-1 {
56
  width: 400px;
57
  height: 400px;
58
+ background: #ff6b6b;
59
+ top: -100px;
60
+ right: -100px;
 
61
  animation-delay: 0s;
62
  }
63
 
64
  .shape-2 {
65
  width: 300px;
66
  height: 300px;
67
+ background: #4ecdc4;
68
+ bottom: -50px;
69
+ left: -50px;
70
+ animation-delay: 5s;
 
71
  }
72
 
73
  .shape-3 {
74
  width: 250px;
75
  height: 250px;
76
+ background: #ffe66d;
77
+ top: 50%;
78
+ left: 50%;
79
+ transform: translate(-50%, -50%);
80
+ animation-delay: 10s;
81
  }
82
 
83
  @keyframes float {
 
86
  66% { transform: translate(-20px, 20px) scale(0.9); }
87
  }
88
 
89
+ /* Header with anycoder link */
90
  .header {
91
  position: fixed;
92
  top: 0;
93
+ left: 0;
94
+ right: 0;
95
  padding: 1rem 2rem;
96
+ background: var(--glass-bg);
97
+ backdrop-filter: blur(var(--blur-amount));
98
+ -webkit-backdrop-filter: blur(var(--blur-amount));
 
99
  border-bottom: 1px solid var(--glass-border);
100
+ z-index: 1000;
101
  display: flex;
102
  justify-content: space-between;
103
  align-items: center;
104
  }
105
 
106
+ .logo {
 
 
 
 
 
 
 
 
 
 
107
  font-size: 1.5rem;
108
+ font-weight: 800;
109
+ color: var(--text-primary);
110
+ text-shadow: 0 2px 4px rgba(0,0,0,0.2);
111
  }
112
 
113
+ .anycoder-link {
114
+ background: var(--glass-bg);
115
+ border: 1px solid var(--glass-border);
116
  padding: 0.5rem 1rem;
117
+ border-radius: 20px;
118
+ color: var(--text-primary);
119
  text-decoration: none;
120
  font-size: 0.85rem;
 
121
  transition: all 0.3s ease;
 
122
  backdrop-filter: blur(10px);
123
  }
124
 
125
+ .anycoder-link:hover {
126
+ background: rgba(255,255,255,0.2);
127
  transform: translateY(-2px);
128
+ box-shadow: 0 4px 12px rgba(0,0,0,0.2);
129
  }
130
 
131
  /* Main Container */
132
  .container {
 
 
133
  max-width: 1200px;
134
  margin: 0 auto;
135
  padding: 8rem 2rem 4rem;
136
+ position: relative;
137
+ }
138
+
139
+ /* Hero Section with Glassmorphism */
140
+ .hero {
141
+ text-align: center;
142
+ margin-bottom: 4rem;
143
+ position: relative;
144
  }
145
 
146
+ .hero-card {
 
147
  background: var(--glass-bg);
148
+ backdrop-filter: blur(var(--blur-amount));
149
+ -webkit-backdrop-filter: blur(var(--blur-amount));
150
  border: 1px solid var(--glass-border);
151
  border-radius: 30px;
152
  padding: 3rem;
153
+ box-shadow:
154
+ 0 8px 32px 0 var(--glass-shadow),
155
+ inset 0 0 0 1px rgba(255,255,255,0.1);
 
156
  position: relative;
157
  overflow: hidden;
 
 
158
  }
159
 
160
+ .hero-card::before {
161
  content: '';
162
  position: absolute;
163
  top: -50%;
164
  left: -50%;
165
  width: 200%;
166
  height: 200%;
167
+ background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
168
+ animation: shimmer 10s infinite linear;
 
 
 
 
 
 
 
 
 
 
 
169
  }
170
 
171
  @keyframes shimmer {
172
+ 0% { transform: rotate(0deg); }
173
+ 100% { transform: rotate(360deg); }
 
174
  }
175
 
176
+ .hero h1 {
177
+ font-size: 3.5rem;
178
+ font-weight: 800;
179
+ color: var(--text-primary);
180
+ margin-bottom: 1rem;
181
+ text-shadow: 0 4px 8px rgba(0,0,0,0.3);
 
 
 
 
 
 
 
 
 
182
  position: relative;
183
+ z-index: 1;
184
  }
185
 
186
+ .hero-icon {
187
+ font-size: 4rem;
188
+ margin-bottom: 1rem;
189
+ display: inline-block;
190
+ animation: bounce 2s infinite;
191
+ filter: drop-shadow(0 4px 8px rgba(0,0,0,0.3));
192
  }
193
 
194
+ @keyframes bounce {
195
+ 0%, 100% { transform: translateY(0); }
196
+ 50% { transform: translateY(-10px); }
 
 
 
197
  }
198
 
199
  .subtitle {
200
  font-size: 1.25rem;
201
  color: var(--text-secondary);
202
+ font-weight: 300;
203
+ position: relative;
204
+ z-index: 1;
205
  }
206
 
207
  /* Features Grid */
 
209
  display: grid;
210
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
211
  gap: 2rem;
212
+ margin-bottom: 4rem;
 
213
  }
214
 
215
+ .feature {
216
  background: var(--glass-bg);
217
+ backdrop-filter: blur(var(--blur-amount));
218
+ -webkit-backdrop-filter: blur(var(--blur-amount));
219
  border: 1px solid var(--glass-border);
220
  border-radius: 24px;
221
+ padding: 2.5rem;
222
  text-align: center;
223
  transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
224
  position: relative;
225
  overflow: hidden;
226
  }
227
 
228
+ .feature::before {
229
  content: '';
230
  position: absolute;
231
  top: 0;
 
234
  height: 4px;
235
  background: var(--accent-gradient);
236
  transform: scaleX(0);
237
+ transition: transform 0.4s ease;
238
  }
239
 
240
+ .feature:hover {
241
  transform: translateY(-10px) scale(1.02);
242
+ box-shadow:
243
+ 0 20px 40px rgba(0,0,0,0.2),
244
+ inset 0 0 0 1px rgba(255,255,255,0.2);
245
  }
246
 
247
+ .feature:hover::before {
248
  transform: scaleX(1);
249
  }
250
 
251
  .feature-icon {
252
+ width: 80px;
253
+ height: 80px;
254
+ background: var(--primary-gradient);
255
+ border-radius: 24px;
256
  display: flex;
257
  align-items: center;
258
  justify-content: center;
259
  margin: 0 auto 1.5rem;
260
  font-size: 2rem;
261
+ color: white;
262
+ box-shadow: 0 8px 20px rgba(102, 126, 234, 0.4);
263
+ transition: transform 0.3s ease;
264
  }
265
 
266
+ .feature:hover .feature-icon {
267
  transform: scale(1.1) rotate(5deg);
 
268
  }
269
 
270
+ .feature h3 {
 
271
  color: var(--text-primary);
272
+ font-size: 1.5rem;
273
+ margin-bottom: 0.75rem;
274
+ font-weight: 600;
275
  }
276
 
277
+ .feature p {
278
  color: var(--text-secondary);
279
+ font-size: 1rem;
280
  line-height: 1.6;
281
  }
282
 
283
  /* CTA Section */
284
+ .cta {
 
 
 
 
 
 
285
  display: flex;
286
+ gap: 1.5rem;
 
287
  justify-content: center;
288
+ flex-wrap: wrap;
289
+ margin-top: 3rem;
290
  }
291
 
292
  .btn {
293
+ position: relative;
294
+ padding: 1.25rem 3rem;
295
  border-radius: 50px;
 
 
296
  font-size: 1.1rem;
297
+ font-weight: 600;
298
+ text-decoration: none;
299
+ color: white;
300
  border: none;
301
  cursor: pointer;
 
302
  overflow: hidden;
303
+ transition: all 0.3s ease;
304
+ backdrop-filter: blur(10px);
305
  display: inline-flex;
306
  align-items: center;
307
  gap: 0.5rem;
308
  }
309
 
310
  .btn-primary {
311
+ background: var(--primary-gradient);
312
+ box-shadow:
313
+ 0 10px 30px rgba(102, 126, 234, 0.4),
314
+ inset 0 1px 0 rgba(255,255,255,0.3);
315
  }
316
 
317
+ .btn-secondary {
318
+ background: var(--glass-bg);
319
+ border: 2px solid rgba(255,255,255,0.3);
320
+ box-shadow: 0 4px 15px rgba(0,0,0,0.1);
321
  }
322
 
323
+ .btn::before {
324
+ content: '';
325
+ position: absolute;
326
+ top: 0;
327
+ left: -100%;
328
+ width: 100%;
329
+ height: 100%;
330
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
331
+ transition: left 0.5s ease;
332
  }
333
 
334
+ .btn:hover::before {
335
+ left: 100%;
 
 
336
  }
337
 
338
+ .btn:hover {
339
+ transform: translateY(-3px);
340
+ box-shadow: 0 15px 40px rgba(0,0,0,0.3);
 
 
 
 
 
 
 
 
341
  }
342
 
343
+ .btn:active {
344
+ transform: translateY(-1px);
 
345
  }
346
 
347
+ /* Floating Particles */
348
  .particles {
349
  position: fixed;
350
  top: 0;
 
359
  position: absolute;
360
  width: 6px;
361
  height: 6px;
362
+ background: rgba(255,255,255,0.5);
363
  border-radius: 50%;
364
+ animation: particle-float 15s infinite linear;
365
  }
366
 
367
+ @keyframes particle-float {
368
+ 0% {
369
+ transform: translateY(100vh) translateX(0);
370
  opacity: 0;
371
  }
372
  10% {
 
376
  opacity: 1;
377
  }
378
  100% {
379
+ transform: translateY(-100vh) translateX(100px);
380
  opacity: 0;
381
  }
382
  }
383
 
384
+ /* Responsive Design */
385
  @media (max-width: 768px) {
386
+ .hero h1 {
387
+ font-size: 2.5rem;
388
  }
389
 
390
+ .hero-card {
391
+ padding: 2rem;
392
  }
393
 
394
  .features {
395
  grid-template-columns: 1fr;
396
+ gap: 1.5rem;
397
  }
398
 
399
+ .cta {
400
  flex-direction: column;
401
+ align-items: center;
402
  }
403
 
404
  .btn {
405
  width: 100%;
406
+ max-width: 300px;
407
  justify-content: center;
408
  }
409
 
410
  .header {
411
+ padding: 0.75rem 1rem;
412
  }
413
  }
414
 
415
  /* Loading Animation */
416
+ .loading-overlay {
417
  position: fixed;
418
  top: 0;
419
  left: 0;
420
  width: 100%;
421
  height: 100%;
422
+ background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
423
  z-index: 9999;
424
  display: flex;
 
425
  align-items: center;
426
+ justify-content: center;
427
+ transition: opacity 0.5s ease, visibility 0.5s ease;
428
  }
429
 
430
+ .loading-overlay.hidden {
431
  opacity: 0;
432
+ visibility: hidden;
433
  }
434
 
435
+ .loader {
436
+ width: 60px;
437
+ height: 60px;
438
+ border: 4px solid rgba(255,255,255,0.1);
439
+ border-top-color: white;
440
  border-radius: 50%;
441
  animation: spin 1s linear infinite;
442
  }
 
445
  to { transform: rotate(360deg); }
446
  }
447
 
448
+ /* Scroll Indicator */
449
+ .scroll-indicator {
450
+ position: absolute;
451
+ bottom: 2rem;
452
+ left: 50%;
453
+ transform: translateX(-50%);
454
+ animation: bounce-down 2s infinite;
455
+ color: white;
456
+ font-size: 1.5rem;
457
+ opacity: 0.7;
 
 
 
 
 
 
 
 
 
 
458
  }
459
 
460
+ @keyframes bounce-down {
461
+ 0%, 20%, 50%, 80%, 100% { transform: translateX(-50%) translateY(0); }
462
+ 40% { transform: translateX(-50%) translateY(-10px); }
463
+ 60% { transform: translateX(-50%) translateY(-5px); }
464
  }
465
  </style>
466
  </head>
467
  <body>
468
+ <!-- Loading Screen -->
469
+ <div class="loading-overlay" id="loader">
470
+ <div class="loader"></div>
471
  </div>
472
 
473
  <!-- Background Shapes -->
 
477
  <div class="shape shape-3"></div>
478
  </div>
479
 
480
+ <!-- Floating Particles -->
481
  <div class="particles" id="particles"></div>
482
 
483
  <!-- Header -->
484
  <header class="header">
485
+ <div class="logo">
486
+ <i class="fas fa-comments"></i> چت روم
 
487
  </div>
488
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" class="anycoder-link" target="_blank">
489
+ <i class="fas fa-code"></i> Built with anycoder
 
490
  </a>
491
  </header>
492
 
493
  <!-- Main Content -->
494
  <div class="container">
495
+ <div class="hero">
496
+ <div class="hero-card">
497
+ <div class="hero-icon">💬</div>
498
+ <h1>چت روم ساده</h1>
499
+ <p class="subtitle">محلی برای گفتگو با دوستان</p>
500
+ <div class="scroll-indicator">
501
+ <i class="fas fa-chevron-down"></i>
502
+ </div>
 
 
 
503
  </div>
504
  </div>
505
+
 
506
  <div class="features">
507
+ <div class="feature" data-delay="0">
508
  <div class="feature-icon">
509
+ <i class="fas fa-mobile-alt"></i>
510
  </div>
511
  <h3>ثبت‌نام آسان</h3>
512
+ <p>با شماره موبایل ثبت‌نام کنید و در کمترین زمان عضو شوید</p>
513
  </div>
514
+
515
+ <div class="feature" data-delay="100">
516
+ <div class="feature-icon" style="background: var(--secondary-gradient);">
517
+ <i class="fas fa-users"></i>
518
  </div>
519
  <h3>ساخت اتاق</h3>
520
  <p>تا ۳ اتاق مختلف بسازید و دوستان خود را دعوت کنید</p>
521
  </div>
522
+
523
+ <div class="feature" data-delay="200">
524
+ <div class="feature-icon" style="background: var(--accent-gradient);">
525
+ <i class="fas fa-bolt"></i>
526
  </div>
527
  <h3>چت زنده</h3>
528
+ <p>گفتگوی آنلاین و سریع با کمترین تاخیر ممکن</p>
529
  </div>
530
  </div>
531
+
532
+ <div class="cta">
533
+ <a href="register.php" class="btn btn-primary">
 
534
  <i class="fas fa-rocket"></i>
535
  شروع کنید
536
  </a>
537
+ <a href="login.php" class="btn btn-secondary">
538
  <i class="fas fa-sign-in-alt"></i>
539
  ورود
540
  </a>
 
552
  // Create floating particles
553
  function createParticles() {
554
  const container = document.getElementById('particles');
555
+ const particleCount = 30;
556
+
557
  for (let i = 0; i < particleCount; i++) {
558
  const particle = document.createElement('div');
559
  particle.className = 'particle';
560
  particle.style.left = Math.random() * 100 + '%';
 
561
  particle.style.animationDuration = (Math.random() * 10 + 10) + 's';
562
+ particle.style.animationDelay = Math.random() * 5 + 's';
563
+ particle.style.opacity = Math.random() * 0.5 + 0.2;
564
  container.appendChild(particle);
565
  }
566
  }
567
 
568
  createParticles();
569
 
570
+ // Intersection Observer for feature animations
571
+ const observerOptions = {
572
+ threshold: 0.1,
573
+ rootMargin: '0px 0px -50px 0px'
574
+ };
575
+
576
+ const observer = new IntersectionObserver((entries) => {
577
+ entries.forEach(entry => {
578
+ if (entry.isIntersecting) {
579
+ entry.target.style.opacity = '1';
580
+ entry.target.style.transform = 'translateY(0)';
581
+ }
582
+ });
583
+ }, observerOptions);
 
 
584
 
585
+ // Initialize feature animations
586
+ document.querySelectorAll('.feature').forEach((feature, index) => {
587
+ feature.style.opacity = '0';
588
+ feature.style.transform = 'translateY(30px)';
589
+ feature.style.transition = `all 0.6s ease ${index * 0.1}s`;
590
+ observer.observe(feature);
591
  });
592
 
593
+ // Parallax effect for background shapes
594
+ document.addEventListener('mousemove', (e) => {
595
+ const shapes = document.querySelectorAll('.shape');
596
+ const x = e.clientX / window.innerWidth;
597
+ const y = e.clientY / window.innerHeight;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
 
599
+ shapes.forEach((shape, index) => {
600
+ const speed = (index + 1) * 20;
601
+ const xOffset = (0.5 - x) * speed;
602
+ const yOffset = (0.5 - y) * speed;
603
+ shape.style.transform = `translate(${xOffset}px, ${yOffset}px)`;
604
  });
605
+ });
606
+
607
+ // Button click effects
608
+ document.querySelectorAll('.btn').forEach(btn => {
609
+ btn.addEventListener('click', function(e) {
610
+ // Create ripple effect
611
+ const ripple = document.createElement('span');
612
+ const rect = this.getBoundingClientRect();
613
+ const size = Math.max(rect.width, rect.height);
614
+ const x = e.clientX - rect.left - size / 2;
615
+ const y = e.clientY - rect.top - size / 2;
616
+
617
+ ripple.style.cssText = `
618
+ position: absolute;
619
+ width: ${size}px;
620
+ height: ${size}px;
621
+ left: ${x}px;
622
+ top: ${y}px;
623
+ background: rgba(255,255,255,0.5);
624
+ border-radius: 50%;
625
+ transform: scale(0);
626
+ animation: ripple 0.6s ease-out;
627
+ pointer-events: none;
628
+ `;
629
+
630
+ this.appendChild(ripple);
631
+
632
+ setTimeout(() => ripple.remove(), 600);
633
+ });
634
+ });
635
 
636
+ // Add ripple animation keyframes dynamically
637
  const style = document.createElement('style');
638
  style.textContent = `
639
  @keyframes ripple {
640
  to {
641
+ transform: scale(2);
 
642
  opacity: 0;
643
  }
644
  }
645
  `;
646
  document.head.appendChild(style);
647
 
648
+ // Smooth scroll behavior
649
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
650
+ anchor.addEventListener('click', function (e) {
651
+ e.preventDefault();
652
+ const target = document.querySelector(this.getAttribute('href'));
653
+ if (target) {
654
+ target.scrollIntoView({ behavior: 'smooth', block: 'start' });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  }
656
  });
 
 
 
 
 
 
 
 
657
  });
 
 
 
 
 
 
 
 
 
658
  </script>
659
  </body>
660
  </html>