weltenschmid commited on
Commit
cd5cd17
Β·
verified Β·
1 Parent(s): b4a1354

🎨 Redesign from AnyCoder

Browse files

This Pull Request contains a redesigned version of the app with:

- ✨ Modern, mobile-friendly design
- 🎯 Minimal, clean components
- πŸ“± Responsive layout
- πŸš€ Improved user experience

Generated by [AnyCoder](https://huggingface.co/spaces/akhaliq/anycoder)

Files changed (1) hide show
  1. index.html +923 -935
index.html CHANGED
@@ -1,947 +1,935 @@
1
  <!DOCTYPE html>
2
  <html lang="en">
3
-
4
  <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>Royal Fortune Casino - Blackjack Edition</title>
8
-
9
- <!-- Google Fonts -->
10
- <link rel="preconnect" href="https://fonts.googleapis.com">
11
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
- <link
13
- href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=Roboto:wght@300;400;500;700&display=swap"
14
- rel="stylesheet">
15
-
16
- <!-- FontAwesome for Icons -->
17
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
18
-
19
- <style>
20
- :root {
21
- --primary-gold: #d4af37;
22
- --primary-gold-hover: #f3cf55;
23
- --bg-dark: #0f0f13;
24
- --bg-panel: #1a1a24;
25
- --bg-card: #23232f;
26
- --text-main: #ffffff;
27
- --text-muted: #a0a0b0;
28
- --accent-red: #e74c3c;
29
- --accent-green: #2ecc71;
30
- --radius: 12px;
31
- --shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
32
- --glass: rgba(26, 26, 36, 0.85);
33
- }
34
-
35
- * {
36
- box-sizing: border-box;
37
- margin: 0;
38
- padding: 0;
39
- }
40
-
41
- body {
42
- font-family: 'Roboto', sans-serif;
43
- background-color: var(--bg-dark);
44
- color: var(--text-main);
45
- line-height: 1.6;
46
- overflow-x: hidden;
47
- background-image: radial-gradient(circle at 10% 20%, #1a1a24 0%, #0f0f13 90%);
48
- min-height: 100vh;
49
- display: flex;
50
- flex-direction: column;
51
- }
52
-
53
- /* Typography */
54
- h1,
55
- h2,
56
- h3,
57
- h4 {
58
- font-family: 'Cinzel', serif;
59
- color: var(--primary-gold);
60
- }
61
-
62
- a {
63
- text-decoration: none;
64
- color: inherit;
65
- transition: color 0.3s;
66
- }
67
-
68
- /* Utility */
69
- .container {
70
- max-width: 1200px;
71
- margin: 0 auto;
72
- padding: 0 20px;
73
- flex: 1;
74
- }
75
-
76
- .btn {
77
- display: inline-flex;
78
- align-items: center;
79
- gap: 8px;
80
- padding: 10px 24px;
81
- border-radius: 30px;
82
- border: none;
83
- font-weight: 600;
84
- cursor: pointer;
85
- transition: all 0.3s ease;
86
- font-size: 0.95rem;
87
- }
88
-
89
- .btn-gold {
90
- background: linear-gradient(135deg, var(--primary-gold), #b8860b);
91
- color: #000;
92
- }
93
-
94
- .btn-gold:hover {
95
- transform: translateY(-2px);
96
- box-shadow: 0 0 15px rgba(212, 175, 55, 0.4);
97
- background: linear-gradient(135deg, var(--primary-gold-hover), var(--primary-gold));
98
- }
99
-
100
- .btn-outline {
101
- background: transparent;
102
- border: 2px solid var(--primary-gold);
103
- color: var(--primary-gold);
104
- }
105
-
106
- .btn-outline:hover {
107
- background: var(--primary-gold);
108
- color: #000;
109
- }
110
-
111
- .btn-danger {
112
- background: var(--accent-red);
113
- color: white;
114
- }
115
-
116
- .btn-danger:hover {
117
- background: #c0392b;
118
- }
119
-
120
- .btn-success {
121
- background: var(--accent-green);
122
- color: white;
123
- }
124
-
125
- .btn-success:hover {
126
- background: #27ae60;
127
- }
128
-
129
- .btn:disabled {
130
- opacity: 0.5;
131
- cursor: not-allowed;
132
- filter: grayscale(1);
133
- }
134
-
135
- /* Header */
136
- header {
137
- background: rgba(15, 15, 19, 0.95);
138
- backdrop-filter: blur(10px);
139
- position: sticky;
140
- top: 0;
141
- z-index: 100;
142
- padding: 15px 0;
143
- border-bottom: 1px solid rgba(255, 255, 255, 0.05);
144
- }
145
-
146
- nav {
147
- display: flex;
148
- justify-content: space-between;
149
- align-items: center;
150
- }
151
-
152
- .logo {
153
- font-size: 1.5rem;
154
- font-weight: 700;
155
- display: flex;
156
- align-items: center;
157
- gap: 10px;
158
- }
159
-
160
- .logo i {
161
- color: var(--primary-gold);
162
- font-size: 1.8rem;
163
- }
164
-
165
- .nav-controls {
166
- display: flex;
167
- align-items: center;
168
- gap: 20px;
169
- }
170
-
171
- .balance-display {
172
- background: var(--bg-panel);
173
- padding: 8px 16px;
174
- border-radius: 20px;
175
- border: 1px solid rgba(212, 175, 55, 0.3);
176
- display: flex;
177
- align-items: center;
178
- gap: 8px;
179
- font-weight: 700;
180
- color: var(--primary-gold);
181
- }
182
-
183
- .lang-select {
184
- background: var(--bg-panel);
185
- color: var(--text-main);
186
- border: 1px solid rgba(255, 255, 255, 0.1);
187
- padding: 5px 10px;
188
- border-radius: 6px;
189
- cursor: pointer;
190
- }
191
-
192
- /* Hero / Highlight Section */
193
- .hero {
194
- padding: 40px 0;
195
- text-align: center;
196
- }
197
-
198
- .daily-bonus-banner {
199
- background: linear-gradient(90deg, #2c3e50, #000000);
200
- border: 1px solid var(--primary-gold);
201
- padding: 15px;
202
- border-radius: var(--radius);
203
- margin-bottom: 30px;
204
- display: flex;
205
- justify-content: space-between;
206
- align-items: center;
207
- flex-wrap: wrap;
208
- gap: 15px;
209
- }
210
-
211
- .bonus-content h3 {
212
- font-size: 1.2rem;
213
- margin-bottom: 5px;
214
- }
215
-
216
- .bonus-content p {
217
- color: var(--primary-gold);
218
- font-weight: 700;
219
- }
220
-
221
- .game-highlight {
222
- background: var(--bg-panel);
223
- border-radius: var(--radius);
224
- overflow: hidden;
225
- box-shadow: var(--shadow);
226
- position: relative;
227
- border: 1px solid rgba(212, 175, 55, 0.2);
228
- }
229
-
230
- .highlight-badge {
231
- position: absolute;
232
- top: 20px;
233
- left: -35px;
234
- background: var(--accent-red);
235
- color: white;
236
- padding: 8px 40px;
237
- transform: rotate(-45deg);
238
- font-weight: bold;
239
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
240
- z-index: 10;
241
- }
242
-
243
- .highlight-content {
244
- display: grid;
245
- grid-template-columns: 1fr 1fr;
246
- align-items: center;
247
- }
248
-
249
- .highlight-image {
250
- height: 400px;
251
- background-size: cover;
252
- background-position: center;
253
- position: relative;
254
- }
255
-
256
- .highlight-image::after {
257
- content: '';
258
- position: absolute;
259
- inset: 0;
260
- background: linear-gradient(90deg, transparent 0%, var(--bg-panel) 100%);
261
- }
262
-
263
- .highlight-text {
264
- padding: 40px;
265
- text-align: left;
266
- }
267
-
268
- /* Games Grid */
269
- .section-title {
270
- text-align: center;
271
- margin: 50px 0 30px;
272
- font-size: 2rem;
273
- position: relative;
274
- display: inline-block;
275
- left: 50%;
276
- transform: translateX(-50%);
277
- }
278
-
279
- .section-title::after {
280
- content: '';
281
- display: block;
282
- width: 60px;
283
- height: 3px;
284
- background: var(--primary-gold);
285
- margin: 10px auto 0;
286
- }
287
-
288
- .games-grid {
289
- display: grid;
290
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
291
- gap: 25px;
292
- padding-bottom: 60px;
293
- }
294
-
295
- .game-card {
296
- background: var(--bg-card);
297
- border-radius: var(--radius);
298
- overflow: hidden;
299
- transition: transform 0.3s, box-shadow 0.3s;
300
- cursor: pointer;
301
- border: 1px solid transparent;
302
- position: relative;
303
- }
304
-
305
- .game-card:hover {
306
- transform: translateY(-5px);
307
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.4);
308
- border-color: var(--primary-gold);
309
- }
310
-
311
- .card-img {
312
- height: 180px;
313
- background-color: #333;
314
- background-size: cover;
315
- background-position: center;
316
- position: relative;
317
- }
318
-
319
- .card-overlay {
320
- position: absolute;
321
- inset: 0;
322
- background: rgba(0, 0, 0, 0.6);
323
- display: flex;
324
- align-items: center;
325
- justify-content: center;
326
- opacity: 0;
327
- transition: opacity 0.3s;
328
- }
329
-
330
- .game-card:hover .card-overlay {
331
- opacity: 1;
332
- }
333
-
334
- .card-body {
335
- padding: 20px;
336
- }
337
-
338
- .card-body h4 {
339
- font-size: 1.2rem;
340
- margin-bottom: 5px;
341
- color: #fff;
342
- }
343
-
344
- .card-body p {
345
- font-size: 0.9rem;
346
- color: var(--text-muted);
347
- }
348
-
349
- /* Modals */
350
- .modal-overlay {
351
- position: fixed;
352
- inset: 0;
353
- background: rgba(0, 0, 0, 0.8);
354
- backdrop-filter: blur(5px);
355
- z-index: 1000;
356
- display: flex;
357
- align-items: center;
358
- justify-content: center;
359
- opacity: 0;
360
- visibility: hidden;
361
- transition: all 0.3s;
362
- }
363
-
364
- .modal-overlay.active {
365
- opacity: 1;
366
- visibility: visible;
367
- }
368
-
369
- .modal {
370
- background: var(--bg-panel);
371
- width: 90%;
372
- max-width: 600px;
373
- border-radius: var(--radius);
374
- padding: 30px;
375
- position: relative;
376
- transform: scale(0.9);
377
- transition: transform 0.3s;
378
- border: 1px solid var(--primary-gold);
379
- box-shadow: 0 0 30px rgba(0, 0, 0, 0.7);
380
- }
381
-
382
- .modal-overlay.active .modal {
383
- transform: scale(1);
384
- }
385
-
386
- .modal-header {
387
- display: flex;
388
- justify-content: space-between;
389
- align-items: center;
390
- margin-bottom: 20px;
391
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
392
- padding-bottom: 15px;
393
- }
394
-
395
- .close-modal {
396
- background: none;
397
- border: none;
398
- color: var(--text-muted);
399
- font-size: 1.5rem;
400
- cursor: pointer;
401
- }
402
-
403
- .close-modal:hover {
404
- color: #fff;
405
- }
406
-
407
- /* Forms */
408
- .form-group {
409
- margin-bottom: 20px;
410
- }
411
-
412
- .form-label {
413
- display: block;
414
- margin-bottom: 8px;
415
- color: var(--text-muted);
416
- }
417
-
418
- .form-input {
419
- width: 100%;
420
- padding: 12px;
421
- background: var(--bg-dark);
422
- border: 1px solid rgba(255, 255, 255, 0.1);
423
- border-radius: 8px;
424
- color: #fff;
425
- font-size: 1rem;
426
- }
427
-
428
- .form-input:focus {
429
- outline: none;
430
- border-color: var(--primary-gold);
431
- }
432
-
433
- /* Game UI Specifics */
434
- .game-area {
435
- background: #050507;
436
- /* Darker felt color */
437
- padding: 20px;
438
- border-radius: 12px;
439
- text-align: center;
440
- min-height: 300px;
441
- display: flex;
442
- flex-direction: column;
443
- justify-content: space-between;
444
- border: 2px solid #333;
445
- box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.8);
446
- }
447
-
448
- .game-controls {
449
- display: flex;
450
- gap: 10px;
451
- justify-content: center;
452
- margin-top: 20px;
453
- flex-wrap: wrap;
454
- }
455
-
456
- .game-result {
457
- font-size: 1.5rem;
458
- font-weight: bold;
459
- min-height: 2em;
460
- margin: 10px 0;
461
- text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
462
- }
463
-
464
- .win-anim {
465
- color: var(--accent-green);
466
- animation: pulse 0.5s;
467
- }
468
-
469
- .lose-anim {
470
- color: var(--accent-red);
471
- }
472
-
473
- @keyframes pulse {
474
- 0% {
475
- transform: scale(1);
476
- }
477
-
478
- 50% {
479
- transform: scale(1.1);
480
- }
481
-
482
- 100% {
483
- transform: scale(1);
484
- }
485
- }
486
-
487
- /* Toast Notification */
488
- .toast-container {
489
- position: fixed;
490
- bottom: 20px;
491
- right: 20px;
492
- z-index: 2000;
493
- display: flex;
494
- flex-direction: column;
495
- gap: 10px;
496
- }
497
-
498
- .toast {
499
- background: var(--bg-panel);
500
- border-left: 4px solid var(--primary-gold);
501
- color: #fff;
502
- padding: 15px 25px;
503
- border-radius: 4px;
504
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
505
- display: flex;
506
- align-items: center;
507
- gap: 10px;
508
- animation: slideIn 0.3s ease-out forwards;
509
- min-width: 250px;
510
- }
511
-
512
- @keyframes slideIn {
513
- from {
514
- transform: translateX(100%);
515
- opacity: 0;
516
- }
517
-
518
- to {
519
- transform: translateX(0);
520
- opacity: 1;
521
- }
522
- }
523
-
524
- /* --- BLACKJACK SPECIFIC STYLES --- */
525
- .bj-table {
526
- width: 100%;
527
- display: flex;
528
- flex-direction: column;
529
- gap: 20px;
530
- height: 100%;
531
- }
532
-
533
- .hand-area {
534
- display: flex;
535
- flex-direction: column;
536
- align-items: center;
537
- gap: 10px;
538
- }
539
-
540
- .hand-label {
541
- font-size: 0.9rem;
542
- color: var(--text-muted);
543
- text-transform: uppercase;
544
- letter-spacing: 1px;
545
- }
546
-
547
- .cards-container {
548
- display: flex;
549
- justify-content: center;
550
- gap: 10px;
551
- min-height: 100px;
552
- flex-wrap: wrap;
553
- }
554
-
555
- .playing-card {
556
- width: 60px;
557
- height: 90px;
558
- background: white;
559
- border-radius: 6px;
560
- color: black;
561
- font-weight: bold;
562
- font-size: 1.2rem;
563
- display: flex;
564
- flex-direction: column;
565
- justify-content: space-between;
566
- padding: 5px;
567
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
568
- position: relative;
569
- user-select: none;
570
- animation: dealCard 0.3s ease-out;
571
- }
572
-
573
- @keyframes dealCard {
574
- from {
575
- transform: translateY(-50px) scale(0.5);
576
- opacity: 0;
577
- }
578
-
579
- to {
580
- transform: translateY(0) scale(1);
581
- opacity: 1;
582
- }
583
- }
584
-
585
- .playing-card.red {
586
- color: #d00;
587
- }
588
-
589
- .playing-card.black {
590
- color: #000;
591
- }
592
-
593
- .card-center {
594
- position: absolute;
595
- top: 50%;
596
- left: 50%;
597
- transform: translate(-50%, -50%);
598
- font-size: 1.8rem;
599
- }
600
-
601
- .card-corner-bottom {
602
- transform: rotate(180deg);
603
- }
604
-
605
- .score-bubble {
606
- background: rgba(0, 0, 0, 0.6);
607
- padding: 2px 8px;
608
- border-radius: 10px;
609
- font-size: 0.8rem;
610
- color: white;
611
- margin-top: 5px;
612
- }
613
-
614
- .hidden-card {
615
- background: repeating-linear-gradient(45deg,
616
- #606dbc,
617
- #606dbc 10px,
618
- #465298 10px,
619
- #465298 20px);
620
- border: 2px solid white;
621
- }
622
-
623
- /* Responsive */
624
- @media (max-width: 768px) {
625
- .highlight-content {
626
- grid-template-columns: 1fr;
627
- }
628
-
629
- .highlight-image {
630
- height: 250px;
631
- }
632
-
633
- .highlight-image::after {
634
- background: linear-gradient(180deg, transparent 0%, var(--bg-panel) 100%);
635
- }
636
-
637
- .nav-controls span {
638
- display: none;
639
- }
640
-
641
- .daily-bonus-banner {
642
- flex-direction: column;
643
- text-align: center;
644
- }
645
-
646
- .modal {
647
- width: 95%;
648
- padding: 20px;
649
- }
650
-
651
- .playing-card {
652
- width: 50px;
653
- height: 75px;
654
- font-size: 1rem;
655
- }
656
-
657
- .card-center {
658
- font-size: 1.5rem;
659
- }
660
- }
661
- </style>
662
- </head>
663
 
664
- <body>
 
 
 
 
 
665
 
666
- <!-- Header -->
667
- <header>
668
- <div class="container">
669
- <nav>
670
- <div class="logo">
671
- <i class="fas fa-crown"></i>
672
- ROYAL FORTUNE
673
- </div>
674
- <div class="nav-controls">
675
- <select id="languageSelect" class="lang-select">
676
- <option value="en">EN</option>
677
- <option value="es">ES</option>
678
- <option value="fr">FR</option>
679
- <option value="de">DE</option>
680
- </select>
681
- <div class="balance-display">
682
- <i class="fas fa-coins"></i>
683
- <span id="balanceAmount">1000</span>
684
- </div>
685
- <button class="btn btn-gold" id="topUpBtn">
686
- <i class="fas fa-plus-circle"></i> <span data-i18n="topUp">Top Up</span>
687
- </button>
688
- </div>
689
- </nav>
690
- </div>
691
- </header>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
 
693
- <main class="container">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
694
 
695
- <!-- Hero & Daily Bonus -->
696
- <section class="hero">
697
- <div class="daily-bonus-banner">
698
- <div class="bonus-content">
699
- <h3 data-i18n="dailyBonusTitle">πŸ”₯ Daily Deposit Bonus</h3>
700
- <p id="dailyBonusText">Loading...</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
701
  </div>
702
- <button class="btn btn-outline" onclick="openTopUpModal()" data-i18n="claimNow">Claim Now</button>
703
- </div>
704
-
705
- <div class="game-highlight" id="highlightSection">
706
- <div class="highlight-badge" data-i18n="gameOfDay">Game of the Day</div>
707
- <div class="highlight-content">
708
- <div class="highlight-image" id="highlightImage"></div>
709
- <div class="highlight-text">
710
- <h2 id="highlightTitle">Loading...</h2>
711
- <p id="highlightDesc" style="color: var(--text-muted); margin: 15px 0;">Loading description...</p>
712
- <button class="btn btn-gold" id="highlightPlayBtn">
713
- <i class="fas fa-play"></i> <span data-i18n="playNow">Play Now</span>
714
- </button>
715
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
716
  </div>
717
- </div>
718
- </section>
719
-
720
- <!-- Games Grid -->
721
- <h2 class="section-title" data-i18n="ourGames">Our Games</h2>
722
- <section class="games-grid" id="gamesGrid">
723
- <!-- Games injected via JS -->
724
- </section>
725
-
726
- </main>
727
-
728
- <footer
729
- style="text-align: center; padding: 40px; color: var(--text-muted); font-size: 0.8rem; border-top: 1px solid rgba(255,255,255,0.05); background: var(--bg-panel);">
730
- <p>&copy; 2023 Royal Fortune Casino. All rights reserved.</p>
731
- <p style="margin-top: 10px;">Please gamble responsibly. This is a demo application.</p>
732
- <div style="margin-top: 20px;">
733
- <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank"
734
- style="color: var(--primary-gold); font-weight: bold;">
735
- Built with anycoder
736
- </a>
737
- </div>
738
- </footer>
739
-
740
- <!-- TOP UP MODAL -->
741
- <div class="modal-overlay" id="topUpModal">
742
- <div class="modal">
743
- <div class="modal-header">
744
- <h3 data-i18n="addFunds">Add Funds</h3>
745
- <button class="close-modal">&times;</button>
746
- </div>
747
- <div class="form-group">
748
- <label class="form-label" data-i18n="amount">Amount</label>
749
- <input type="number" id="topUpAmount" class="form-input" placeholder="Enter amount..." min="10">
750
- </div>
751
- <button class="btn btn-gold" id="confirmTopUp" style="width: 100%" data-i18n="confirm">Confirm</button>
752
  </div>
753
- </div>
754
-
755
- <!-- GAME MODAL -->
756
- <div class="modal-overlay" id="gameModal">
757
- <div class="modal">
758
- <div class="modal-header">
759
- <h3 id="activeGameTitle">Game Title</h3>
760
- <button class="close-modal">&times;</button>
761
- </div>
762
-
763
- <div class="game-area" id="gameArena">
764
- <!-- Dynamic Game Content Here -->
765
- </div>
766
-
767
- <div class="game-controls" id="gameControls">
768
- <!-- Dynamic Controls Here -->
769
- </div>
770
-
771
- <div
772
- style="text-align: center; margin-top: 15px; color: var(--text-muted); font-size: 0.9rem; border-top: 1px solid rgba(255,255,255,0.1); padding-top: 15px;">
773
- <span data-i18n="yourBet">Your Bet</span>:
774
- <span id="currentBetDisplay" style="color: #fff; font-weight: bold; margin-left: 5px;">10</span>
775
- <div style="margin-top: 10px;">
776
- <button class="btn btn-outline" style="padding: 2px 10px; font-size: 0.8rem;" onclick="adjustBet(10)">+10</button>
777
- <button class="btn btn-outline" style="padding: 2px 10px; font-size: 0.8rem;" onclick="adjustBet(-10)">-10</button>
778
  </div>
779
- </div>
780
  </div>
781
- </div>
782
-
783
- <!-- Toast Container -->
784
- <div class="toast-container" id="toastContainer"></div>
785
-
786
- <script>
787
- // --- DATA & STATE ---
788
- const state = {
789
- balance: 1000,
790
- currentBet: 10,
791
- lang: 'en',
792
- activeGame: null,
793
- // Game specific states
794
- bjDeck: [],
795
- bjPlayerHand: [],
796
- bjDealerHand: [],
797
- bjGameActive: false
798
- };
799
-
800
- const translations = {
801
- en: {
802
- topUp: "Top Up",
803
- dailyBonusTitle: "πŸ”₯ Daily Deposit Bonus",
804
- claimNow: "Claim Now",
805
- gameOfDay: "Game of the Day",
806
- playNow: "Play Now",
807
- ourGames: "Our Games",
808
- addFunds: "Add Funds",
809
- amount: "Amount",
810
- confirm: "Confirm",
811
- yourBet: "Your Bet",
812
- spin: "Spin",
813
- hit: "Hit",
814
- stand: "Stand",
815
- double: "Double",
816
- pickColor: "Pick Color",
817
- pickHigher: "Higher",
818
- pickLower: "Lower",
819
- flip: "Flip Coin",
820
- red: "Red",
821
- black: "Black",
822
- green: "Green",
823
- msgWin: "You Won!",
824
- msgLose: "Dealer Wins",
825
- msgPush: "Push (Tie)",
826
- msgBust: "Bust! You Lose",
827
- msgBlackjack: "BLACKJACK!",
828
- msgInsufficient: "Insufficient funds!",
829
- msgTopUpSuccess: "Funds added successfully!",
830
- bonusText: "Get {value}% extra on every deposit today!",
831
- dealer: "Dealer",
832
- you: "You",
833
- games: {
834
- slots: { name: "Neon Slots", desc: "Match symbols to win big!" },
835
- blackjack: { name: "Blackjack", desc: "Beat the dealer to 21." },
836
- roulette: { name: "Mini Roulette", desc: "Pick your lucky color." },
837
- highlow: { name: "High Low", desc: "Guess the next card." }
838
- }
839
- },
840
- es: {
841
- topUp: "Recargar",
842
- dailyBonusTitle: "πŸ”₯ Bono Diario",
843
- claimNow: "Reclamar",
844
- gameOfDay: "Juego del DΓ­a",
845
- playNow: "Jugar Ahora",
846
- ourGames: "Nuestros Juegos",
847
- addFunds: "AΓ±adir Fondos",
848
- amount: "Cantidad",
849
- confirm: "Confirmar",
850
- yourBet: "Tu Apuesta",
851
- spin: "Girar",
852
- hit: "Pedir",
853
- stand: "Plantarse",
854
- double: "Doblar",
855
- pickColor: "Elige Color",
856
- pickHigher: "MΓ‘s Alto",
857
- pickLower: "MΓ‘s Bajo",
858
- flip: "Lanzar",
859
- red: "Rojo",
860
- black: "Negro",
861
- green: "Verde",
862
- msgWin: "Β‘Ganaste!",
863
- msgLose: "Gana la Casa",
864
- msgPush: "Empate",
865
- msgBust: "Β‘Te pasaste!",
866
- msgBlackjack: "Β‘BLACKJACK!",
867
- msgInsufficient: "Β‘Fondos insuficientes!",
868
- msgTopUpSuccess: "Β‘Fondos aΓ±adidos con Γ©xito!",
869
- bonusText: "Β‘ObtΓ©n un {value}% extra en cada depΓ³sito hoy!",
870
- dealer: "Croupier",
871
- you: "TΓΊ",
872
- games: {
873
- slots: { name: "Tragamonedas", desc: "Β‘Combina sΓ­mbolos para ganar!" },
874
- blackjack: { name: "Blackjack", desc: "Supera al croupier con 21." },
875
- roulette: { name: "Ruleta Mini", desc: "Elige tu color de la suerte." },
876
- highlow: { name: "Alto Bajo", desc: "Adivina la siguiente carta." }
877
- }
878
- },
879
- fr: {
880
- topUp: "Recharger",
881
- dailyBonusTitle: "πŸ”₯ Bonus Quotidien",
882
- claimNow: "RΓ©clamer",
883
- gameOfDay: "Jeu du Jour",
884
- playNow: "Jouer",
885
- ourGames: "Nos Jeux",
886
- addFunds: "Ajouter des Fonds",
887
- amount: "Montant",
888
- confirm: "Confirmer",
889
- yourBet: "Votre Mise",
890
- spin: "Tourner",
891
- hit: "Carte",
892
- stand: "Servi",
893
- double: "Doubler",
894
- pickColor: "Choisir Couleur",
895
- pickHigher: "Plus Haut",
896
- pickLower: "Plus Bas",
897
- flip: "Lancer",
898
- red: "Rouge",
899
- black: "Noir",
900
- green: "Vert",
901
- msgWin: "Vous avez gagnΓ©!",
902
- msgLose: "La Maison Gagne",
903
- msgPush: "Γ‰galitΓ©",
904
- msgBust: "Perdu!",
905
- msgBlackjack: "BLACKJACK!",
906
- msgInsufficient: "Fonds insuffisants!",
907
- msgTopUpSuccess: "Fonds ajoutés avec succès!",
908
- bonusText: "Obtenez {value}% de plus sur chaque dΓ©pΓ΄t aujourd'hui!",
909
- dealer: "Croupier",
910
- you: "Vous",
911
- games: {
912
- slots: { name: "Machine Γ  Sous", desc: "Alignez les symboles!" },
913
- blackjack: { name: "Blackjack", desc: "Battre le croupier." },
914
- roulette: { name: "Mini Roulette", desc: "Choisissez votre couleur." },
915
- highlow: { name: "Plus ou Moins", desc: "Devinez la carte suivante." }
916
- }
917
- },
918
- de: {
919
- topUp: "Aufladen",
920
- dailyBonusTitle: "πŸ”₯ TΓ€gliches Bonus",
921
- claimNow: "Fordern",
922
- gameOfDay: "Spiel des Tages",
923
- playNow: "Jetzt Spielen",
924
- ourGames: "Unsere Spiele",
925
- addFunds: "Guthaben Aufladen",
926
- amount: "Betrag",
927
- confirm: "BestΓ€tigen",
928
- yourBet: "Dein Einsatz",
929
- spin: "Drehen",
930
- hit: "Karte",
931
- stand: "Halten",
932
- double: "Verdoppeln",
933
- pickColor: "Farbe WΓ€hlen",
934
- pickHigher: "HΓΆher",
935
- pickLower: "Niedriger",
936
- flip: "Werfen",
937
- red: "Rot",
938
- black: "Schwarz",
939
- green: "GrΓΌn",
940
- msgWin: "Gewonnen!",
941
- msgLose: "Bank Gewinnt",
942
- msgPush: "Unentschieden",
943
- msgBust: "Verloren!",
944
- msgBlackjack: "BLACKJACK!",
945
- msgInsufficient: "Nicht genug Guthaben!",
946
- msgTopUpSuccess: "Guthaben erfolgreich aufgeladen!",
947
- bonusText: "Erhalten Sie heute {value
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <!DOCTYPE html>
2
  <html lang="en">
 
3
  <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Royal Fortune | Modern Casino</title>
7
+
8
+ <!-- Google Fonts: Inter for clean, modern UI -->
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=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
12
+
13
+ <!-- FontAwesome for Icons -->
14
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
15
+
16
+ <style>
17
+ /* --- CSS VARIABLES & RESET --- */
18
+ :root {
19
+ --bg-body: #0f172a;
20
+ --bg-surface: #1e293b;
21
+ --bg-surface-hover: #334155;
22
+ --primary: #6366f1; /* Indigo */
23
+ --primary-hover: #4f46e5;
24
+ --accent-gold: #fbbf24;
25
+ --accent-red: #ef4444;
26
+ --accent-green: #10b981;
27
+ --text-main: #f8fafc;
28
+ --text-muted: #94a3b8;
29
+ --border: #334155;
30
+ --radius-sm: 8px;
31
+ --radius-md: 12px;
32
+ --radius-lg: 20px;
33
+ --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
34
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.3);
35
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
+ * {
38
+ box-sizing: border-box;
39
+ margin: 0;
40
+ padding: 0;
41
+ -webkit-tap-highlight-color: transparent;
42
+ }
43
 
44
+ body {
45
+ font-family: 'Inter', sans-serif;
46
+ background-color: var(--bg-body);
47
+ color: var(--text-main);
48
+ line-height: 1.5;
49
+ min-height: 100vh;
50
+ display: flex;
51
+ flex-direction: column;
52
+ }
53
+
54
+ /* --- UTILITIES --- */
55
+ .container {
56
+ width: 100%;
57
+ max-width: 1200px;
58
+ margin: 0 auto;
59
+ padding: 0 20px;
60
+ }
61
+
62
+ .flex-center { display: flex; align-items: center; justify-content: center; }
63
+ .flex-between { display: flex; align-items: center; justify-content: space-between; }
64
+ .text-center { text-align: center; }
65
+ .hidden { display: none !important; }
66
+
67
+ /* --- BUTTONS --- */
68
+ .btn {
69
+ display: inline-flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ gap: 8px;
73
+ padding: 10px 20px;
74
+ border-radius: var(--radius-md);
75
+ border: none;
76
+ font-weight: 600;
77
+ cursor: pointer;
78
+ transition: all 0.2s ease;
79
+ font-size: 0.95rem;
80
+ }
81
+
82
+ .btn:active { transform: scale(0.98); }
83
+
84
+ .btn-primary {
85
+ background-color: var(--primary);
86
+ color: white;
87
+ }
88
+ .btn-primary:hover { background-color: var(--primary-hover); }
89
+
90
+ .btn-outline {
91
+ background: transparent;
92
+ border: 1px solid var(--border);
93
+ color: var(--text-main);
94
+ }
95
+ .btn-outline:hover { background-color: var(--bg-surface-hover); border-color: var(--text-muted); }
96
+
97
+ .btn-gold {
98
+ background: linear-gradient(135deg, var(--accent-gold), #d97706);
99
+ color: #000;
100
+ }
101
+ .btn-gold:hover { filter: brightness(1.1); }
102
+
103
+ .btn-danger { background-color: var(--accent-red); color: white; }
104
+ .btn-success { background-color: var(--accent-green); color: white; }
105
+
106
+ /* --- HEADER --- */
107
+ header {
108
+ background: rgba(15, 23, 42, 0.9);
109
+ backdrop-filter: blur(10px);
110
+ position: sticky;
111
+ top: 0;
112
+ z-index: 50;
113
+ padding: 16px 0;
114
+ border-bottom: 1px solid var(--border);
115
+ }
116
+
117
+ .logo {
118
+ font-size: 1.25rem;
119
+ font-weight: 700;
120
+ color: var(--text-main);
121
+ display: flex;
122
+ align-items: center;
123
+ gap: 8px;
124
+ }
125
+ .logo i { color: var(--accent-gold); }
126
+
127
+ .header-controls {
128
+ display: flex;
129
+ align-items: center;
130
+ gap: 12px;
131
+ }
132
+
133
+ .balance-pill {
134
+ background: var(--bg-surface);
135
+ padding: 6px 12px;
136
+ border-radius: 20px;
137
+ font-weight: 600;
138
+ color: var(--accent-gold);
139
+ font-size: 0.9rem;
140
+ display: flex;
141
+ align-items: center;
142
+ gap: 6px;
143
+ border: 1px solid rgba(251, 191, 36, 0.2);
144
+ }
145
+
146
+ .lang-select {
147
+ background: transparent;
148
+ color: var(--text-muted);
149
+ border: none;
150
+ font-family: inherit;
151
+ cursor: pointer;
152
+ font-size: 0.9rem;
153
+ }
154
+
155
+ /* --- HERO & PROMO --- */
156
+ .hero {
157
+ padding: 40px 0;
158
+ }
159
+
160
+ .promo-card {
161
+ background: linear-gradient(135deg, #1e293b, #0f172a);
162
+ border: 1px solid var(--border);
163
+ border-radius: var(--radius-lg);
164
+ padding: 30px;
165
+ display: grid;
166
+ grid-template-columns: 1fr 1fr;
167
+ gap: 30px;
168
+ align-items: center;
169
+ margin-bottom: 40px;
170
+ position: relative;
171
+ overflow: hidden;
172
+ }
173
+
174
+ /* Decorative background blob */
175
+ .promo-card::before {
176
+ content: '';
177
+ position: absolute;
178
+ top: -50%;
179
+ right: -20%;
180
+ width: 400px;
181
+ height: 400px;
182
+ background: var(--primary);
183
+ filter: blur(120px);
184
+ opacity: 0.15;
185
+ border-radius: 50%;
186
+ }
187
+
188
+ .promo-content {
189
+ position: relative;
190
+ z-index: 1;
191
+ }
192
+
193
+ .promo-title {
194
+ font-size: 2rem;
195
+ margin-bottom: 10px;
196
+ background: linear-gradient(to right, #fff, #94a3b8);
197
+ -webkit-background-clip: text;
198
+ -webkit-text-fill-color: transparent;
199
+ }
200
+
201
+ .promo-desc {
202
+ color: var(--text-muted);
203
+ margin-bottom: 20px;
204
+ }
205
+
206
+ .promo-image {
207
+ height: 200px;
208
+ background: url('https://picsum.photos/seed/casino/600/400') center/cover no-repeat;
209
+ border-radius: var(--radius-md);
210
+ opacity: 0.8;
211
+ box-shadow: var(--shadow-lg);
212
+ }
213
+
214
+ /* --- GAMES GRID --- */
215
+ .section-header {
216
+ margin-bottom: 20px;
217
+ display: flex;
218
+ justify-content: space-between;
219
+ align-items: flex-end;
220
+ }
221
+ .section-title { font-size: 1.5rem; font-weight: 700; }
222
+
223
+ .games-grid {
224
+ display: grid;
225
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
226
+ gap: 20px;
227
+ margin-bottom: 60px;
228
+ }
229
+
230
+ .game-card {
231
+ background: var(--bg-surface);
232
+ border-radius: var(--radius-md);
233
+ overflow: hidden;
234
+ transition: transform 0.2s, box-shadow 0.2s;
235
+ cursor: pointer;
236
+ border: 1px solid transparent;
237
+ display: flex;
238
+ flex-direction: column;
239
+ }
240
+
241
+ .game-card:hover {
242
+ transform: translateY(-4px);
243
+ box-shadow: var(--shadow-lg);
244
+ border-color: var(--primary);
245
+ }
246
+
247
+ .card-thumb {
248
+ height: 160px;
249
+ background-color: #000;
250
+ position: relative;
251
+ background-size: cover;
252
+ background-position: center;
253
+ }
254
+
255
+ .card-thumb::after {
256
+ content: '';
257
+ position: absolute;
258
+ inset: 0;
259
+ background: linear-gradient(to top, var(--bg-surface), transparent);
260
+ }
261
+
262
+ .card-body {
263
+ padding: 16px;
264
+ flex: 1;
265
+ display: flex;
266
+ flex-direction: column;
267
+ justify-content: space-between;
268
+ }
269
+
270
+ .game-name { font-weight: 600; font-size: 1.1rem; margin-bottom: 4px; }
271
+ .game-meta { font-size: 0.85rem; color: var(--text-muted); display: flex; justify-content: space-between; }
272
+ .game-tag { background: rgba(99, 102, 241, 0.2); color: var(--primary); padding: 2px 6px; border-radius: 4px; font-size: 0.7rem; font-weight: 600; }
273
+
274
+ /* --- MODALS --- */
275
+ .modal-overlay {
276
+ position: fixed;
277
+ inset: 0;
278
+ background: rgba(0, 0, 0, 0.8);
279
+ backdrop-filter: blur(4px);
280
+ z-index: 100;
281
+ display: flex;
282
+ align-items: center;
283
+ justify-content: center;
284
+ opacity: 0;
285
+ visibility: hidden;
286
+ transition: all 0.2s;
287
+ padding: 20px;
288
+ }
289
+
290
+ .modal-overlay.active { opacity: 1; visibility: visible; }
291
+
292
+ .modal {
293
+ background: var(--bg-surface);
294
+ width: 100%;
295
+ max-width: 500px;
296
+ border-radius: var(--radius-lg);
297
+ border: 1px solid var(--border);
298
+ box-shadow: var(--shadow-lg);
299
+ transform: scale(0.95);
300
+ transition: transform 0.2s;
301
+ overflow: hidden;
302
+ display: flex;
303
+ flex-direction: column;
304
+ max-height: 90vh;
305
+ }
306
+
307
+ .modal-overlay.active .modal { transform: scale(1); }
308
+
309
+ .modal-header {
310
+ padding: 20px;
311
+ border-bottom: 1px solid var(--border);
312
+ display: flex;
313
+ justify-content: space-between;
314
+ align-items: center;
315
+ }
316
+
317
+ .modal-title { font-size: 1.25rem; font-weight: 700; }
318
+
319
+ .close-btn {
320
+ background: none;
321
+ border: none;
322
+ color: var(--text-muted);
323
+ font-size: 1.25rem;
324
+ cursor: pointer;
325
+ }
326
+
327
+ .modal-body {
328
+ padding: 20px;
329
+ overflow-y: auto;
330
+ }
331
+
332
+ .modal-footer {
333
+ padding: 16px 20px;
334
+ border-top: 1px solid var(--border);
335
+ background: rgba(0,0,0,0.2);
336
+ display: flex;
337
+ justify-content: space-between;
338
+ align-items: center;
339
+ }
340
+
341
+ /* --- GAME UI COMPONENTS --- */
342
+ .game-arena {
343
+ background: #000;
344
+ border-radius: var(--radius-md);
345
+ min-height: 250px;
346
+ display: flex;
347
+ flex-direction: column;
348
+ justify-content: center;
349
+ align-items: center;
350
+ margin-bottom: 20px;
351
+ position: relative;
352
+ padding: 20px;
353
+ border: 1px solid var(--border);
354
+ }
355
+
356
+ .game-message {
357
+ font-size: 1.5rem;
358
+ font-weight: 700;
359
+ margin-bottom: 10px;
360
+ text-align: center;
361
+ }
362
+
363
+ /* Playing Cards */
364
+ .cards-row {
365
+ display: flex;
366
+ justify-content: center;
367
+ gap: 10px;
368
+ margin: 10px 0;
369
+ flex-wrap: wrap;
370
+ }
371
+
372
+ .playing-card {
373
+ width: 60px;
374
+ height: 84px;
375
+ background: white;
376
+ border-radius: 6px;
377
+ color: #333;
378
+ font-weight: bold;
379
+ display: flex;
380
+ flex-direction: column;
381
+ justify-content: space-between;
382
+ padding: 6px;
383
+ font-size: 1.2rem;
384
+ box-shadow: 0 2px 5px rgba(0,0,0,0.3);
385
+ animation: dealCard 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
386
+ }
387
+
388
+ @keyframes dealCard {
389
+ from { opacity: 0; transform: translateY(-20px) scale(0.8); }
390
+ to { opacity: 1; transform: translateY(0) scale(1); }
391
+ }
392
+
393
+ .playing-card.red { color: #dc2626; }
394
+ .playing-card.black { color: #1e293b; }
395
+
396
+ .card-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 1.5rem; }
397
+ .card-corner-bottom { transform: rotate(180deg); }
398
+
399
+ .hidden-card {
400
+ background: repeating-linear-gradient(45deg, #1e293b, #1e293b 10px, #334155 10px, #334155 20px);
401
+ border: 2px solid #fff;
402
+ }
403
+ .hidden-card * { display: none; }
404
+
405
+ /* Slot Machine */
406
+ .slot-machine {
407
+ display: flex;
408
+ gap: 10px;
409
+ background: #222;
410
+ padding: 15px;
411
+ border-radius: 10px;
412
+ border: 4px solid var(--accent-gold);
413
+ }
414
+ .slot-reel {
415
+ width: 60px;
416
+ height: 80px;
417
+ background: #fff;
418
+ border-radius: 4px;
419
+ display: flex;
420
+ align-items: center;
421
+ justify-content: center;
422
+ font-size: 2.5rem;
423
+ color: #333;
424
+ }
425
+
426
+ /* Controls */
427
+ .bet-controls {
428
+ display: flex;
429
+ align-items: center;
430
+ gap: 10px;
431
+ background: var(--bg-surface-hover);
432
+ padding: 5px;
433
+ border-radius: var(--radius-sm);
434
+ }
435
+ .bet-btn {
436
+ width: 32px;
437
+ height: 32px;
438
+ border-radius: 6px;
439
+ border: none;
440
+ background: var(--bg-surface);
441
+ color: var(--text-main);
442
+ cursor: pointer;
443
+ font-weight: bold;
444
+ }
445
+ .bet-btn:hover { background: var(--primary); color: white; }
446
+ .bet-display { min-width: 60px; text-align: center; font-weight: 600; }
447
+
448
+ .game-actions {
449
+ display: grid;
450
+ grid-template-columns: repeat(3, 1fr);
451
+ gap: 10px;
452
+ }
453
+ .game-actions.full { grid-template-columns: 1fr; }
454
+
455
+ /* --- TOAST NOTIFICATIONS --- */
456
+ .toast-container {
457
+ position: fixed;
458
+ bottom: 20px;
459
+ right: 20px;
460
+ z-index: 200;
461
+ display: flex;
462
+ flex-direction: column;
463
+ gap: 10px;
464
+ }
465
 
466
+ .toast {
467
+ background: var(--bg-surface);
468
+ border-left: 4px solid var(--primary);
469
+ padding: 12px 20px;
470
+ border-radius: 4px;
471
+ box-shadow: var(--shadow-lg);
472
+ color: var(--text-main);
473
+ font-size: 0.9rem;
474
+ animation: slideIn 0.3s ease;
475
+ display: flex;
476
+ align-items: center;
477
+ gap: 10px;
478
+ }
479
+ .toast.success { border-color: var(--accent-green); }
480
+ .toast.error { border-color: var(--accent-red); }
481
+
482
+ @keyframes slideIn {
483
+ from { transform: translateX(100%); opacity: 0; }
484
+ to { transform: translateX(0); opacity: 1; }
485
+ }
486
+
487
+ /* --- FOOTER --- */
488
+ footer {
489
+ margin-top: auto;
490
+ padding: 30px 0;
491
+ background: var(--bg-surface);
492
+ border-top: 1px solid var(--border);
493
+ text-align: center;
494
+ }
495
+ .footer-link {
496
+ color: var(--text-muted);
497
+ text-decoration: none;
498
+ font-size: 0.85rem;
499
+ transition: color 0.2s;
500
+ }
501
+ .footer-link:hover { color: var(--primary); }
502
+
503
+ /* --- RESPONSIVE --- */
504
+ @media (max-width: 768px) {
505
+ .promo-card { grid-template-columns: 1fr; text-align: center; }
506
+ .promo-image { height: 150px; order: -1; }
507
+ .header-controls span { display: none; } /* Hide label text on mobile */
508
+ .modal { height: 100vh; max-height: 100vh; border-radius: 0; }
509
+ }
510
+ </style>
511
+ </head>
512
+ <body>
513
 
514
+ <!-- NAV -->
515
+ <header>
516
+ <div class="container flex-between">
517
+ <div class="logo">
518
+ <i class="fas fa-crown"></i>
519
+ <span>ROYAL FORTUNE</span>
520
+ </div>
521
+ <div class="header-controls">
522
+ <select id="langSelect" class="lang-select">
523
+ <option value="en">EN</option>
524
+ <option value="es">ES</option>
525
+ <option value="fr">FR</option>
526
+ <option value="de">DE</option>
527
+ </select>
528
+ <div class="balance-pill">
529
+ <i class="fas fa-coins"></i>
530
+ <span id="balanceDisplay">1000</span>
531
+ </div>
532
+ <button class="btn btn-primary" id="topUpBtn">
533
+ <i class="fas fa-plus"></i>
534
+ <span class="desktop-only" data-i18n="topUp">Top Up</span>
535
+ </button>
536
+ </div>
537
  </div>
538
+ </header>
539
+
540
+ <!-- MAIN CONTENT -->
541
+ <main class="container">
542
+
543
+ <!-- HERO -->
544
+ <section class="hero">
545
+ <div class="promo-card">
546
+ <div class="promo-content">
547
+ <h1 class="promo-title" data-i18n="heroTitle">Welcome to Fortune</h1>
548
+ <p class="promo-desc" data-i18n="heroDesc">Experience the thrill of modern gaming. Play smarter, win bigger.</p>
549
+ <div style="margin-bottom: 15px;">
550
+ <span style="background: rgba(16, 185, 129, 0.2); color: var(--accent-green); padding: 4px 8px; border-radius: 4px; font-size: 0.8rem; font-weight: 600;">
551
+ <i class="fas fa-gift"></i> <span data-i18n="dailyBonus">Daily Bonus Active</span>
552
+ </span>
553
+ </div>
554
+ <button class="btn btn-gold" onclick="openGame('blackjack')">
555
+ <span data-i18n="playNow">Play Now</span> <i class="fas fa-arrow-right"></i>
556
+ </button>
557
+ </div>
558
+ <div class="promo-image"></div>
559
+ </div>
560
+ </section>
561
+
562
+ <!-- GAMES -->
563
+ <section>
564
+ <div class="section-header">
565
+ <h2 class="section-title" data-i18n="ourGames">Our Games</h2>
566
+ </div>
567
+
568
+ <div class="games-grid" id="gamesGrid">
569
+ <!-- Injected via JS -->
570
+ </div>
571
+ </section>
572
+
573
+ </main>
574
+
575
+ <!-- FOOTER -->
576
+ <footer>
577
+ <div class="container">
578
+ <p style="color: var(--text-muted); font-size: 0.85rem; margin-bottom: 10px;">
579
+ &copy; 2023 Royal Fortune. <span data-i18n="responsibleGamble">Please gamble responsibly.</span>
580
+ </p>
581
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="footer-link" style="font-weight: 600; color: var(--primary);">
582
+ Built with anycoder
583
+ </a>
584
+ </div>
585
+ </footer>
586
+
587
+ <!-- TOP UP MODAL -->
588
+ <div class="modal-overlay" id="topUpModal">
589
+ <div class="modal">
590
+ <div class="modal-header">
591
+ <h3 class="modal-title" data-i18n="addFunds">Add Funds</h3>
592
+ <button class="close-btn" onclick="closeModal('topUpModal')">&times;</button>
593
+ </div>
594
+ <div class="modal-body">
595
+ <div class="form-group">
596
+ <label style="display:block; margin-bottom: 8px; color: var(--text-muted);" data-i18n="amount">Amount</label>
597
+ <input type="number" id="topUpInput" class="form-input" value="500" min="10" style="width: 100%; padding: 12px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg-body); color: white;">
598
+ </div>
599
+ </div>
600
+ <div class="modal-footer">
601
+ <button class="btn btn-outline" onclick="closeModal('topUpModal')" data-i18n="cancel">Cancel</button>
602
+ <button class="btn btn-primary" onclick="processTopUp()" data-i18n="confirm">Confirm</button>
603
+ </div>
604
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  </div>
606
+
607
+ <!-- GAME MODAL -->
608
+ <div class="modal-overlay" id="gameModal">
609
+ <div class="modal" style="max-width: 600px;">
610
+ <div class="modal-header">
611
+ <h3 class="modal-title" id="gameModalTitle">Game</h3>
612
+ <button class="close-btn" onclick="closeGame()">&times;</button>
613
+ </div>
614
+ <div class="modal-body">
615
+ <div class="game-arena" id="gameArena">
616
+ <!-- Dynamic Game Content -->
617
+ </div>
618
+ </div>
619
+ <div class="modal-footer">
620
+ <div class="bet-controls">
621
+ <button class="bet-btn" onclick="adjustBet(-10)">-</button>
622
+ <span class="bet-display"><i class="fas fa-coins" style="color: var(--accent-gold)"></i> <span id="currentBet">10</span></span>
623
+ <button class="bet-btn" onclick="adjustBet(10)">+</button>
624
+ </div>
625
+ <div class="game-actions" id="gameControls">
626
+ <!-- Dynamic Buttons -->
627
+ </div>
628
+ </div>
 
 
629
  </div>
 
630
  </div>
631
+
632
+ <!-- TOAST CONTAINER -->
633
+ <div class="toast-container" id="toastContainer"></div>
634
+
635
+ <script>
636
+ // --- TRANSLATIONS ---
637
+ const i18n = {
638
+ en: {
639
+ topUp: "Top Up", heroTitle: "Welcome to Fortune", heroDesc: "Experience the thrill of modern gaming.",
640
+ dailyBonus: "Daily Bonus Active", playNow: "Play Now", ourGames: "Our Games",
641
+ addFunds: "Add Funds", amount: "Amount", confirm: "Confirm", cancel: "Cancel",
642
+ spin: "Spin", hit: "Hit", stand: "Stand", double: "Double",
643
+ red: "Red", black: "Black", green: "Green", higher: "Higher", lower: "Lower",
644
+ msgWin: "You Won!", msgLose: "House Wins", msgBust: "Bust!", msgTie: "Push",
645
+ msgInsufficient: "Insufficient Funds!", responsibleGamble: "Please gamble responsibly.",
646
+ games: {
647
+ slots: { name: "Neon Slots", desc: "Match symbols to win" },
648
+ blackjack: { name: "Blackjack", desc: "Beat the dealer to 21" },
649
+ roulette: { name: "Roulette", desc: "Pick your lucky color" },
650
+ highlow: { name: "High Low", desc: "Guess the next card" }
651
+ }
652
+ },
653
+ es: {
654
+ topUp: "Recargar", heroTitle: "Bienvenido", heroDesc: "Vive la emociΓ³n del juego moderno.",
655
+ dailyBonus: "Bono Diario Activo", playNow: "Jugar", ourGames: "Nuestros Juegos",
656
+ addFunds: "AΓ±adir Fondos", amount: "Cantidad", confirm: "Confirmar", cancel: "Cancelar",
657
+ spin: "Girar", hit: "Pedir", stand: "Plantarse", double: "Doblar",
658
+ red: "Rojo", black: "Negro", green: "Verde", higher: "MΓ‘s Alto", lower: "MΓ‘s Bajo",
659
+ msgWin: "Β‘Ganaste!", msgLose: "Gana la Casa", msgBust: "Β‘Te pasaste!", msgTie: "Empate",
660
+ msgInsufficient: "Β‘Fondos insuficientes!", responsibleGamble: "Juega con responsabilidad.",
661
+ games: {
662
+ slots: { name: "Tragamonedas", desc: "Combina sΓ­mbolos" },
663
+ blackjack: { name: "Blackjack", desc: "Supera al croupier" },
664
+ roulette: { name: "Ruleta", desc: "Elige tu color" },
665
+ highlow: { name: "Alto Bajo", desc: "Adivina la carta" }
666
+ }
667
+ }
668
+ // Simplified for brevity, defaulting to EN/ES logic
669
+ };
670
+
671
+ // --- STATE ---
672
+ const state = {
673
+ balance: 1000,
674
+ bet: 10,
675
+ lang: 'en',
676
+ activeGame: null,
677
+ // Game States
678
+ bj: { deck: [], player: [], dealer: [], active: false },
679
+ slots: { symbols: ['πŸ’', 'πŸ‹', 'πŸ‰', '⭐', 'πŸ’Ž', '7️⃣'] }
680
+ };
681
+
682
+ // --- CORE FUNCTIONS ---
683
+ function init() {
684
+ renderGames();
685
+ updateBalanceUI();
686
+ setupEventListeners();
687
+ }
688
+
689
+ function updateText() {
690
+ document.querySelectorAll('[data-i18n]').forEach(el => {
691
+ const key = el.getAttribute('data-i18n');
692
+ if (i18n[state.lang][key]) {
693
+ el.textContent = i18n[state.lang][key];
694
+ }
695
+ });
696
+ renderGames(); // Re-render grid for game titles
697
+ }
698
+
699
+ function updateBalanceUI() {
700
+ document.getElementById('balanceDisplay').textContent = state.balance;
701
+ document.getElementById('currentBet').textContent = state.bet;
702
+ }
703
+
704
+ function showToast(msg, type = 'info') {
705
+ const container = document.getElementById('toastContainer');
706
+ const toast = document.createElement('div');
707
+ toast.className = `toast ${type}`;
708
+ toast.innerHTML = `<i class="fas fa-${type === 'success' ? 'check-circle' : type === 'error' ? 'exclamation-circle' : 'info-circle'}"></i> ${msg}`;
709
+ container.appendChild(toast);
710
+ setTimeout(() => toast.remove(), 3000);
711
+ }
712
+
713
+ // --- MODAL & NAVIGATION ---
714
+ function openModal(id) { document.getElementById(id).classList.add('active'); }
715
+ function closeModal(id) { document.getElementById(id).classList.remove('active'); }
716
+
717
+ function openTopUp() { openModal('topUpModal'); }
718
+
719
+ function processTopUp() {
720
+ const amount = parseInt(document.getElementById('topUpInput').value);
721
+ if (amount > 0) {
722
+ state.balance += amount;
723
+ updateBalanceUI();
724
+ closeModal('topUpModal');
725
+ showToast(i18n[state.lang].msgTopUpSuccess || "Funds added!", 'success');
726
+ }
727
+ }
728
+
729
+ function openGame(gameId) {
730
+ if (state.balance < state.bet) {
731
+ showToast(i18n[state.lang].msgInsufficient, 'error');
732
+ openTopUp();
733
+ return;
734
+ }
735
+ state.activeGame = gameId;
736
+ const gameNames = i18n[state.lang].games;
737
+ document.getElementById('gameModalTitle').textContent = gameNames[gameId].name;
738
+ openModal('gameModal');
739
+
740
+ // Init Game
741
+ if (gameId === 'blackjack') initBlackjack();
742
+ else if (gameId === 'slots') initSlots();
743
+ else if (gameId === 'roulette') initRoulette();
744
+ else if (gameId === 'highlow') initHighLow();
745
+ }
746
+
747
+ function closeGame() {
748
+ closeModal('gameModal');
749
+ state.activeGame = null;
750
+ }
751
+
752
+ function adjustBet(amount) {
753
+ const newBet = state.bet + amount;
754
+ if (newBet >= 10 && newBet <= state.balance) {
755
+ state.bet = newBet;
756
+ updateBalanceUI();
757
+ }
758
+ }
759
+
760
+ // --- GAME GRID RENDERING ---
761
+ function renderGames() {
762
+ const grid = document.getElementById('gamesGrid');
763
+ const games = ['slots', 'blackjack', 'roulette', 'highlow'];
764
+ const meta = i18n[state.lang].games;
765
+
766
+ grid.innerHTML = games.map(g => {
767
+ const info = meta[g];
768
+ // Generate a consistent gradient based on game name
769
+ return `
770
+ <div class="game-card" onclick="openGame('${g}')">
771
+ <div class="card-thumb" style="background: linear-gradient(135deg, hsl(${Math.random()*360}, 60%, 20%), hsl(${Math.random()*360}, 60%, 10%))">
772
+ <div style="position: absolute; bottom: 10px; left: 10px; font-size: 2rem;">
773
+ ${g === 'slots' ? '🎰' : g === 'blackjack' ? 'πŸƒ' : g === 'roulette' ? '🎑' : 'πŸ“ˆ'}
774
+ </div>
775
+ </div>
776
+ <div class="card-body">
777
+ <div>
778
+ <div class="game-name">${info.name}</div>
779
+ <div class="game-meta">
780
+ <span>${info.desc}</span>
781
+ </div>
782
+ </div>
783
+ <div style="margin-top: 10px; display:flex; justify-content:space-between; align-items:center;">
784
+ <span class="game-tag">CASINO</span>
785
+ <i class="fas fa-play-circle" style="color: var(--primary);"></i>
786
+ </div>
787
+ </div>
788
+ </div>
789
+ `;
790
+ }).join('');
791
+ }
792
+
793
+ // --- GAME LOGIC: BLACKJACK ---
794
+ function initBlackjack() {
795
+ state.bj = { deck: [], player: [], dealer: [], active: true };
796
+ createDeck();
797
+ shuffleDeck();
798
+ dealBJ();
799
+ renderBJ();
800
+
801
+ const controls = document.getElementById('gameControls');
802
+ controls.innerHTML = `
803
+ <button class="btn btn-primary" onclick="bjHit()">${i18n[state.lang].hit}</button>
804
+ <button class="btn btn-danger" onclick="bjStand()">${i18n[state.lang].stand}</button>
805
+ <button class="btn btn-outline" onclick="bjDouble()" id="bjDoubleBtn">${i18n[state.lang].double}</button>
806
+ `;
807
+
808
+ if (state.bet * 2 > state.balance) document.getElementById('bjDoubleBtn').disabled = true;
809
+ }
810
+
811
+ function createDeck() {
812
+ const suits = ['β™ ', 'β™₯', '♦', '♣'];
813
+ const values = ['2','3','4','5','6','7','8','9','10','J','Q','K','A'];
814
+ state.bj.deck = [];
815
+ for(let s of suits) {
816
+ for(let v of values) {
817
+ state.bj.deck.push({ suit: s, value: v });
818
+ }
819
+ }
820
+ }
821
+
822
+ function shuffleDeck() {
823
+ for (let i = state.bj.deck.length - 1; i > 0; i--) {
824
+ const j = Math.floor(Math.random() * (i + 1));
825
+ [state.bj.deck[i], state.bj.deck[j]] = [state.bj.deck[j], state.bj.deck[i]];
826
+ }
827
+ }
828
+
829
+ function getHandValue(hand) {
830
+ let val = 0;
831
+ let aces = 0;
832
+ for(let card of hand) {
833
+ if (['J','Q','K'].includes(card.value)) val += 10;
834
+ else if (card.value === 'A') { val += 11; aces++; }
835
+ else val += parseInt(card.value);
836
+ }
837
+ while (val > 21 && aces > 0) { val -= 10; aces--; }
838
+ return val;
839
+ }
840
+
841
+ function dealBJ() {
842
+ state.bj.player.push(state.bj.deck.pop());
843
+ state.bj.dealer.push(state.bj.deck.pop());
844
+ state.bj.player.push(state.bj.deck.pop());
845
+ state.bj.dealer.push(state.bj.deck.pop());
846
+ }
847
+
848
+ function renderBJ(showDealer = false) {
849
+ const arena = document.getElementById('gameArena');
850
+ const pScore = getHandValue(state.bj.player);
851
+ const dScore = getHandValue(state.bj.dealer);
852
+
853
+ let dealerHTML = state.bj.dealer.map((c, i) => {
854
+ if (i === 1 && !showDealer) return `<div class="playing-card hidden-card"></div>`;
855
+ return `<div class="playing-card ${['β™₯','♦'].includes(c.suit)?'red':'black'}">
856
+ <div>${c.value} ${c.suit}</div>
857
+ <div class="card-center">${c.suit}</div>
858
+ <div class="card-corner-bottom">${c.value} ${c.suit}</div>
859
+ </div>`;
860
+ }).join('');
861
+
862
+ let playerHTML = state.bj.player.map(c =>
863
+ `<div class="playing-card ${['β™₯','♦'].includes(c.suit)?'red':'black'}">
864
+ <div>${c.value} ${c.suit}</div>
865
+ <div class="card-center">${c.suit}</div>
866
+ <div class="card-corner-bottom">${c.value} ${c.suit}</div>
867
+ </div>`
868
+ ).join('');
869
+
870
+ let msg = "";
871
+ let color = "white";
872
+
873
+ if (pScore > 21) { msg = i18n[state.lang].msgBust; color = "var(--accent-red)"; endBJ('lose'); }
874
+ else if (pScore === 21) { msg = "BLACKJACK!"; color = "var(--accent-gold)"; endBJ('blackjack'); }
875
+
876
+ arena.innerHTML = `
877
+ <div style="width:100%">
878
+ <div style="text-align:center; color:var(--text-muted); font-size:0.8rem; margin-bottom:5px;">DEALER (${showDealer ? dScore : '?'})</div>
879
+ <div class="cards-row">${dealerHTML}</div>
880
+ <div style="height: 20px;"></div>
881
+ <div style="text-align:center; color:var(--text-muted); font-size:0.8rem; margin-bottom:5px;">YOU (${pScore})</div>
882
+ <div class="cards-row">${playerHTML}</div>
883
+ <div class="game-message" style="color:${color}; margin-top: 20px;">${msg}</div>
884
+ </div>
885
+ `;
886
+ }
887
+
888
+ function bjHit() {
889
+ state.bj.player.push(state.bj.deck.pop());
890
+ renderBJ();
891
+ }
892
+
893
+ function bjStand() {
894
+ // Dealer Logic
895
+ while(getHandValue(state.bj.dealer) < 17) {
896
+ state.bj.dealer.push(state.bj.deck.pop());
897
+ }
898
+ renderBJ(true);
899
+ determineWinner();
900
+ }
901
+
902
+ function bjDouble() {
903
+ state.balance -= state.bet; // Deduct extra bet
904
+ updateBalanceUI();
905
+ state.bj.player.push(state.bj.deck.pop());
906
+ bjStand();
907
+ }
908
+
909
+ function determineWinner() {
910
+ const p = getHandValue(state.bj.player);
911
+ const d = getHandValue(state.bj.dealer);
912
+ let msg = "";
913
+
914
+ if (p > 21) msg = i18n[state.lang].msgBust;
915
+ else if (d > 21) msg = i18n[state.lang].msgWin;
916
+ else if (p > d) msg = i18n[state.lang].msgWin;
917
+ else if (p < d) msg = i18n[state.lang].msgLose;
918
+ else msg = i18n[state.lang].msgTie;
919
+
920
+ const arena = document.getElementById('gameArena');
921
+ const msgEl = arena.querySelector('.game-message');
922
+ msgEl.textContent = msg;
923
+ msgEl.style.color = msg === i18n[state.lang].msgWin ? "var(--accent-green)" : (msg === i18n[state.lang].msgTie ? "white" : "var(--accent-red)");
924
+ }
925
+
926
+ function endBJ(result) {
927
+ state.bj.active = false;
928
+ document.getElementById('gameControls').innerHTML = `<button class="btn btn-primary full" onclick="openGame('blackjack')">Play Again</button>`;
929
+
930
+ if (result === 'blackjack') {
931
+ state.balance += state.bet * 2.5;
932
+ showToast(`Blackjack! +${state.bet * 1.5}`, 'success');
933
+ } else if (result === 'lose') {
934
+ state.balance -= state.bet;
935
+ showToast(`Lost