Mycc commited on
Commit
53a5fb1
·
verified ·
1 Parent(s): 575d4e9

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +287 -323
index.html CHANGED
@@ -24,36 +24,21 @@
24
  body {
25
  font-family: 'Inter', sans-serif;
26
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
27
- background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
28
- min-height: 100vh;
29
- }
30
-
31
- .dark {
32
  background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
 
33
  color: #e2e8f0;
34
  }
35
 
36
  .glass {
37
- background: rgba(255, 255, 255, 0.85);
38
- backdrop-filter: blur(12px);
39
- border: 1px solid rgba(255, 255, 255, 0.2);
40
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
41
- }
42
-
43
- .dark .glass {
44
  background: rgba(30, 41, 59, 0.85);
 
45
  border: 1px solid rgba(255, 255, 255, 0.1);
46
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
47
  }
48
 
49
  .card-gradient {
50
- background: linear-gradient(145deg, #ffffff, #f1f5f9);
51
- border-radius: 20px;
52
- box-shadow: 10px 10px 30px #e2e8f0, -10px -10px 30px #ffffff;
53
- }
54
-
55
- .dark .card-gradient {
56
  background: linear-gradient(145deg, #1e293b, #0f172a);
 
57
  box-shadow: 10px 10px 30px #0a0f1a, -10px -10px 30px #2a3a52;
58
  }
59
 
@@ -117,10 +102,6 @@
117
 
118
  .card-hover:hover {
119
  transform: translateY(-10px) scale(1.02);
120
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
121
- }
122
-
123
- .dark .card-hover:hover {
124
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.4);
125
  }
126
 
@@ -173,20 +154,15 @@
173
  width: 28px;
174
  height: 28px;
175
  border-radius: 50%;
176
- background: white;
177
  padding: 3px;
178
- box-shadow: 0 4px 12px rgba(0,0,0,0.15);
179
  display: flex;
180
  align-items: center;
181
  justify-content: center;
182
  z-index: 10;
183
  }
184
 
185
- .dark .element-icon {
186
- background: #1e293b;
187
- box-shadow: 0 4px 12px rgba(0,0,0,0.3);
188
- }
189
-
190
  .tab-active {
191
  position: relative;
192
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
@@ -195,10 +171,6 @@
195
  }
196
 
197
  .glow {
198
- box-shadow: 0 0 25px rgba(102, 126, 234, 0.4);
199
- }
200
-
201
- .dark .glow {
202
  box-shadow: 0 0 35px rgba(102, 126, 234, 0.6);
203
  }
204
 
@@ -262,7 +234,7 @@
262
  }
263
 
264
  .custom-scrollbar::-webkit-scrollbar-track {
265
- background: rgba(0, 0, 0, 0.05);
266
  border-radius: 10px;
267
  }
268
 
@@ -275,10 +247,6 @@
275
  background: rgba(102, 126, 234, 0.8);
276
  }
277
 
278
- .dark .custom-scrollbar::-webkit-scrollbar-track {
279
- background: rgba(255, 255, 255, 0.05);
280
- }
281
-
282
  .character-card {
283
  position: relative;
284
  overflow: hidden;
@@ -344,12 +312,8 @@
344
  }
345
 
346
  .stats-card {
347
- background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
348
- border-left: 4px solid #667eea;
349
- }
350
-
351
- .dark .stats-card {
352
  background: linear-gradient(135deg, rgba(102, 126, 234, 0.15) 0%, rgba(118, 75, 162, 0.15) 100%);
 
353
  }
354
 
355
  .badge {
@@ -376,21 +340,13 @@
376
 
377
  .badge-legend {
378
  background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
379
- color: #1e293b;
380
- }
381
-
382
- .dark .badge-legend {
383
  color: white;
384
  }
385
 
386
  .input-field {
387
  transition: all 0.3s ease;
388
- background: rgba(255, 255, 255, 0.9);
389
- border: 2px solid transparent;
390
- }
391
-
392
- .dark .input-field {
393
  background: rgba(30, 41, 59, 0.9);
 
394
  }
395
 
396
  .input-field:focus {
@@ -444,10 +400,6 @@
444
  transform: translateX(30px);
445
  }
446
 
447
- .countdown {
448
- font-variant-numeric: tabular-nums;
449
- }
450
-
451
  .character-avatar {
452
  transition: all 0.3s ease;
453
  position: relative;
@@ -492,8 +444,8 @@
492
  bottom: 100%;
493
  left: 50%;
494
  transform: translateX(-50%);
495
- background: rgba(0, 0, 0, 0.8);
496
- color: white;
497
  padding: 6px 12px;
498
  border-radius: 6px;
499
  font-size: 0.875rem;
@@ -509,46 +461,37 @@
509
  left: 50%;
510
  transform: translateX(-50%);
511
  border: 5px solid transparent;
512
- border-top-color: rgba(0, 0, 0, 0.8);
513
  margin-bottom: -5px;
514
  z-index: 100;
515
  }
516
 
517
- .dark .tooltip:hover::after {
518
- background: rgba(255, 255, 255, 0.9);
519
- color: #1e293b;
520
- }
521
-
522
- .dark .tooltip:hover::before {
523
- border-top-color: rgba(255, 255, 255, 0.9);
524
- }
525
-
526
  .grid-stack {
527
  display: grid;
528
- grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
529
- gap: 1rem;
530
  }
531
 
532
  @media (min-width: 640px) {
533
  .grid-stack {
534
- grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
535
  }
536
  }
537
 
538
  @media (min-width: 768px) {
539
  .grid-stack {
540
- grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
541
  }
542
  }
543
 
544
  @media (min-width: 1024px) {
545
  .grid-stack {
546
- grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
547
  }
548
  }
549
 
550
  .result-container {
551
- min-height: 300px;
552
  display: flex;
553
  align-items: center;
554
  justify-content: center;
@@ -563,12 +506,8 @@
563
  left: 0;
564
  right: 0;
565
  bottom: 0;
566
- background: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118, 75, 162, 0.05) 100%);
567
- border-radius: 20px;
568
- }
569
-
570
- .dark .result-container::before {
571
  background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
 
572
  }
573
 
574
  .history-item {
@@ -635,10 +574,6 @@
635
  }
636
 
637
  .star-rating .empty {
638
- color: #d1d5db;
639
- }
640
-
641
- .dark .star-rating .empty {
642
  color: #4b5563;
643
  }
644
 
@@ -651,44 +586,93 @@
651
  stroke-dashoffset: 283;
652
  transition: stroke-dashoffset 0.5s ease;
653
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
654
  </style>
655
  </head>
656
- <body class="light">
657
- <div id="app-container" class="container mx-auto px-4 py-6 md:py-10 max-w-7xl">
658
  <!-- Header -->
659
- <header class="text-center mb-12">
660
  <div class="flex flex-col md:flex-row justify-between items-center mb-8 gap-6">
661
  <!-- Left controls -->
662
  <div class="flex items-center space-x-4">
663
- <button id="theme-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Toggle theme">
664
- <i class="fas fa-moon text-gray-700 dark:text-yellow-300 group-hover:rotate-45 transition-transform text-xl"></i>
665
- </button>
666
-
667
  <button id="language-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Switch language">
668
  <div class="flex flex-col items-center">
669
- <i class="fas fa-language text-gray-700 dark:text-blue-300 text-xl"></i>
670
  <span id="language-label" class="text-xs font-medium mt-1">EN</span>
671
  </div>
672
  </button>
673
 
674
  <div class="hidden md:flex items-center space-x-2 px-4 py-2 rounded-2xl glass">
675
- <i class="fas fa-user text-purple-500"></i>
676
- <span class="text-sm font-medium dark:text-gray-300">UID:</span>
677
- <span id="user-uid" class="text-sm font-mono bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded-lg"></span>
678
  </div>
679
  </div>
680
 
681
  <!-- Center title -->
682
  <div class="text-center order-first md:order-none">
683
- <div class="flex items-center justify-center mb-2">
684
- <div class="w-10 h-10 rounded-full gradient-primary flex items-center justify-center mr-3">
685
  <i class="fas fa-dice text-white text-xl"></i>
686
  </div>
687
- <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold bg-gradient-to-r from-purple-600 via-blue-500 to-purple-600 bg-clip-text text-transparent animate-pulse">
688
  <span data-i18n="title">Genshin Roulette</span>
689
  </h1>
690
  </div>
691
- <p class="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto" data-i18n="subtitle">
692
  Random characters, bosses & legends for your Genshin Impact adventure
693
  </p>
694
  </div>
@@ -696,15 +680,15 @@
696
  <!-- Right controls -->
697
  <div class="flex items-center space-x-4">
698
  <button id="stats-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Show stats">
699
- <i class="fas fa-chart-bar text-gray-700 dark:text-green-300 text-xl"></i>
700
  </button>
701
 
702
  <button id="settings-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Settings">
703
- <i class="fas fa-cog text-gray-700 dark:text-gray-300 group-hover:rotate-90 transition-transform text-xl"></i>
704
  </button>
705
 
706
  <button id="help-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Help">
707
- <i class="fas fa-question text-gray-700 dark:text-yellow-300 text-xl"></i>
708
  </button>
709
  </div>
710
  </div>
@@ -715,12 +699,12 @@
715
  <div class="stats-card p-4 rounded-2xl">
716
  <div class="flex items-center justify-between">
717
  <div>
718
- <p class="text-sm text-gray-500 dark:text-gray-400" data-i18n="stats.characters">Characters</p>
719
- <p class="text-2xl font-bold dark:text-white" id="total-characters">120</p>
720
  </div>
721
- <i class="fas fa-users text-purple-500 text-2xl"></i>
722
  </div>
723
- <div class="mt-2 text-xs text-gray-500 dark:text-gray-400">
724
  <span data-i18n="stats.owned">Owned:</span> <span id="owned-characters">0</span>
725
  </div>
726
  </div>
@@ -728,12 +712,12 @@
728
  <div class="stats-card p-4 rounded-2xl">
729
  <div class="flex items-center justify-between">
730
  <div>
731
- <p class="text-sm text-gray-500 dark:text-gray-400" data-i18n="stats.worldBosses">World Bosses</p>
732
- <p class="text-2xl font-bold dark:text-white" id="total-world-bosses">40</p>
733
  </div>
734
- <i class="fas fa-dragon text-blue-500 text-2xl"></i>
735
  </div>
736
- <div class="mt-2 text-xs text-gray-500 dark:text-gray-400">
737
  <span data-i18n="stats.available">Available:</span> <span id="available-world-bosses">40</span>
738
  </div>
739
  </div>
@@ -741,12 +725,12 @@
741
  <div class="stats-card p-4 rounded-2xl">
742
  <div class="flex items-center justify-between">
743
  <div>
744
- <p class="text-sm text-gray-500 dark:text-gray-400" data-i18n="stats.weeklyBosses">Weekly Bosses</p>
745
- <p class="text-2xl font-bold dark:text-white" id="total-weekly-bosses">12</p>
746
  </div>
747
- <i class="fas fa-crown text-yellow-500 text-2xl"></i>
748
  </div>
749
- <div class="mt-2 text-xs text-gray-500 dark:text-gray-400">
750
  <span data-i18n="stats.available">Available:</span> <span id="available-weekly-bosses">12</span>
751
  </div>
752
  </div>
@@ -754,12 +738,12 @@
754
  <div class="stats-card p-4 rounded-2xl">
755
  <div class="flex items-center justify-between">
756
  <div>
757
- <p class="text-sm text-gray-500 dark:text-gray-400" data-i18n="stats.legends">Legends</p>
758
- <p class="text-2xl font-bold dark:text-white" id="total-legends">30</p>
759
  </div>
760
- <i class="fas fa-landmark text-pink-500 text-2xl"></i>
761
  </div>
762
- <div class="mt-2 text-xs text-gray-500 dark:text-gray-400">
763
  <span data-i18n="stats.available">Available:</span> <span id="available-legends">30</span>
764
  </div>
765
  </div>
@@ -768,23 +752,23 @@
768
 
769
  <!-- Category Tabs -->
770
  <div class="flex flex-wrap justify-center gap-3 mb-8">
771
- <button data-category="characters" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group">
772
- <i class="fas fa-users mr-2 text-purple-500 group-hover:text-white transition-colors"></i>
773
  <span data-i18n="tab.characters">Character Team</span>
774
  </button>
775
 
776
- <button data-category="world-bosses" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group">
777
- <i class="fas fa-dragon mr-2 text-blue-500 group-hover:text-white transition-colors"></i>
778
  <span data-i18n="tab.worldBosses">World Bosses</span>
779
  </button>
780
 
781
- <button data-category="weekly-bosses" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group">
782
- <i class="fas fa-crown mr-2 text-yellow-500 group-hover:text-white transition-colors"></i>
783
  <span data-i18n="tab.weeklyBosses">Weekly Bosses</span>
784
  </button>
785
 
786
- <button data-category="local-legends" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group">
787
- <i class="fas fa-landmark mr-2 text-pink-500 group-hover:text-white transition-colors"></i>
788
  <span data-i18n="tab.localLegends">Local Legends</span>
789
  </button>
790
  </div>
@@ -794,14 +778,14 @@
794
  <!-- Settings Panel -->
795
  <div id="settings-panel" class="settings-panel glass rounded-3xl p-8 mb-10">
796
  <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-8 gap-4">
797
- <h3 class="text-2xl font-bold dark:text-white flex items-center">
798
- <i class="fas fa-sliders-h mr-3 text-purple-500"></i>
799
  <span data-i18n="settings.title">Roulette Settings</span>
800
  </h3>
801
 
802
  <div class="flex items-center space-x-4">
803
  <div class="flex items-center space-x-2">
804
- <span class="text-sm font-medium dark:text-gray-300" data-i18n="settings.sound">Sound:</span>
805
  <label class="toggle-switch">
806
  <input type="checkbox" id="sound-toggle" checked>
807
  <span class="toggle-slider"></span>
@@ -809,7 +793,7 @@
809
  </div>
810
 
811
  <div class="flex items-center space-x-2">
812
- <span class="text-sm font-medium dark:text-gray-300" data-i18n="settings.animations">Animations:</span>
813
  <label class="toggle-switch">
814
  <input type="checkbox" id="animations-toggle" checked>
815
  <span class="toggle-slider"></span>
@@ -821,8 +805,8 @@
821
  <!-- Basic Settings -->
822
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-10">
823
  <div class="card-gradient p-6 rounded-2xl">
824
- <label for="team-size" class="block text-sm font-semibold mb-3 dark:text-gray-300 flex items-center">
825
- <i class="fas fa-user-group mr-2 text-purple-500"></i>
826
  <span data-i18n="settings.teamSize">Team Size</span>
827
  </label>
828
  <select id="team-size" class="w-full p-3 rounded-xl input-field focus:ring-2 focus:ring-purple-500 transition-all">
@@ -834,8 +818,8 @@
834
  </div>
835
 
836
  <div class="card-gradient p-6 rounded-2xl">
837
- <label for="animation-speed" class="block text-sm font-semibold mb-3 dark:text-gray-300 flex items-center">
838
- <i class="fas fa-tachometer-alt mr-2 text-blue-500"></i>
839
  <span data-i18n="settings.animationSpeed">Animation Speed</span>
840
  </label>
841
  <select id="animation-speed" class="w-full p-3 rounded-xl input-field focus:ring-2 focus:ring-purple-500 transition-all">
@@ -846,8 +830,8 @@
846
  </div>
847
 
848
  <div class="card-gradient p-6 rounded-2xl">
849
- <label for="duplicates" class="block text-sm font-semibold mb-3 dark:text-gray-300 flex items-center">
850
- <i class="fas fa-copy mr-2 text-green-500"></i>
851
  <span data-i18n="settings.duplicates">Allow Duplicates</span>
852
  </label>
853
  <select id="duplicates" class="w-full p-3 rounded-xl input-field focus:ring-2 focus:ring-purple-500 transition-all">
@@ -860,14 +844,14 @@
860
  <!-- My Characters Section -->
861
  <div class="mb-10">
862
  <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-6 gap-4">
863
- <h3 class="text-2xl font-bold dark:text-white flex items-center">
864
- <i class="fas fa-user-check mr-3 text-green-500"></i>
865
  <span data-i18n="settings.myCharacters">My Characters</span>
866
  </h3>
867
 
868
  <div class="flex items-center space-x-3">
869
  <div class="px-4 py-2 rounded-xl glass">
870
- <span class="text-sm font-medium dark:text-gray-300">
871
  <span data-i18n="settings.selected">Selected:</span>
872
  <span id="selected-count">0</span>/<span id="total-characters-count">120</span>
873
  </span>
@@ -883,7 +867,7 @@
883
  </div>
884
  </div>
885
 
886
- <p class="text-gray-600 dark:text-gray-400 mb-6" data-i18n="settings.myCharactersDesc">
887
  Select characters you own. If none selected, all characters will be used.
888
  </p>
889
 
@@ -920,11 +904,11 @@
920
 
921
  <!-- Progress Bar -->
922
  <div class="mb-2">
923
- <div class="flex justify-between text-sm text-gray-600 dark:text-gray-400 mb-1">
924
  <span data-i18n="settings.progress">Selection Progress</span>
925
  <span id="selection-percentage">0%</span>
926
  </div>
927
- <div class="w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2.5">
928
  <div id="selection-progress-bar" class="progress-bar h-2.5 rounded-full"></div>
929
  </div>
930
  </div>
@@ -932,39 +916,39 @@
932
 
933
  <!-- Boss Settings -->
934
  <div>
935
- <h3 class="text-2xl font-bold mb-6 dark:text-white flex items-center">
936
- <i class="fas fa-dragon mr-3 text-red-500"></i>
937
  <span data-i18n="settings.bossSettings">Boss & Legend Settings</span>
938
  </h3>
939
 
940
- <p class="text-gray-600 dark:text-gray-400 mb-6" data-i18n="settings.bossSettingsDesc">
941
  Toggle which bosses and legends should be included in randomization
942
  </p>
943
 
944
  <!-- Category Selector -->
945
  <div class="mb-6">
946
  <div class="card-gradient p-6 rounded-2xl">
947
- <label for="boss-category-select" class="block text-sm font-semibold mb-3 dark:text-gray-300 flex items-center">
948
- <i class="fas fa-filter mr-2 text-blue-500"></i>
949
  <span data-i18n="settings.category">Category:</span>
950
  </label>
951
  <div class="flex flex-wrap gap-3">
952
  <button data-boss-category="world-bosses" class="boss-category-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105 flex items-center">
953
- <i class="fas fa-dragon mr-2 text-blue-500"></i>
954
  <span data-i18n="settings.categories.worldBosses">World Bosses</span>
955
- <span class="ml-2 px-2 py-1 text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded-full" id="world-boss-count">40</span>
956
  </button>
957
 
958
  <button data-boss-category="weekly-bosses" class="boss-category-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105 flex items-center">
959
- <i class="fas fa-crown mr-2 text-yellow-500"></i>
960
  <span data-i18n="settings.categories.weeklyBosses">Weekly Bosses</span>
961
- <span class="ml-2 px-2 py-1 text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200 rounded-full" id="weekly-boss-count">12</span>
962
  </button>
963
 
964
  <button data-boss-category="local-legends" class="boss-category-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105 flex items-center active">
965
- <i class="fas fa-landmark mr-2 text-pink-500"></i>
966
  <span data-i18n="settings.categories.localLegends">Local Legends</span>
967
- <span class="ml-2 px-2 py-1 text-xs bg-pink-100 dark:bg-pink-900 text-pink-800 dark:text-pink-200 rounded-full" id="legend-count">30</span>
968
  </button>
969
  </div>
970
  </div>
@@ -996,20 +980,20 @@
996
  </div>
997
 
998
  <!-- Characters Section -->
999
- <section id="characters-section" class="mb-16 glass rounded-3xl p-8 relative overflow-hidden">
1000
  <!-- Background Decoration -->
1001
  <div class="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-purple-500/10 to-pink-500/10 rounded-full -translate-y-32 translate-x-32"></div>
1002
  <div class="absolute bottom-0 left-0 w-96 h-96 bg-gradient-to-tr from-blue-500/10 to-cyan-500/10 rounded-full translate-y-48 -translate-x-48"></div>
1003
 
1004
  <div class="relative z-10">
1005
  <div class="text-center mb-10">
1006
- <div class="inline-flex items-center justify-center w-20 h-20 rounded-full gradient-primary mb-6">
1007
- <i class="fas fa-users text-white text-3xl"></i>
1008
  </div>
1009
- <h2 class="text-4xl font-bold mb-4 dark:text-white" data-i18n="sections.characters.title">
1010
  Character Team Roulette
1011
  </h2>
1012
- <p class="text-gray-600 dark:text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.characters.subtitle">
1013
  Spin to get a random team of characters for your next adventure
1014
  </p>
1015
  </div>
@@ -1017,38 +1001,38 @@
1017
  <!-- Team Configuration -->
1018
  <div class="flex flex-col md:flex-row justify-between items-center mb-10 gap-6">
1019
  <div class="flex-1 w-full">
1020
- <div class="card-gradient p-6 rounded-2xl">
1021
  <div class="flex flex-col md:flex-row justify-between items-center gap-4">
1022
  <div>
1023
- <h4 class="font-bold text-lg dark:text-white mb-2" data-i18n="sections.characters.config">Team Configuration</h4>
1024
- <p class="text-gray-600 dark:text-gray-400 text-sm" data-i18n="sections.characters.configDesc">
1025
  Configure your team before spinning
1026
  </p>
1027
  </div>
1028
 
1029
- <div class="flex items-center space-x-4">
1030
  <div class="text-center">
1031
- <div class="text-2xl font-bold dark:text-white" id="current-team-size">4</div>
1032
- <div class="text-xs text-gray-500 dark:text-gray-400" data-i18n="sections.characters.teamSize">Team Size</div>
1033
  </div>
1034
 
1035
  <div class="text-center">
1036
- <div class="text-2xl font-bold dark:text-white" id="available-chars">120</div>
1037
- <div class="text-xs text-gray-500 dark:text-gray-400" data-i18n="sections.characters.available">Available</div>
1038
  </div>
1039
 
1040
  <div class="text-center">
1041
- <div class="text-2xl font-bold dark:text-white" id="owned-chars">0</div>
1042
- <div class="text-xs text-gray-500 dark:text-gray-400" data-i18n="sections.characters.owned">Owned</div>
1043
  </div>
1044
  </div>
1045
  </div>
1046
  </div>
1047
  </div>
1048
 
1049
- <div class="flex-shrink-0">
1050
  <button id="spin-characters-button"
1051
- class="px-12 py-5 rounded-2xl gradient-primary text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group pulse">
1052
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1053
  <div class="relative z-10 flex items-center justify-center">
1054
  <i class="fas fa-dice-d20 mr-3 text-2xl"></i>
@@ -1061,11 +1045,11 @@
1061
  <!-- Result Area -->
1062
  <div id="characters-result" class="result-container rounded-2xl p-8 mb-8">
1063
  <div class="text-center max-w-md mx-auto">
1064
- <div class="text-6xl mb-6 float-animation">🎮</div>
1065
- <p id="characters-placeholder" class="text-gray-500 dark:text-gray-400 text-xl mb-4" data-i18n="placeholders.characters">
1066
  Your random team will appear here
1067
  </p>
1068
- <p class="text-gray-400 dark:text-gray-500 text-sm" data-i18n="placeholders.charactersHint">
1069
  Click the "Spin Team!" button to generate a random team
1070
  </p>
1071
  </div>
@@ -1098,27 +1082,27 @@
1098
  </section>
1099
 
1100
  <!-- World Bosses Section -->
1101
- <section id="world-bosses-section" class="mb-16 glass rounded-3xl p-8 hidden relative overflow-hidden">
1102
  <!-- Background Decoration -->
1103
  <div class="absolute top-0 left-0 w-64 h-64 bg-gradient-to-br from-blue-500/10 to-cyan-500/10 rounded-full -translate-y-32 -translate-x-32"></div>
1104
  <div class="absolute bottom-0 right-0 w-96 h-96 bg-gradient-to-tr from-purple-500/10 to-pink-500/10 rounded-full translate-y-48 translate-x-48"></div>
1105
 
1106
  <div class="relative z-10">
1107
  <div class="text-center mb-10">
1108
- <div class="inline-flex items-center justify-center w-20 h-20 rounded-full gradient-accent mb-6">
1109
- <i class="fas fa-dragon text-white text-3xl"></i>
1110
  </div>
1111
- <h2 class="text-4xl font-bold mb-4 dark:text-white" data-i18n="sections.worldBosses.title">
1112
  World Boss Roulette
1113
  </h2>
1114
- <p class="text-gray-600 dark:text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.worldBosses.subtitle">
1115
  Challenge a random world boss and test your skills
1116
  </p>
1117
  </div>
1118
 
1119
  <div class="flex justify-center mb-10">
1120
  <button id="spin-world-boss-button"
1121
- class="px-12 py-5 rounded-2xl gradient-accent text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group">
1122
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1123
  <div class="relative z-10 flex items-center justify-center">
1124
  <i class="fas fa-dragon mr-3 text-2xl"></i>
@@ -1129,11 +1113,11 @@
1129
 
1130
  <div id="world-boss-result" class="result-container rounded-2xl p-8 mb-8">
1131
  <div class="text-center max-w-md mx-auto">
1132
- <div class="text-6xl mb-6 float-animation">🐉</div>
1133
- <p id="world-boss-placeholder" class="text-gray-500 dark:text-gray-400 text-xl mb-4" data-i18n="placeholders.worldBoss">
1134
  Random world boss will appear here
1135
  </p>
1136
- <p class="text-gray-400 dark:text-gray-500 text-sm" data-i18n="placeholders.worldBossHint">
1137
  Click the "Spin Boss!" button to generate a random world boss
1138
  </p>
1139
  </div>
@@ -1151,27 +1135,27 @@
1151
  </section>
1152
 
1153
  <!-- Weekly Bosses Section -->
1154
- <section id="weekly-bosses-section" class="mb-16 glass rounded-3xl p-8 hidden relative overflow-hidden">
1155
  <!-- Background Decoration -->
1156
  <div class="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-yellow-500/10 to-orange-500/10 rounded-full -translate-y-32 translate-x-32"></div>
1157
  <div class="absolute bottom-0 left-0 w-96 h-96 bg-gradient-to-tr from-red-500/10 to-pink-500/10 rounded-full translate-y-48 -translate-x-48"></div>
1158
 
1159
  <div class="relative z-10">
1160
  <div class="text-center mb-10">
1161
- <div class="inline-flex items-center justify-center w-20 h-20 rounded-full gradient-gold mb-6">
1162
- <i class="fas fa-crown text-white text-3xl"></i>
1163
  </div>
1164
- <h2 class="text-4xl font-bold mb-4 dark:text-white" data-i18n="sections.weeklyBosses.title">
1165
  Weekly Boss Roulette
1166
  </h2>
1167
- <p class="text-gray-600 dark:text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.weeklyBosses.subtitle">
1168
  Face a random weekly boss for valuable rewards
1169
  </p>
1170
  </div>
1171
 
1172
  <div class="flex justify-center mb-10">
1173
  <button id="spin-weekly-boss-button"
1174
- class="px-12 py-5 rounded-2xl gradient-gold text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group">
1175
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1176
  <div class="relative z-10 flex items-center justify-center">
1177
  <i class="fas fa-crown mr-3 text-2xl"></i>
@@ -1182,11 +1166,11 @@
1182
 
1183
  <div id="weekly-boss-result" class="result-container rounded-2xl p-8 mb-8">
1184
  <div class="text-center max-w-md mx-auto">
1185
- <div class="text-6xl mb-6 float-animation">⚔️</div>
1186
- <p id="weekly-boss-placeholder" class="text-gray-500 dark:text-gray-400 text-xl mb-4" data-i18n="placeholders.weeklyBoss">
1187
  Random weekly boss will appear here
1188
  </p>
1189
- <p class="text-gray-400 dark:text-gray-500 text-sm" data-i18n="placeholders.weeklyBossHint">
1190
  Click the "Spin Weekly Boss!" button to generate a random weekly boss
1191
  </p>
1192
  </div>
@@ -1204,27 +1188,27 @@
1204
  </section>
1205
 
1206
  <!-- Local Legends Section -->
1207
- <section id="local-legends-section" class="mb-16 glass rounded-3xl p-8 hidden relative overflow-hidden">
1208
  <!-- Background Decoration -->
1209
  <div class="absolute top-0 left-0 w-64 h-64 bg-gradient-to-br from-pink-500/10 to-purple-500/10 rounded-full -translate-y-32 -translate-x-32"></div>
1210
  <div class="absolute bottom-0 right-0 w-96 h-96 bg-gradient-to-tr from-green-500/10 to-cyan-500/10 rounded-full translate-y-48 translate-x-48"></div>
1211
 
1212
  <div class="relative z-10">
1213
  <div class="text-center mb-10">
1214
- <div class="inline-flex items-center justify-center w-20 h-20 rounded-full gradient-purple mb-6">
1215
- <i class="fas fa-landmark text-white text-3xl"></i>
1216
  </div>
1217
- <h2 class="text-4xl font-bold mb-4 dark:text-white" data-i18n="sections.localLegends.title">
1218
  Local Legends Roulette
1219
  </h2>
1220
- <p class="text-gray-600 dark:text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.localLegends.subtitle">
1221
  Discover and challenge random local legends across Teyvat
1222
  </p>
1223
  </div>
1224
 
1225
  <div class="flex justify-center mb-10">
1226
  <button id="spin-legend-button"
1227
- class="px-12 py-5 rounded-2xl gradient-purple text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group">
1228
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1229
  <div class="relative z-10 flex items-center justify-center">
1230
  <i class="fas fa-landmark mr-3 text-2xl"></i>
@@ -1235,11 +1219,11 @@
1235
 
1236
  <div id="legend-result" class="result-container rounded-2xl p-8 mb-8">
1237
  <div class="text-center max-w-md mx-auto">
1238
- <div class="text-6xl mb-6 float-animation">🏆</div>
1239
- <p id="legend-placeholder" class="text-gray-500 dark:text-gray-400 text-xl mb-4" data-i18n="placeholders.legend">
1240
  Random local legend will appear here
1241
  </p>
1242
- <p class="text-gray-400 dark:text-gray-500 text-sm" data-i18n="placeholders.legendHint">
1243
  Click the "Spin Legend!" button to discover a random local legend
1244
  </p>
1245
  </div>
@@ -1257,18 +1241,18 @@
1257
  </section>
1258
 
1259
  <!-- History Section -->
1260
- <section id="history-section" class="glass rounded-3xl p-8 relative overflow-hidden">
1261
  <!-- Background Decoration -->
1262
  <div class="absolute top-0 right-0 w-48 h-48 bg-gradient-to-br from-gray-500/10 to-gray-700/10 rounded-full -translate-y-24 translate-x-24"></div>
1263
 
1264
  <div class="relative z-10">
1265
  <div class="flex flex-col md:flex-row justify-between items-center mb-10 gap-6">
1266
  <div>
1267
- <h2 class="text-4xl font-bold dark:text-white flex items-center">
1268
- <i class="fas fa-history mr-4 text-purple-500"></i>
1269
  <span data-i18n="history.title">History</span>
1270
  </h2>
1271
- <p class="text-gray-600 dark:text-gray-400 mt-2" data-i18n="history.subtitle">
1272
  Your recent random selections
1273
  </p>
1274
  </div>
@@ -1303,22 +1287,22 @@
1303
  </button>
1304
 
1305
  <button data-history-filter="team" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1306
- <i class="fas fa-users mr-2 text-purple-500"></i>
1307
  <span data-i18n="history.filters.teams">Teams</span>
1308
  </button>
1309
 
1310
  <button data-history-filter="world-boss" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1311
- <i class="fas fa-dragon mr-2 text-blue-500"></i>
1312
  <span data-i18n="history.filters.worldBosses">World Bosses</span>
1313
  </button>
1314
 
1315
  <button data-history-filter="weekly-boss" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1316
- <i class="fas fa-crown mr-2 text-yellow-500"></i>
1317
  <span data-i18n="history.filters.weeklyBosses">Weekly Bosses</span>
1318
  </button>
1319
 
1320
  <button data-history-filter="legend" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1321
- <i class="fas fa-landmark mr-2 text-pink-500"></i>
1322
  <span data-i18n="history.filters.legends">Legends</span>
1323
  </button>
1324
  </div>
@@ -1326,32 +1310,32 @@
1326
 
1327
  <!-- History Content -->
1328
  <div id="history-content" class="space-y-6">
1329
- <p id="history-placeholder" class="text-center text-gray-500 dark:text-gray-400 text-lg py-12" data-i18n="placeholders.history">
1330
  Your random selections history will appear here
1331
  </p>
1332
  </div>
1333
 
1334
  <!-- History Stats -->
1335
- <div class="mt-10 pt-8 border-t border-gray-200 dark:border-gray-700">
1336
  <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
1337
- <div class="text-center p-4 rounded-2xl glass">
1338
- <div class="text-2xl font-bold dark:text-white" id="history-total">0</div>
1339
- <div class="text-sm text-gray-500 dark:text-gray-400" data-i18n="history.stats.total">Total Entries</div>
1340
  </div>
1341
 
1342
- <div class="text-center p-4 rounded-2xl glass">
1343
- <div class="text-2xl font-bold dark:text-white" id="history-teams">0</div>
1344
- <div class="text-sm text-gray-500 dark:text-gray-400" data-i18n="history.stats.teams">Teams</div>
1345
  </div>
1346
 
1347
- <div class="text-center p-4 rounded-2xl glass">
1348
- <div class="text-2xl font-bold dark:text-white" id="history-bosses">0</div>
1349
- <div class="text-sm text-gray-500 dark:text-gray-400" data-i18n="history.stats.bosses">Bosses</div>
1350
  </div>
1351
 
1352
- <div class="text-center p-4 rounded-2xl glass">
1353
- <div class="text-2xl font-bold dark:text-white" id="history-legends">0</div>
1354
- <div class="text-sm text-gray-500 dark:text-gray-400" data-i18n="history.stats.legends">Legends</div>
1355
  </div>
1356
  </div>
1357
  </div>
@@ -1360,16 +1344,16 @@
1360
  </main>
1361
 
1362
  <!-- Footer -->
1363
- <footer class="text-center mt-16 pt-10 border-t border-gray-200 dark:border-gray-700">
1364
  <div class="flex flex-col lg:flex-row justify-between items-center mb-8 gap-8">
1365
  <div class="text-left">
1366
  <div class="flex items-center mb-4">
1367
- <div class="w-10 h-10 rounded-full gradient-primary flex items-center justify-center mr-3">
1368
  <i class="fas fa-dice text-white"></i>
1369
  </div>
1370
- <h3 class="text-xl font-bold dark:text-white">Genshin Roulette</h3>
1371
  </div>
1372
- <p class="text-sm text-gray-600 dark:text-gray-400 max-w-md" data-i18n="footer.disclaimer">
1373
  This is a fan-made project. Not affiliated with or endorsed by HoYoverse.
1374
  </p>
1375
  </div>
@@ -1378,30 +1362,30 @@
1378
  </div>
1379
  </div>
1380
 
1381
- <div class="flex flex-col md:flex-row justify-between items-center pt-8 border-t border-gray-200 dark:border-gray-700 gap-4">
1382
  <div class="flex items-center space-x-6">
1383
- <span class="text-sm text-gray-600 dark:text-gray-400">
1384
  <span data-i18n="footer.version">Version:</span> <span class="font-mono">2.1.0</span>
1385
  </span>
1386
- <span class="text-sm text-gray-600 dark:text-gray-400">
1387
  <span data-i18n="footer.characters">Characters:</span> <span class="font-bold">120</span>
1388
  </span>
1389
- <span class="text-sm text-gray-600 dark:text-gray-400">
1390
  <span data-i18n="footer.bosses">Bosses:</span> <span class="font-bold">82</span>
1391
  </span>
1392
  </div>
1393
 
1394
  <div class="flex items-center space-x-4">
1395
  <button id="back-to-top" class="p-2 rounded-full glass hover:scale-105 transition-transform tooltip" data-tooltip="Back to top">
1396
- <i class="fas fa-arrow-up text-gray-700 dark:text-gray-300"></i>
1397
  </button>
1398
 
1399
  <a href="#" class="p-2 rounded-full glass hover:scale-105 transition-transform tooltip" data-tooltip="GitHub">
1400
- <i class="fab fa-github text-gray-700 dark:text-gray-300"></i>
1401
  </a>
1402
 
1403
  <a href="#" class="p-2 rounded-full glass hover:scale-105 transition-transform tooltip" data-tooltip="Discord">
1404
- <i class="fab fa-discord text-gray-700 dark:text-gray-300"></i>
1405
  </a>
1406
  </div>
1407
  </div>
@@ -1414,8 +1398,8 @@
1414
  <div class="w-20 h-20 rounded-full gradient-danger flex items-center justify-center mx-auto mb-6">
1415
  <i class="fas fa-exclamation text-white text-3xl"></i>
1416
  </div>
1417
- <h3 class="text-2xl font-bold mb-4 dark:text-white" data-i18n="modals.confirm.title">Confirmation</h3>
1418
- <p id="confirm-modal-message" class="text-gray-600 dark:text-gray-300 mb-8 text-lg" data-i18n="modals.confirm.message">
1419
  Are you sure you want to clear history?
1420
  </p>
1421
  <div class="flex justify-center gap-4">
@@ -1434,12 +1418,12 @@
1434
  <div id="full-history-modal" class="fixed inset-0 bg-black/70 z-50 flex justify-center items-center hidden p-4 modal-backdrop">
1435
  <div class="glass rounded-3xl w-full max-w-6xl h-[90vh] flex flex-col p-8 modal-content">
1436
  <div class="flex justify-between items-center mb-8">
1437
- <h2 class="text-4xl font-bold dark:text-white flex items-center">
1438
- <i class="fas fa-history mr-4 text-purple-500"></i>
1439
  <span data-i18n="modals.fullHistory.title">Full History</span>
1440
  </h2>
1441
  <button id="full-history-modal-close" class="p-3 rounded-2xl glass hover:scale-105 transition-transform">
1442
- <i class="fas fa-times text-gray-700 dark:text-gray-300 text-xl"></i>
1443
  </button>
1444
  </div>
1445
 
@@ -1447,7 +1431,7 @@
1447
  <!-- History items will be dynamically added here -->
1448
  </div>
1449
 
1450
- <div class="text-center mt-8 pt-6 border-t border-gray-200 dark:border-gray-700">
1451
  <button id="full-history-modal-close-bottom" class="px-8 py-3 rounded-2xl glass font-semibold hover:scale-105 transition-transform flex items-center mx-auto">
1452
  <i class="fas fa-times mr-3"></i>
1453
  <span data-i18n="buttons.close">Close</span>
@@ -1460,25 +1444,25 @@
1460
  <div id="help-modal" class="fixed inset-0 bg-black/70 z-50 flex justify-center items-center hidden p-4 modal-backdrop">
1461
  <div class="glass rounded-3xl w-full max-w-4xl h-[80vh] flex flex-col p-8 modal-content">
1462
  <div class="flex justify-between items-center mb-8">
1463
- <h2 class="text-4xl font-bold dark:text-white flex items-center">
1464
- <i class="fas fa-question-circle mr-4 text-yellow-500"></i>
1465
  <span data-i18n="modals.help.title">Help & Guide</span>
1466
  </h2>
1467
  <button id="help-modal-close" class="p-3 rounded-2xl glass hover:scale-105 transition-transform">
1468
- <i class="fas fa-times text-gray-700 dark:text-gray-300 text-xl"></i>
1469
  </button>
1470
  </div>
1471
 
1472
  <div class="flex-1 overflow-y-auto pr-4 space-y-8 custom-scrollbar">
1473
  <div>
1474
- <h3 class="text-2xl font-bold dark:text-white mb-4" data-i18n="help.gettingStarted">Getting Started</h3>
1475
  <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
1476
  <div class="card-gradient p-6 rounded-2xl">
1477
  <div class="w-12 h-12 rounded-full gradient-primary flex items-center justify-center mb-4">
1478
  <i class="fas fa-users text-white"></i>
1479
  </div>
1480
- <h4 class="font-bold text-lg dark:text-white mb-2" data-i18n="help.selectCharacters">Select Your Characters</h4>
1481
- <p class="text-gray-600 dark:text-gray-400" data-i18n="help.selectCharactersDesc">
1482
  Go to Settings → My Characters and select all characters you own. This ensures the roulette only uses characters you have.
1483
  </p>
1484
  </div>
@@ -1487,8 +1471,8 @@
1487
  <div class="w-12 h-12 rounded-full gradient-accent flex items-center justify-center mb-4">
1488
  <i class="fas fa-sliders-h text-white"></i>
1489
  </div>
1490
- <h4 class="font-bold text-lg dark:text-white mb-2" data-i18n="help.configureSettings">Configure Settings</h4>
1491
- <p class="text-gray-600 dark:text-gray-400" data-i18n="help.configureSettingsDesc">
1492
  Adjust team size, animation speed, and boss preferences in the settings panel to customize your experience.
1493
  </p>
1494
  </div>
@@ -1496,34 +1480,34 @@
1496
  </div>
1497
 
1498
  <div>
1499
- <h3 class="text-2xl font-bold dark:text-white mb-4" data-i18n="help.features">Features</h3>
1500
  <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
1501
  <div class="card-gradient p-6 rounded-2xl">
1502
- <h4 class="font-bold text-lg dark:text-white mb-2 flex items-center">
1503
- <i class="fas fa-users mr-2 text-purple-500"></i>
1504
  <span data-i18n="help.teamRoulette">Team Roulette</span>
1505
  </h4>
1506
- <p class="text-gray-600 dark:text-gray-400 text-sm" data-i18n="help.teamRouletteDesc">
1507
  Generate random teams of 1-4 characters for new gameplay challenges.
1508
  </p>
1509
  </div>
1510
 
1511
  <div class="card-gradient p-6 rounded-2xl">
1512
- <h4 class="font-bold text-lg dark:text-white mb-2 flex items-center">
1513
- <i class="fas fa-dragon mr-2 text-blue-500"></i>
1514
  <span data-i18n="help.bossRoulette">Boss Roulette</span>
1515
  </h4>
1516
- <p class="text-gray-600 dark:text-gray-400 text-sm" data-i18n="help.bossRouletteDesc">
1517
  Get random world bosses, weekly bosses, or local legends to challenge.
1518
  </p>
1519
  </div>
1520
 
1521
  <div class="card-gradient p-6 rounded-2xl">
1522
- <h4 class="font-bold text-lg dark:text-white mb-2 flex items-center">
1523
- <i class="fas fa-history mr-2 text-green-500"></i>
1524
  <span data-i18n="help.history">History & Stats</span>
1525
  </h4>
1526
- <p class="text-gray-600 dark:text-gray-400 text-sm" data-i18n="help.historyDesc">
1527
  Track all your generated teams and bosses with detailed statistics.
1528
  </p>
1529
  </div>
@@ -1531,31 +1515,31 @@
1531
  </div>
1532
 
1533
  <div>
1534
- <h3 class="text-2xl font-bold dark:text-white mb-4" data-i18n="help.tips">Tips & Tricks</h3>
1535
  <div class="space-y-4">
1536
  <div class="flex items-start">
1537
- <div class="w-8 h-8 rounded-full bg-green-100 dark:bg-green-900 flex items-center justify-center mr-4 flex-shrink-0">
1538
- <i class="fas fa-lightbulb text-green-500"></i>
1539
  </div>
1540
- <p class="text-gray-600 dark:text-gray-400" data-i18n="help.tip1">
1541
  Use the "My Characters" feature to limit the roulette to only characters you own for more realistic teams.
1542
  </p>
1543
  </div>
1544
 
1545
  <div class="flex items-start">
1546
- <div class="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center mr-4 flex-shrink-0">
1547
- <i class="fas fa-lightbulb text-blue-500"></i>
1548
  </div>
1549
- <p class="text-gray-600 dark:text-gray-400" data-i18n="help.tip2">
1550
  Save your favorite teams with custom names for quick reference later.
1551
  </p>
1552
  </div>
1553
 
1554
  <div class="flex items-start">
1555
- <div class="w-8 h-8 rounded-full bg-purple-100 dark:bg-purple-900 flex items-center justify-center mr-4 flex-shrink-0">
1556
- <i class="fas fa-lightbulb text-purple-500"></i>
1557
  </div>
1558
- <p class="text-gray-600 dark:text-gray-400" data-i18n="help.tip3">
1559
  Enable sound effects for a more immersive spinning experience.
1560
  </p>
1561
  </div>
@@ -2039,8 +2023,8 @@
2039
  { "name": "Говорящая с духами отшельница", "icon": "pic/WorldBoss/Govoryashchaya-s-dukhami-otshelnitsa.webp" },
2040
  { "name": "Сумрачная папилла", "icon": "pic/WorldBoss/Sumrachnaya-papilla.webp" },
2041
  { "name": "Автоматон: Конфигуратор", "icon": "pic/WorldBoss/Avtomaton-tainstvennogo-istochnika.webp" },
2042
- { "name": "Прожорливый Горный король-юмказавр", "icon": "pic/WorldBoss/Prozhorlivyy-gornyy-korol-yumkazavr.webp" },
2043
- { "name": "Кукузавр-тиран золотого пламени", "icon": "pic/WorldBoss/Prozhorlivyi_-Gornyi_-korol_yumkazavr.webp" },
2044
  { "name": "Легат големов", "icon": "pic/WorldBoss/Kapitan-golemov.webp" },
2045
  { "name": "Суаньни-отшельник", "icon": "pic/WorldBoss/Suanni_otshelnik.webp" },
2046
  { "name": "Гидротульпа", "icon": "pic/WorldBoss/Probuzhdyennaya-zhizn.webp" },
@@ -2062,7 +2046,7 @@
2062
  { "name": "Манифестация грома", "icon": "pic/WorldBoss/Elektro-Okeanid.png" },
2063
  { "name": "Бесконечный механический массив", "icon": "pic/WorldBoss/Beskonechnyy-mekhanicheskiy-massiv.png" },
2064
  { "name": "Пиро гипостазис", "icon": "pic/WorldBoss/Piro-gipostazis.png" },
2065
- { "name": "Магу Кенки", "icon": "pic/WorldBoss/Magu-Kenki.webp" },
2066
  { "name": "Крио гипостазис", "icon": "pic/WorldBoss/Cryo_Hypostasis.webp" },
2067
  { "name": "Древний геовишап", "icon": "pic/WorldBoss/Drevniy-geovishap.webp" },
2068
  { "name": "Гео гипостазис", "icon": "pic/WorldBoss/UI_MonsterIcon_Effigy_Rock.png" },
@@ -2153,7 +2137,6 @@
2153
  const config = {
2154
  teamSize: parseInt(localStorage.getItem(`${currentUserUID}_teamSize`)) || 4,
2155
  animationSpeed: localStorage.getItem(`${currentUserUID}_animationSpeed`) || 'medium',
2156
- darkMode: localStorage.getItem('theme') === 'dark',
2157
  category: localStorage.getItem('genshinCategory') || 'characters',
2158
  soundEnabled: localStorage.getItem('soundEnabled') !== 'false',
2159
  animationsEnabled: localStorage.getItem('animationsEnabled') !== 'false',
@@ -2198,7 +2181,6 @@
2198
  const historyPlaceholder = document.getElementById('history-placeholder');
2199
  const clearHistoryButton = document.getElementById('clear-history-button');
2200
  const showFullHistoryButton = document.getElementById('show-full-history-button');
2201
- const themeToggle = document.getElementById('theme-toggle');
2202
  const statsToggle = document.getElementById('stats-toggle');
2203
  const statsPanel = document.getElementById('stats-panel');
2204
  const settingsToggle = document.getElementById('settings-toggle');
@@ -2386,24 +2368,6 @@
2386
  }
2387
  }
2388
 
2389
- // ==================== THEME SYSTEM ====================
2390
- function initTheme() {
2391
- if (config.darkMode) {
2392
- document.body.classList.remove('light');
2393
- document.body.classList.add('dark');
2394
- } else {
2395
- document.body.classList.remove('dark');
2396
- document.body.classList.add('light');
2397
- }
2398
- }
2399
-
2400
- function toggleTheme() {
2401
- config.darkMode = !config.darkMode;
2402
- initTheme();
2403
- localStorage.setItem('theme', config.darkMode ? 'dark' : 'light');
2404
- playSound('click');
2405
- }
2406
-
2407
  // ==================== TAB SYSTEM ====================
2408
  function switchTab(category) {
2409
  // Update tab buttons
@@ -2464,9 +2428,9 @@
2464
  const elementName = translations[currentLanguage][`elements.${character.element.toLowerCase()}`] || character.element;
2465
 
2466
  card.innerHTML = `
2467
- <div class="relative mb-3 mx-auto" style="width: 80px; height: 80px;">
2468
  <img src="${character.icon}" alt="${character.name}"
2469
- class="w-full h-full rounded-full object-cover border-4 ${isSelected ? 'border-purple-500' : 'border-white dark:border-gray-700'}">
2470
  ${character.element ? `
2471
  <div class="element-icon tooltip" data-tooltip="${elementName}">
2472
  <img src="pic/Elements/Element_${character.element}.webp"
@@ -2480,7 +2444,7 @@
2480
  </div>
2481
  ` : ''}
2482
  </div>
2483
- <p class="font-semibold text-sm dark:text-white truncate">${character.name}</p>
2484
  `;
2485
 
2486
  if (isSelectable) {
@@ -2503,8 +2467,8 @@
2503
 
2504
  card.innerHTML = `
2505
  <img src="${boss.icon}" alt="${boss.name}"
2506
- class="w-24 h-24 rounded-full object-cover mx-auto mb-4 border-4 ${isLegend ? 'border-purple-500' : 'border-blue-500'}">
2507
- <h3 class="font-bold text-lg mb-2 dark:text-white">${boss.name}</h3>
2508
  ${isClickable ? `
2509
  <a href="${boss.guideUrl}" target="_blank"
2510
  class="inline-block mt-3 px-4 py-2 rounded-xl gradient-secondary text-white text-sm font-semibold hover:scale-105 transition-transform">
@@ -2615,12 +2579,12 @@
2615
 
2616
  bossToggle.innerHTML = `
2617
  <div class="flex items-center">
2618
- <div class="w-12 h-12 rounded-full overflow-hidden mr-4 flex-shrink-0">
2619
  <img src="${boss.icon}" alt="${boss.name}" class="w-full h-full object-cover">
2620
  </div>
2621
  <div>
2622
- <h4 class="font-semibold dark:text-white text-sm">${boss.name}</h4>
2623
- <p class="text-xs text-gray-500 dark:text-gray-400">${categoryName}</p>
2624
  </div>
2625
  </div>
2626
  <label class="toggle-switch">
@@ -2730,10 +2694,10 @@
2730
  const placeholder = document.createElement('div');
2731
  placeholder.className = 'flex flex-col items-center p-4';
2732
  placeholder.innerHTML = `
2733
- <div class="w-20 h-20 rounded-full bg-gradient-to-r from-purple-500 to-pink-500 flex items-center justify-center mb-3">
2734
- <i class="fas fa-question text-white text-2xl"></i>
2735
  </div>
2736
- <div class="w-24 h-4 bg-gradient-to-r from-gray-300 to-gray-400 dark:from-gray-600 dark:to-gray-700 rounded-full"></div>
2737
  `;
2738
  charactersResult.appendChild(placeholder);
2739
  }
@@ -2757,16 +2721,21 @@
2757
  charactersLoader.classList.add('hidden');
2758
  charactersResult.innerHTML = '';
2759
 
 
 
 
 
2760
  for (let i = 0; i < selectedTeam.length; i++) {
2761
  const char = selectedTeam[i];
2762
  const card = createCharacterCard(char);
2763
  card.classList.add('reveal-animation');
2764
  card.style.animationDelay = `${i * 0.1}s`;
2765
- charactersResult.appendChild(card);
2766
 
2767
  createParticles(card, 10, '#667eea');
2768
  }
2769
 
 
2770
  playSound('reveal');
2771
  createConfetti(50);
2772
 
@@ -2806,8 +2775,8 @@
2806
  worldBossResult.innerHTML = `
2807
  <div class="text-center p-8">
2808
  <div class="text-5xl mb-4">⚠️</div>
2809
- <h3 class="text-xl font-bold dark:text-white mb-2">No Bosses Available</h3>
2810
- <p class="text-gray-600 dark:text-gray-400">Enable some bosses in the settings to spin!</p>
2811
  </div>
2812
  `;
2813
  worldBossLoader.classList.add('hidden');
@@ -2863,8 +2832,8 @@
2863
  weeklyBossResult.innerHTML = `
2864
  <div class="text-center p-8">
2865
  <div class="text-5xl mb-4">⚠️</div>
2866
- <h3 class="text-xl font-bold dark:text-white mb-2">No Bosses Available</h3>
2867
- <p class="text-gray-600 dark:text-gray-400">Enable some bosses in the settings to spin!</p>
2868
  </div>
2869
  `;
2870
  weeklyBossLoader.classList.add('hidden');
@@ -2920,8 +2889,8 @@
2920
  legendResult.innerHTML = `
2921
  <div class="text-center p-8">
2922
  <div class="text-5xl mb-4">⚠️</div>
2923
- <h3 class="text-xl font-bold dark:text-white mb-2">No Legends Available</h3>
2924
- <p class="text-gray-600 dark:text-gray-400">Enable some legends in the settings to spin!</p>
2925
  </div>
2926
  `;
2927
  legendLoader.classList.add('hidden');
@@ -3033,8 +3002,8 @@
3033
  ${item.characters.map(char => `
3034
  <div class="flex flex-col items-center">
3035
  <img src="${char.icon}" alt="${char.name}"
3036
- class="w-12 h-12 rounded-full object-cover border-2 border-white dark:border-gray-700">
3037
- <span class="text-xs mt-1 dark:text-gray-300">${char.name}</span>
3038
  </div>
3039
  `).join('')}
3040
  </div>
@@ -3056,7 +3025,7 @@
3056
  content = `
3057
  <div class="flex items-center justify-center mt-4">
3058
  <img src="${item.icon}" alt="${item.name}"
3059
- class="w-20 h-20 rounded-full object-cover border-4 ${item.type === 'legend' ? 'border-purple-500' : 'border-blue-500'}">
3060
  </div>
3061
  `;
3062
  }
@@ -3069,7 +3038,7 @@
3069
  ${icon}${badgeText}
3070
  </span>
3071
  </div>
3072
- <h3 class="font-bold dark:text-white">${title}</h3>
3073
  </div>
3074
  <button class="delete-history-item p-2 rounded-lg glass hover:bg-red-500 hover:text-white transition-colors" data-index="${index}" data-type="${item.type}">
3075
  <i class="fas fa-times"></i>
@@ -3122,8 +3091,8 @@
3122
  fullHistoryModalContentInner.innerHTML = `
3123
  <div class="text-center py-12">
3124
  <div class="text-5xl mb-4">📜</div>
3125
- <h3 class="text-xl font-bold dark:text-white mb-2">No History</h3>
3126
- <p class="text-gray-600 dark:text-gray-400">Your history will appear here after you save some results.</p>
3127
  </div>
3128
  `;
3129
  } else {
@@ -3149,8 +3118,8 @@
3149
  ${item.characters.map(char => `
3150
  <div class="flex-shrink-0 flex flex-col items-center">
3151
  <img src="${char.icon}" alt="${char.name}"
3152
- class="w-16 h-16 rounded-full object-cover border-2 border-white dark:border-gray-700">
3153
- <span class="text-xs mt-1 dark:text-gray-300 text-center">${char.name}</span>
3154
  </div>
3155
  `).join('')}
3156
  </div>
@@ -3172,7 +3141,7 @@
3172
  content = `
3173
  <div class="flex items-center justify-center mt-4">
3174
  <img src="${item.icon}" alt="${item.name}"
3175
- class="w-24 h-24 rounded-full object-cover border-4 ${item.type === 'legend' ? 'border-purple-500' : 'border-blue-500'}">
3176
  </div>
3177
  `;
3178
  }
@@ -3187,8 +3156,8 @@
3187
  ${icon}${badgeText}
3188
  </span>
3189
  </div>
3190
- <h3 class="font-bold dark:text-white">${title}</h3>
3191
- <p class="text-sm text-gray-500 dark:text-gray-400 mt-1">${date}</p>
3192
  </div>
3193
  </div>
3194
  ${content}
@@ -3270,10 +3239,6 @@
3270
  }
3271
 
3272
  // ==================== EVENT LISTENERS ====================
3273
- // Theme toggle
3274
- themeToggle.addEventListener('click', toggleTheme);
3275
- themeToggle.addEventListener('mousedown', createRipple);
3276
-
3277
  // Stats toggle
3278
  statsToggle.addEventListener('click', () => {
3279
  statsPanel.classList.toggle('open');
@@ -3476,7 +3441,6 @@
3476
  animationsToggle.checked = config.animationsEnabled;
3477
 
3478
  // ==================== INITIALIZATION ====================
3479
- initTheme();
3480
  renderPlayerCharactersSelection('', 'all');
3481
  renderBossSettings('world-bosses');
3482
  renderHistory('all');
 
24
  body {
25
  font-family: 'Inter', sans-serif;
26
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
 
 
 
 
 
27
  background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
28
+ min-height: 100vh;
29
  color: #e2e8f0;
30
  }
31
 
32
  .glass {
 
 
 
 
 
 
 
33
  background: rgba(30, 41, 59, 0.85);
34
+ backdrop-filter: blur(12px);
35
  border: 1px solid rgba(255, 255, 255, 0.1);
36
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
37
  }
38
 
39
  .card-gradient {
 
 
 
 
 
 
40
  background: linear-gradient(145deg, #1e293b, #0f172a);
41
+ border-radius: 20px;
42
  box-shadow: 10px 10px 30px #0a0f1a, -10px -10px 30px #2a3a52;
43
  }
44
 
 
102
 
103
  .card-hover:hover {
104
  transform: translateY(-10px) scale(1.02);
 
 
 
 
105
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.4);
106
  }
107
 
 
154
  width: 28px;
155
  height: 28px;
156
  border-radius: 50%;
157
+ background: #1e293b;
158
  padding: 3px;
159
+ box-shadow: 0 4px 12px rgba(0,0,0,0.3);
160
  display: flex;
161
  align-items: center;
162
  justify-content: center;
163
  z-index: 10;
164
  }
165
 
 
 
 
 
 
166
  .tab-active {
167
  position: relative;
168
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
 
171
  }
172
 
173
  .glow {
 
 
 
 
174
  box-shadow: 0 0 35px rgba(102, 126, 234, 0.6);
175
  }
176
 
 
234
  }
235
 
236
  .custom-scrollbar::-webkit-scrollbar-track {
237
+ background: rgba(255, 255, 255, 0.05);
238
  border-radius: 10px;
239
  }
240
 
 
247
  background: rgba(102, 126, 234, 0.8);
248
  }
249
 
 
 
 
 
250
  .character-card {
251
  position: relative;
252
  overflow: hidden;
 
312
  }
313
 
314
  .stats-card {
 
 
 
 
 
315
  background: linear-gradient(135deg, rgba(102, 126, 234, 0.15) 0%, rgba(118, 75, 162, 0.15) 100%);
316
+ border-left: 4px solid #667eea;
317
  }
318
 
319
  .badge {
 
340
 
341
  .badge-legend {
342
  background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
 
 
 
 
343
  color: white;
344
  }
345
 
346
  .input-field {
347
  transition: all 0.3s ease;
 
 
 
 
 
348
  background: rgba(30, 41, 59, 0.9);
349
+ border: 2px solid transparent;
350
  }
351
 
352
  .input-field:focus {
 
400
  transform: translateX(30px);
401
  }
402
 
 
 
 
 
403
  .character-avatar {
404
  transition: all 0.3s ease;
405
  position: relative;
 
444
  bottom: 100%;
445
  left: 50%;
446
  transform: translateX(-50%);
447
+ background: rgba(255, 255, 255, 0.9);
448
+ color: #1e293b;
449
  padding: 6px 12px;
450
  border-radius: 6px;
451
  font-size: 0.875rem;
 
461
  left: 50%;
462
  transform: translateX(-50%);
463
  border: 5px solid transparent;
464
+ border-top-color: rgba(255, 255, 255, 0.9);
465
  margin-bottom: -5px;
466
  z-index: 100;
467
  }
468
 
 
 
 
 
 
 
 
 
 
469
  .grid-stack {
470
  display: grid;
471
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
472
+ gap: 1.25rem;
473
  }
474
 
475
  @media (min-width: 640px) {
476
  .grid-stack {
477
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
478
  }
479
  }
480
 
481
  @media (min-width: 768px) {
482
  .grid-stack {
483
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
484
  }
485
  }
486
 
487
  @media (min-width: 1024px) {
488
  .grid-stack {
489
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
490
  }
491
  }
492
 
493
  .result-container {
494
+ min-height: 350px;
495
  display: flex;
496
  align-items: center;
497
  justify-content: center;
 
506
  left: 0;
507
  right: 0;
508
  bottom: 0;
 
 
 
 
 
509
  background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
510
+ border-radius: 20px;
511
  }
512
 
513
  .history-item {
 
574
  }
575
 
576
  .star-rating .empty {
 
 
 
 
577
  color: #4b5563;
578
  }
579
 
 
586
  stroke-dashoffset: 283;
587
  transition: stroke-dashoffset 0.5s ease;
588
  }
589
+
590
+ /* Улучшенные пропорции */
591
+ .card-padding {
592
+ padding: 1.75rem;
593
+ }
594
+
595
+ .section-padding {
596
+ padding: 3rem;
597
+ }
598
+
599
+ @media (max-width: 768px) {
600
+ .section-padding {
601
+ padding: 1.5rem;
602
+ }
603
+
604
+ .card-padding {
605
+ padding: 1.25rem;
606
+ }
607
+ }
608
+
609
+ .header-height {
610
+ min-height: auto;
611
+ padding: 2rem 0;
612
+ }
613
+
614
+ .stat-card {
615
+ padding: 1.5rem;
616
+ border-radius: 1.25rem;
617
+ }
618
+
619
+ .character-avatar-lg {
620
+ width: 110px;
621
+ height: 110px;
622
+ }
623
+
624
+ .character-avatar-md {
625
+ width: 90px;
626
+ height: 90px;
627
+ }
628
+
629
+ .boss-avatar {
630
+ width: 140px;
631
+ height: 140px;
632
+ }
633
+
634
+ .button-padding {
635
+ padding: 1rem 2.5rem;
636
+ }
637
+
638
+ .tab-button {
639
+ padding: 0.875rem 2rem;
640
+ border-radius: 1.25rem;
641
+ }
642
  </style>
643
  </head>
644
+ <body>
645
+ <div id="app-container" class="container mx-auto px-4 py-6 md:py-8 max-w-7xl">
646
  <!-- Header -->
647
+ <header class="text-center mb-10">
648
  <div class="flex flex-col md:flex-row justify-between items-center mb-8 gap-6">
649
  <!-- Left controls -->
650
  <div class="flex items-center space-x-4">
 
 
 
 
651
  <button id="language-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Switch language">
652
  <div class="flex flex-col items-center">
653
+ <i class="fas fa-language text-blue-300 text-xl"></i>
654
  <span id="language-label" class="text-xs font-medium mt-1">EN</span>
655
  </div>
656
  </button>
657
 
658
  <div class="hidden md:flex items-center space-x-2 px-4 py-2 rounded-2xl glass">
659
+ <i class="fas fa-user text-purple-400"></i>
660
+ <span class="text-sm font-medium text-gray-300">UID:</span>
661
+ <span id="user-uid" class="text-sm font-mono bg-gray-800 px-2 py-1 rounded-lg"></span>
662
  </div>
663
  </div>
664
 
665
  <!-- Center title -->
666
  <div class="text-center order-first md:order-none">
667
+ <div class="flex items-center justify-center mb-3">
668
+ <div class="w-12 h-12 rounded-full gradient-primary flex items-center justify-center mr-3">
669
  <i class="fas fa-dice text-white text-xl"></i>
670
  </div>
671
+ <h1 class="text-4xl md:text-5xl lg:text-5xl font-bold bg-gradient-to-r from-purple-500 via-blue-400 to-purple-500 bg-clip-text text-transparent animate-pulse">
672
  <span data-i18n="title">Genshin Roulette</span>
673
  </h1>
674
  </div>
675
+ <p class="text-lg text-gray-300 max-w-2xl mx-auto" data-i18n="subtitle">
676
  Random characters, bosses & legends for your Genshin Impact adventure
677
  </p>
678
  </div>
 
680
  <!-- Right controls -->
681
  <div class="flex items-center space-x-4">
682
  <button id="stats-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Show stats">
683
+ <i class="fas fa-chart-bar text-green-300 text-xl"></i>
684
  </button>
685
 
686
  <button id="settings-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Settings">
687
+ <i class="fas fa-cog text-gray-300 group-hover:rotate-90 transition-transform text-xl"></i>
688
  </button>
689
 
690
  <button id="help-toggle" class="p-3 rounded-2xl glass hover:scale-105 transition-transform duration-300 group tooltip" data-tooltip="Help">
691
+ <i class="fas fa-question text-yellow-300 text-xl"></i>
692
  </button>
693
  </div>
694
  </div>
 
699
  <div class="stats-card p-4 rounded-2xl">
700
  <div class="flex items-center justify-between">
701
  <div>
702
+ <p class="text-sm text-gray-400" data-i18n="stats.characters">Characters</p>
703
+ <p class="text-2xl font-bold text-white" id="total-characters">120</p>
704
  </div>
705
+ <i class="fas fa-users text-purple-400 text-2xl"></i>
706
  </div>
707
+ <div class="mt-2 text-xs text-gray-400">
708
  <span data-i18n="stats.owned">Owned:</span> <span id="owned-characters">0</span>
709
  </div>
710
  </div>
 
712
  <div class="stats-card p-4 rounded-2xl">
713
  <div class="flex items-center justify-between">
714
  <div>
715
+ <p class="text-sm text-gray-400" data-i18n="stats.worldBosses">World Bosses</p>
716
+ <p class="text-2xl font-bold text-white" id="total-world-bosses">40</p>
717
  </div>
718
+ <i class="fas fa-dragon text-blue-400 text-2xl"></i>
719
  </div>
720
+ <div class="mt-2 text-xs text-gray-400">
721
  <span data-i18n="stats.available">Available:</span> <span id="available-world-bosses">40</span>
722
  </div>
723
  </div>
 
725
  <div class="stats-card p-4 rounded-2xl">
726
  <div class="flex items-center justify-between">
727
  <div>
728
+ <p class="text-sm text-gray-400" data-i18n="stats.weeklyBosses">Weekly Bosses</p>
729
+ <p class="text-2xl font-bold text-white" id="total-weekly-bosses">12</p>
730
  </div>
731
+ <i class="fas fa-crown text-yellow-400 text-2xl"></i>
732
  </div>
733
+ <div class="mt-2 text-xs text-gray-400">
734
  <span data-i18n="stats.available">Available:</span> <span id="available-weekly-bosses">12</span>
735
  </div>
736
  </div>
 
738
  <div class="stats-card p-4 rounded-2xl">
739
  <div class="flex items-center justify-between">
740
  <div>
741
+ <p class="text-sm text-gray-400" data-i18n="stats.legends">Legends</p>
742
+ <p class="text-2xl font-bold text-white" id="total-legends">30</p>
743
  </div>
744
+ <i class="fas fa-landmark text-pink-400 text-2xl"></i>
745
  </div>
746
+ <div class="mt-2 text-xs text-gray-400">
747
  <span data-i18n="stats.available">Available:</span> <span id="available-legends">30</span>
748
  </div>
749
  </div>
 
752
 
753
  <!-- Category Tabs -->
754
  <div class="flex flex-wrap justify-center gap-3 mb-8">
755
+ <button data-category="characters" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group tab-button">
756
+ <i class="fas fa-users mr-2 text-purple-400 group-hover:text-white transition-colors"></i>
757
  <span data-i18n="tab.characters">Character Team</span>
758
  </button>
759
 
760
+ <button data-category="world-bosses" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group tab-button">
761
+ <i class="fas fa-dragon mr-2 text-blue-400 group-hover:text-white transition-colors"></i>
762
  <span data-i18n="tab.worldBosses">World Bosses</span>
763
  </button>
764
 
765
+ <button data-category="weekly-bosses" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group tab-button">
766
+ <i class="fas fa-crown mr-2 text-yellow-400 group-hover:text-white transition-colors"></i>
767
  <span data-i18n="tab.weeklyBosses">Weekly Bosses</span>
768
  </button>
769
 
770
+ <button data-category="local-legends" class="tab-btn px-6 py-3 rounded-2xl glass font-semibold transition-all duration-300 hover:scale-105 flex items-center group tab-button">
771
+ <i class="fas fa-landmark mr-2 text-pink-400 group-hover:text-white transition-colors"></i>
772
  <span data-i18n="tab.localLegends">Local Legends</span>
773
  </button>
774
  </div>
 
778
  <!-- Settings Panel -->
779
  <div id="settings-panel" class="settings-panel glass rounded-3xl p-8 mb-10">
780
  <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-8 gap-4">
781
+ <h3 class="text-2xl font-bold text-white flex items-center">
782
+ <i class="fas fa-sliders-h mr-3 text-purple-400"></i>
783
  <span data-i18n="settings.title">Roulette Settings</span>
784
  </h3>
785
 
786
  <div class="flex items-center space-x-4">
787
  <div class="flex items-center space-x-2">
788
+ <span class="text-sm font-medium text-gray-300" data-i18n="settings.sound">Sound:</span>
789
  <label class="toggle-switch">
790
  <input type="checkbox" id="sound-toggle" checked>
791
  <span class="toggle-slider"></span>
 
793
  </div>
794
 
795
  <div class="flex items-center space-x-2">
796
+ <span class="text-sm font-medium text-gray-300" data-i18n="settings.animations">Animations:</span>
797
  <label class="toggle-switch">
798
  <input type="checkbox" id="animations-toggle" checked>
799
  <span class="toggle-slider"></span>
 
805
  <!-- Basic Settings -->
806
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-10">
807
  <div class="card-gradient p-6 rounded-2xl">
808
+ <label for="team-size" class="block text-sm font-semibold mb-3 text-gray-300 flex items-center">
809
+ <i class="fas fa-user-group mr-2 text-purple-400"></i>
810
  <span data-i18n="settings.teamSize">Team Size</span>
811
  </label>
812
  <select id="team-size" class="w-full p-3 rounded-xl input-field focus:ring-2 focus:ring-purple-500 transition-all">
 
818
  </div>
819
 
820
  <div class="card-gradient p-6 rounded-2xl">
821
+ <label for="animation-speed" class="block text-sm font-semibold mb-3 text-gray-300 flex items-center">
822
+ <i class="fas fa-tachometer-alt mr-2 text-blue-400"></i>
823
  <span data-i18n="settings.animationSpeed">Animation Speed</span>
824
  </label>
825
  <select id="animation-speed" class="w-full p-3 rounded-xl input-field focus:ring-2 focus:ring-purple-500 transition-all">
 
830
  </div>
831
 
832
  <div class="card-gradient p-6 rounded-2xl">
833
+ <label for="duplicates" class="block text-sm font-semibold mb-3 text-gray-300 flex items-center">
834
+ <i class="fas fa-copy mr-2 text-green-400"></i>
835
  <span data-i18n="settings.duplicates">Allow Duplicates</span>
836
  </label>
837
  <select id="duplicates" class="w-full p-3 rounded-xl input-field focus:ring-2 focus:ring-purple-500 transition-all">
 
844
  <!-- My Characters Section -->
845
  <div class="mb-10">
846
  <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-6 gap-4">
847
+ <h3 class="text-2xl font-bold text-white flex items-center">
848
+ <i class="fas fa-user-check mr-3 text-green-400"></i>
849
  <span data-i18n="settings.myCharacters">My Characters</span>
850
  </h3>
851
 
852
  <div class="flex items-center space-x-3">
853
  <div class="px-4 py-2 rounded-xl glass">
854
+ <span class="text-sm font-medium text-gray-300">
855
  <span data-i18n="settings.selected">Selected:</span>
856
  <span id="selected-count">0</span>/<span id="total-characters-count">120</span>
857
  </span>
 
867
  </div>
868
  </div>
869
 
870
+ <p class="text-gray-400 mb-6" data-i18n="settings.myCharactersDesc">
871
  Select characters you own. If none selected, all characters will be used.
872
  </p>
873
 
 
904
 
905
  <!-- Progress Bar -->
906
  <div class="mb-2">
907
+ <div class="flex justify-between text-sm text-gray-400 mb-1">
908
  <span data-i18n="settings.progress">Selection Progress</span>
909
  <span id="selection-percentage">0%</span>
910
  </div>
911
+ <div class="w-full bg-gray-700 rounded-full h-2.5">
912
  <div id="selection-progress-bar" class="progress-bar h-2.5 rounded-full"></div>
913
  </div>
914
  </div>
 
916
 
917
  <!-- Boss Settings -->
918
  <div>
919
+ <h3 class="text-2xl font-bold mb-6 text-white flex items-center">
920
+ <i class="fas fa-dragon mr-3 text-red-400"></i>
921
  <span data-i18n="settings.bossSettings">Boss & Legend Settings</span>
922
  </h3>
923
 
924
+ <p class="text-gray-400 mb-6" data-i18n="settings.bossSettingsDesc">
925
  Toggle which bosses and legends should be included in randomization
926
  </p>
927
 
928
  <!-- Category Selector -->
929
  <div class="mb-6">
930
  <div class="card-gradient p-6 rounded-2xl">
931
+ <label for="boss-category-select" class="block text-sm font-semibold mb-3 text-gray-300 flex items-center">
932
+ <i class="fas fa-filter mr-2 text-blue-400"></i>
933
  <span data-i18n="settings.category">Category:</span>
934
  </label>
935
  <div class="flex flex-wrap gap-3">
936
  <button data-boss-category="world-bosses" class="boss-category-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105 flex items-center">
937
+ <i class="fas fa-dragon mr-2 text-blue-400"></i>
938
  <span data-i18n="settings.categories.worldBosses">World Bosses</span>
939
+ <span class="ml-2 px-2 py-1 text-xs bg-blue-900 text-blue-200 rounded-full" id="world-boss-count">40</span>
940
  </button>
941
 
942
  <button data-boss-category="weekly-bosses" class="boss-category-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105 flex items-center">
943
+ <i class="fas fa-crown mr-2 text-yellow-400"></i>
944
  <span data-i18n="settings.categories.weeklyBosses">Weekly Bosses</span>
945
+ <span class="ml-2 px-2 py-1 text-xs bg-yellow-900 text-yellow-200 rounded-full" id="weekly-boss-count">12</span>
946
  </button>
947
 
948
  <button data-boss-category="local-legends" class="boss-category-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105 flex items-center active">
949
+ <i class="fas fa-landmark mr-2 text-pink-400"></i>
950
  <span data-i18n="settings.categories.localLegends">Local Legends</span>
951
+ <span class="ml-2 px-2 py-1 text-xs bg-pink-900 text-pink-200 rounded-full" id="legend-count">30</span>
952
  </button>
953
  </div>
954
  </div>
 
980
  </div>
981
 
982
  <!-- Characters Section -->
983
+ <section id="characters-section" class="mb-20 glass rounded-3xl p-8 relative overflow-hidden section-padding">
984
  <!-- Background Decoration -->
985
  <div class="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-purple-500/10 to-pink-500/10 rounded-full -translate-y-32 translate-x-32"></div>
986
  <div class="absolute bottom-0 left-0 w-96 h-96 bg-gradient-to-tr from-blue-500/10 to-cyan-500/10 rounded-full translate-y-48 -translate-x-48"></div>
987
 
988
  <div class="relative z-10">
989
  <div class="text-center mb-10">
990
+ <div class="inline-flex items-center justify-center w-24 h-24 rounded-full gradient-primary mb-6">
991
+ <i class="fas fa-users text-white text-4xl"></i>
992
  </div>
993
+ <h2 class="text-5xl font-bold mb-4 text-white" data-i18n="sections.characters.title">
994
  Character Team Roulette
995
  </h2>
996
+ <p class="text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.characters.subtitle">
997
  Spin to get a random team of characters for your next adventure
998
  </p>
999
  </div>
 
1001
  <!-- Team Configuration -->
1002
  <div class="flex flex-col md:flex-row justify-between items-center mb-10 gap-6">
1003
  <div class="flex-1 w-full">
1004
+ <div class="card-gradient p-6 rounded-2xl card-padding">
1005
  <div class="flex flex-col md:flex-row justify-between items-center gap-4">
1006
  <div>
1007
+ <h4 class="font-bold text-lg text-white mb-2" data-i18n="sections.characters.config">Team Configuration</h4>
1008
+ <p class="text-gray-400 text-sm" data-i18n="sections.characters.configDesc">
1009
  Configure your team before spinning
1010
  </p>
1011
  </div>
1012
 
1013
+ <div class="flex items-center space-x-6">
1014
  <div class="text-center">
1015
+ <div class="text-3xl font-bold text-white" id="current-team-size">4</div>
1016
+ <div class="text-xs text-gray-400" data-i18n="sections.characters.teamSize">Team Size</div>
1017
  </div>
1018
 
1019
  <div class="text-center">
1020
+ <div class="text-3xl font-bold text-white" id="available-chars">120</div>
1021
+ <div class="text-xs text-gray-400" data-i18n="sections.characters.available">Available</div>
1022
  </div>
1023
 
1024
  <div class="text-center">
1025
+ <div class="text-3xl font-bold text-white" id="owned-chars">0</div>
1026
+ <div class="text-xs text-gray-400" data-i18n="sections.characters.owned">Owned</div>
1027
  </div>
1028
  </div>
1029
  </div>
1030
  </div>
1031
  </div>
1032
 
1033
+ <div class="flex-shrink-0 mt-4 md:mt-0">
1034
  <button id="spin-characters-button"
1035
+ class="px-14 py-6 rounded-2xl gradient-primary text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group pulse button-padding">
1036
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1037
  <div class="relative z-10 flex items-center justify-center">
1038
  <i class="fas fa-dice-d20 mr-3 text-2xl"></i>
 
1045
  <!-- Result Area -->
1046
  <div id="characters-result" class="result-container rounded-2xl p-8 mb-8">
1047
  <div class="text-center max-w-md mx-auto">
1048
+ <div class="text-7xl mb-6 float-animation">🎮</div>
1049
+ <p id="characters-placeholder" class="text-gray-400 text-xl mb-4" data-i18n="placeholders.characters">
1050
  Your random team will appear here
1051
  </p>
1052
+ <p class="text-gray-500 text-sm" data-i18n="placeholders.charactersHint">
1053
  Click the "Spin Team!" button to generate a random team
1054
  </p>
1055
  </div>
 
1082
  </section>
1083
 
1084
  <!-- World Bosses Section -->
1085
+ <section id="world-bosses-section" class="mb-20 glass rounded-3xl p-8 hidden relative overflow-hidden section-padding">
1086
  <!-- Background Decoration -->
1087
  <div class="absolute top-0 left-0 w-64 h-64 bg-gradient-to-br from-blue-500/10 to-cyan-500/10 rounded-full -translate-y-32 -translate-x-32"></div>
1088
  <div class="absolute bottom-0 right-0 w-96 h-96 bg-gradient-to-tr from-purple-500/10 to-pink-500/10 rounded-full translate-y-48 translate-x-48"></div>
1089
 
1090
  <div class="relative z-10">
1091
  <div class="text-center mb-10">
1092
+ <div class="inline-flex items-center justify-center w-24 h-24 rounded-full gradient-accent mb-6">
1093
+ <i class="fas fa-dragon text-white text-4xl"></i>
1094
  </div>
1095
+ <h2 class="text-5xl font-bold mb-4 text-white" data-i18n="sections.worldBosses.title">
1096
  World Boss Roulette
1097
  </h2>
1098
+ <p class="text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.worldBosses.subtitle">
1099
  Challenge a random world boss and test your skills
1100
  </p>
1101
  </div>
1102
 
1103
  <div class="flex justify-center mb-10">
1104
  <button id="spin-world-boss-button"
1105
+ class="px-14 py-6 rounded-2xl gradient-accent text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group button-padding">
1106
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1107
  <div class="relative z-10 flex items-center justify-center">
1108
  <i class="fas fa-dragon mr-3 text-2xl"></i>
 
1113
 
1114
  <div id="world-boss-result" class="result-container rounded-2xl p-8 mb-8">
1115
  <div class="text-center max-w-md mx-auto">
1116
+ <div class="text-7xl mb-6 float-animation">🐉</div>
1117
+ <p id="world-boss-placeholder" class="text-gray-400 text-xl mb-4" data-i18n="placeholders.worldBoss">
1118
  Random world boss will appear here
1119
  </p>
1120
+ <p class="text-gray-500 text-sm" data-i18n="placeholders.worldBossHint">
1121
  Click the "Spin Boss!" button to generate a random world boss
1122
  </p>
1123
  </div>
 
1135
  </section>
1136
 
1137
  <!-- Weekly Bosses Section -->
1138
+ <section id="weekly-bosses-section" class="mb-20 glass rounded-3xl p-8 hidden relative overflow-hidden section-padding">
1139
  <!-- Background Decoration -->
1140
  <div class="absolute top-0 right-0 w-64 h-64 bg-gradient-to-br from-yellow-500/10 to-orange-500/10 rounded-full -translate-y-32 translate-x-32"></div>
1141
  <div class="absolute bottom-0 left-0 w-96 h-96 bg-gradient-to-tr from-red-500/10 to-pink-500/10 rounded-full translate-y-48 -translate-x-48"></div>
1142
 
1143
  <div class="relative z-10">
1144
  <div class="text-center mb-10">
1145
+ <div class="inline-flex items-center justify-center w-24 h-24 rounded-full gradient-gold mb-6">
1146
+ <i class="fas fa-crown text-white text-4xl"></i>
1147
  </div>
1148
+ <h2 class="text-5xl font-bold mb-4 text-white" data-i18n="sections.weeklyBosses.title">
1149
  Weekly Boss Roulette
1150
  </h2>
1151
+ <p class="text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.weeklyBosses.subtitle">
1152
  Face a random weekly boss for valuable rewards
1153
  </p>
1154
  </div>
1155
 
1156
  <div class="flex justify-center mb-10">
1157
  <button id="spin-weekly-boss-button"
1158
+ class="px-14 py-6 rounded-2xl gradient-gold text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group button-padding">
1159
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1160
  <div class="relative z-10 flex items-center justify-center">
1161
  <i class="fas fa-crown mr-3 text-2xl"></i>
 
1166
 
1167
  <div id="weekly-boss-result" class="result-container rounded-2xl p-8 mb-8">
1168
  <div class="text-center max-w-md mx-auto">
1169
+ <div class="text-7xl mb-6 float-animation">⚔️</div>
1170
+ <p id="weekly-boss-placeholder" class="text-gray-400 text-xl mb-4" data-i18n="placeholders.weeklyBoss">
1171
  Random weekly boss will appear here
1172
  </p>
1173
+ <p class="text-gray-500 text-sm" data-i18n="placeholders.weeklyBossHint">
1174
  Click the "Spin Weekly Boss!" button to generate a random weekly boss
1175
  </p>
1176
  </div>
 
1188
  </section>
1189
 
1190
  <!-- Local Legends Section -->
1191
+ <section id="local-legends-section" class="mb-20 glass rounded-3xl p-8 hidden relative overflow-hidden section-padding">
1192
  <!-- Background Decoration -->
1193
  <div class="absolute top-0 left-0 w-64 h-64 bg-gradient-to-br from-pink-500/10 to-purple-500/10 rounded-full -translate-y-32 -translate-x-32"></div>
1194
  <div class="absolute bottom-0 right-0 w-96 h-96 bg-gradient-to-tr from-green-500/10 to-cyan-500/10 rounded-full translate-y-48 translate-x-48"></div>
1195
 
1196
  <div class="relative z-10">
1197
  <div class="text-center mb-10">
1198
+ <div class="inline-flex items-center justify-center w-24 h-24 rounded-full gradient-purple mb-6">
1199
+ <i class="fas fa-landmark text-white text-4xl"></i>
1200
  </div>
1201
+ <h2 class="text-5xl font-bold mb-4 text-white" data-i18n="sections.localLegends.title">
1202
  Local Legends Roulette
1203
  </h2>
1204
+ <p class="text-gray-300 text-lg max-w-2xl mx-auto" data-i18n="sections.localLegends.subtitle">
1205
  Discover and challenge random local legends across Teyvat
1206
  </p>
1207
  </div>
1208
 
1209
  <div class="flex justify-center mb-10">
1210
  <button id="spin-legend-button"
1211
+ class="px-14 py-6 rounded-2xl gradient-purple text-white font-bold text-xl hover:scale-105 transition-transform duration-300 shadow-lg hover:shadow-xl relative overflow-hidden group button-padding">
1212
  <div class="absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000"></div>
1213
  <div class="relative z-10 flex items-center justify-center">
1214
  <i class="fas fa-landmark mr-3 text-2xl"></i>
 
1219
 
1220
  <div id="legend-result" class="result-container rounded-2xl p-8 mb-8">
1221
  <div class="text-center max-w-md mx-auto">
1222
+ <div class="text-7xl mb-6 float-animation">🏆</div>
1223
+ <p id="legend-placeholder" class="text-gray-400 text-xl mb-4" data-i18n="placeholders.legend">
1224
  Random local legend will appear here
1225
  </p>
1226
+ <p class="text-gray-500 text-sm" data-i18n="placeholders.legendHint">
1227
  Click the "Spin Legend!" button to discover a random local legend
1228
  </p>
1229
  </div>
 
1241
  </section>
1242
 
1243
  <!-- History Section -->
1244
+ <section id="history-section" class="glass rounded-3xl p-8 relative overflow-hidden section-padding">
1245
  <!-- Background Decoration -->
1246
  <div class="absolute top-0 right-0 w-48 h-48 bg-gradient-to-br from-gray-500/10 to-gray-700/10 rounded-full -translate-y-24 translate-x-24"></div>
1247
 
1248
  <div class="relative z-10">
1249
  <div class="flex flex-col md:flex-row justify-between items-center mb-10 gap-6">
1250
  <div>
1251
+ <h2 class="text-5xl font-bold text-white flex items-center">
1252
+ <i class="fas fa-history mr-4 text-purple-400"></i>
1253
  <span data-i18n="history.title">History</span>
1254
  </h2>
1255
+ <p class="text-gray-400 mt-2" data-i18n="history.subtitle">
1256
  Your recent random selections
1257
  </p>
1258
  </div>
 
1287
  </button>
1288
 
1289
  <button data-history-filter="team" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1290
+ <i class="fas fa-users mr-2 text-purple-400"></i>
1291
  <span data-i18n="history.filters.teams">Teams</span>
1292
  </button>
1293
 
1294
  <button data-history-filter="world-boss" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1295
+ <i class="fas fa-dragon mr-2 text-blue-400"></i>
1296
  <span data-i18n="history.filters.worldBosses">World Bosses</span>
1297
  </button>
1298
 
1299
  <button data-history-filter="weekly-boss" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1300
+ <i class="fas fa-crown mr-2 text-yellow-400"></i>
1301
  <span data-i18n="history.filters.weeklyBosses">Weekly Bosses</span>
1302
  </button>
1303
 
1304
  <button data-history-filter="legend" class="history-filter-btn px-4 py-2 rounded-xl glass font-medium transition-all hover:scale-105">
1305
+ <i class="fas fa-landmark mr-2 text-pink-400"></i>
1306
  <span data-i18n="history.filters.legends">Legends</span>
1307
  </button>
1308
  </div>
 
1310
 
1311
  <!-- History Content -->
1312
  <div id="history-content" class="space-y-6">
1313
+ <p id="history-placeholder" class="text-center text-gray-400 text-lg py-12" data-i18n="placeholders.history">
1314
  Your random selections history will appear here
1315
  </p>
1316
  </div>
1317
 
1318
  <!-- History Stats -->
1319
+ <div class="mt-10 pt-8 border-t border-gray-700">
1320
  <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
1321
+ <div class="text-center p-4 rounded-2xl glass stat-card">
1322
+ <div class="text-2xl font-bold text-white" id="history-total">0</div>
1323
+ <div class="text-sm text-gray-400" data-i18n="history.stats.total">Total Entries</div>
1324
  </div>
1325
 
1326
+ <div class="text-center p-4 rounded-2xl glass stat-card">
1327
+ <div class="text-2xl font-bold text-white" id="history-teams">0</div>
1328
+ <div class="text-sm text-gray-400" data-i18n="history.stats.teams">Teams</div>
1329
  </div>
1330
 
1331
+ <div class="text-center p-4 rounded-2xl glass stat-card">
1332
+ <div class="text-2xl font-bold text-white" id="history-bosses">0</div>
1333
+ <div class="text-sm text-gray-400" data-i18n="history.stats.bosses">Bosses</div>
1334
  </div>
1335
 
1336
+ <div class="text-center p-4 rounded-2xl glass stat-card">
1337
+ <div class="text-2xl font-bold text-white" id="history-legends">0</div>
1338
+ <div class="text-sm text-gray-400" data-i18n="history.stats.legends">Legends</div>
1339
  </div>
1340
  </div>
1341
  </div>
 
1344
  </main>
1345
 
1346
  <!-- Footer -->
1347
+ <footer class="text-center mt-20 pt-10 border-t border-gray-700">
1348
  <div class="flex flex-col lg:flex-row justify-between items-center mb-8 gap-8">
1349
  <div class="text-left">
1350
  <div class="flex items-center mb-4">
1351
+ <div class="w-12 h-12 rounded-full gradient-primary flex items-center justify-center mr-3">
1352
  <i class="fas fa-dice text-white"></i>
1353
  </div>
1354
+ <h3 class="text-xl font-bold text-white">Genshin Roulette</h3>
1355
  </div>
1356
+ <p class="text-sm text-gray-400 max-w-md" data-i18n="footer.disclaimer">
1357
  This is a fan-made project. Not affiliated with or endorsed by HoYoverse.
1358
  </p>
1359
  </div>
 
1362
  </div>
1363
  </div>
1364
 
1365
+ <div class="flex flex-col md:flex-row justify-between items-center pt-8 border-t border-gray-700 gap-4">
1366
  <div class="flex items-center space-x-6">
1367
+ <span class="text-sm text-gray-400">
1368
  <span data-i18n="footer.version">Version:</span> <span class="font-mono">2.1.0</span>
1369
  </span>
1370
+ <span class="text-sm text-gray-400">
1371
  <span data-i18n="footer.characters">Characters:</span> <span class="font-bold">120</span>
1372
  </span>
1373
+ <span class="text-sm text-gray-400">
1374
  <span data-i18n="footer.bosses">Bosses:</span> <span class="font-bold">82</span>
1375
  </span>
1376
  </div>
1377
 
1378
  <div class="flex items-center space-x-4">
1379
  <button id="back-to-top" class="p-2 rounded-full glass hover:scale-105 transition-transform tooltip" data-tooltip="Back to top">
1380
+ <i class="fas fa-arrow-up text-gray-300"></i>
1381
  </button>
1382
 
1383
  <a href="#" class="p-2 rounded-full glass hover:scale-105 transition-transform tooltip" data-tooltip="GitHub">
1384
+ <i class="fab fa-github text-gray-300"></i>
1385
  </a>
1386
 
1387
  <a href="#" class="p-2 rounded-full glass hover:scale-105 transition-transform tooltip" data-tooltip="Discord">
1388
+ <i class="fab fa-discord text-gray-300"></i>
1389
  </a>
1390
  </div>
1391
  </div>
 
1398
  <div class="w-20 h-20 rounded-full gradient-danger flex items-center justify-center mx-auto mb-6">
1399
  <i class="fas fa-exclamation text-white text-3xl"></i>
1400
  </div>
1401
+ <h3 class="text-2xl font-bold mb-4 text-white" data-i18n="modals.confirm.title">Confirmation</h3>
1402
+ <p id="confirm-modal-message" class="text-gray-300 mb-8 text-lg" data-i18n="modals.confirm.message">
1403
  Are you sure you want to clear history?
1404
  </p>
1405
  <div class="flex justify-center gap-4">
 
1418
  <div id="full-history-modal" class="fixed inset-0 bg-black/70 z-50 flex justify-center items-center hidden p-4 modal-backdrop">
1419
  <div class="glass rounded-3xl w-full max-w-6xl h-[90vh] flex flex-col p-8 modal-content">
1420
  <div class="flex justify-between items-center mb-8">
1421
+ <h2 class="text-4xl font-bold text-white flex items-center">
1422
+ <i class="fas fa-history mr-4 text-purple-400"></i>
1423
  <span data-i18n="modals.fullHistory.title">Full History</span>
1424
  </h2>
1425
  <button id="full-history-modal-close" class="p-3 rounded-2xl glass hover:scale-105 transition-transform">
1426
+ <i class="fas fa-times text-gray-300 text-xl"></i>
1427
  </button>
1428
  </div>
1429
 
 
1431
  <!-- History items will be dynamically added here -->
1432
  </div>
1433
 
1434
+ <div class="text-center mt-8 pt-6 border-t border-gray-700">
1435
  <button id="full-history-modal-close-bottom" class="px-8 py-3 rounded-2xl glass font-semibold hover:scale-105 transition-transform flex items-center mx-auto">
1436
  <i class="fas fa-times mr-3"></i>
1437
  <span data-i18n="buttons.close">Close</span>
 
1444
  <div id="help-modal" class="fixed inset-0 bg-black/70 z-50 flex justify-center items-center hidden p-4 modal-backdrop">
1445
  <div class="glass rounded-3xl w-full max-w-4xl h-[80vh] flex flex-col p-8 modal-content">
1446
  <div class="flex justify-between items-center mb-8">
1447
+ <h2 class="text-4xl font-bold text-white flex items-center">
1448
+ <i class="fas fa-question-circle mr-4 text-yellow-400"></i>
1449
  <span data-i18n="modals.help.title">Help & Guide</span>
1450
  </h2>
1451
  <button id="help-modal-close" class="p-3 rounded-2xl glass hover:scale-105 transition-transform">
1452
+ <i class="fas fa-times text-gray-300 text-xl"></i>
1453
  </button>
1454
  </div>
1455
 
1456
  <div class="flex-1 overflow-y-auto pr-4 space-y-8 custom-scrollbar">
1457
  <div>
1458
+ <h3 class="text-2xl font-bold text-white mb-4" data-i18n="help.gettingStarted">Getting Started</h3>
1459
  <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
1460
  <div class="card-gradient p-6 rounded-2xl">
1461
  <div class="w-12 h-12 rounded-full gradient-primary flex items-center justify-center mb-4">
1462
  <i class="fas fa-users text-white"></i>
1463
  </div>
1464
+ <h4 class="font-bold text-lg text-white mb-2" data-i18n="help.selectCharacters">Select Your Characters</h4>
1465
+ <p class="text-gray-400" data-i18n="help.selectCharactersDesc">
1466
  Go to Settings → My Characters and select all characters you own. This ensures the roulette only uses characters you have.
1467
  </p>
1468
  </div>
 
1471
  <div class="w-12 h-12 rounded-full gradient-accent flex items-center justify-center mb-4">
1472
  <i class="fas fa-sliders-h text-white"></i>
1473
  </div>
1474
+ <h4 class="font-bold text-lg text-white mb-2" data-i18n="help.configureSettings">Configure Settings</h4>
1475
+ <p class="text-gray-400" data-i18n="help.configureSettingsDesc">
1476
  Adjust team size, animation speed, and boss preferences in the settings panel to customize your experience.
1477
  </p>
1478
  </div>
 
1480
  </div>
1481
 
1482
  <div>
1483
+ <h3 class="text-2xl font-bold text-white mb-4" data-i18n="help.features">Features</h3>
1484
  <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
1485
  <div class="card-gradient p-6 rounded-2xl">
1486
+ <h4 class="font-bold text-lg text-white mb-2 flex items-center">
1487
+ <i class="fas fa-users mr-2 text-purple-400"></i>
1488
  <span data-i18n="help.teamRoulette">Team Roulette</span>
1489
  </h4>
1490
+ <p class="text-gray-400 text-sm" data-i18n="help.teamRouletteDesc">
1491
  Generate random teams of 1-4 characters for new gameplay challenges.
1492
  </p>
1493
  </div>
1494
 
1495
  <div class="card-gradient p-6 rounded-2xl">
1496
+ <h4 class="font-bold text-lg text-white mb-2 flex items-center">
1497
+ <i class="fas fa-dragon mr-2 text-blue-400"></i>
1498
  <span data-i18n="help.bossRoulette">Boss Roulette</span>
1499
  </h4>
1500
+ <p class="text-gray-400 text-sm" data-i18n="help.bossRouletteDesc">
1501
  Get random world bosses, weekly bosses, or local legends to challenge.
1502
  </p>
1503
  </div>
1504
 
1505
  <div class="card-gradient p-6 rounded-2xl">
1506
+ <h4 class="font-bold text-lg text-white mb-2 flex items-center">
1507
+ <i class="fas fa-history mr-2 text-green-400"></i>
1508
  <span data-i18n="help.history">History & Stats</span>
1509
  </h4>
1510
+ <p class="text-gray-400 text-sm" data-i18n="help.historyDesc">
1511
  Track all your generated teams and bosses with detailed statistics.
1512
  </p>
1513
  </div>
 
1515
  </div>
1516
 
1517
  <div>
1518
+ <h3 class="text-2xl font-bold text-white mb-4" data-i18n="help.tips">Tips & Tricks</h3>
1519
  <div class="space-y-4">
1520
  <div class="flex items-start">
1521
+ <div class="w-8 h-8 rounded-full bg-green-900 flex items-center justify-center mr-4 flex-shrink-0">
1522
+ <i class="fas fa-lightbulb text-green-400"></i>
1523
  </div>
1524
+ <p class="text-gray-400" data-i18n="help.tip1">
1525
  Use the "My Characters" feature to limit the roulette to only characters you own for more realistic teams.
1526
  </p>
1527
  </div>
1528
 
1529
  <div class="flex items-start">
1530
+ <div class="w-8 h-8 rounded-full bg-blue-900 flex items-center justify-center mr-4 flex-shrink-0">
1531
+ <i class="fas fa-lightbulb text-blue-400"></i>
1532
  </div>
1533
+ <p class="text-gray-400" data-i18n="help.tip2">
1534
  Save your favorite teams with custom names for quick reference later.
1535
  </p>
1536
  </div>
1537
 
1538
  <div class="flex items-start">
1539
+ <div class="w-8 h-8 rounded-full bg-purple-900 flex items-center justify-center mr-4 flex-shrink-0">
1540
+ <i class="fas fa-lightbulb text-purple-400"></i>
1541
  </div>
1542
+ <p class="text-gray-400" data-i18n="help.tip3">
1543
  Enable sound effects for a more immersive spinning experience.
1544
  </p>
1545
  </div>
 
2023
  { "name": "Говорящая с духами отшельница", "icon": "pic/WorldBoss/Govoryashchaya-s-dukhami-otshelnitsa.webp" },
2024
  { "name": "Сумрачная папилла", "icon": "pic/WorldBoss/Sumrachnaya-papilla.webp" },
2025
  { "name": "Автоматон: Конфигуратор", "icon": "pic/WorldBoss/Avtomaton-tainstvennogo-istochnika.webp" },
2026
+ { "name": "Прожорливый Горный корень-юмказавр", "icon": "pic/WorldBoss/Prozhorlivyy-gornyy-koren-yumkazavr.webp" },
2027
+ { "name": "Кукузавр-тиран золотого пламени", "icon": "pic/WorldBoss/Prozhorlivyi_-Gornyi_-koren_yumkazavr.webp" },
2028
  { "name": "Легат големов", "icon": "pic/WorldBoss/Kapitan-golemov.webp" },
2029
  { "name": "Суаньни-отшельник", "icon": "pic/WorldBoss/Suanni_otshelnik.webp" },
2030
  { "name": "Гидротульпа", "icon": "pic/WorldBoss/Probuzhdyennaya-zhizn.webp" },
 
2046
  { "name": "Манифестация грома", "icon": "pic/WorldBoss/Elektro-Okeanid.png" },
2047
  { "name": "Бесконечный механический массив", "icon": "pic/WorldBoss/Beskonechnyy-mekhanicheskiy-massiv.png" },
2048
  { "name": "Пиро гипостазис", "icon": "pic/WorldBoss/Piro-gipostazis.png" },
2049
+ { "name": "Магу Кенки", "icon": "pic/WorldBoss/show.png" },
2050
  { "name": "Крио гипостазис", "icon": "pic/WorldBoss/Cryo_Hypostasis.webp" },
2051
  { "name": "Древний геовишап", "icon": "pic/WorldBoss/Drevniy-geovishap.webp" },
2052
  { "name": "Гео гипостазис", "icon": "pic/WorldBoss/UI_MonsterIcon_Effigy_Rock.png" },
 
2137
  const config = {
2138
  teamSize: parseInt(localStorage.getItem(`${currentUserUID}_teamSize`)) || 4,
2139
  animationSpeed: localStorage.getItem(`${currentUserUID}_animationSpeed`) || 'medium',
 
2140
  category: localStorage.getItem('genshinCategory') || 'characters',
2141
  soundEnabled: localStorage.getItem('soundEnabled') !== 'false',
2142
  animationsEnabled: localStorage.getItem('animationsEnabled') !== 'false',
 
2181
  const historyPlaceholder = document.getElementById('history-placeholder');
2182
  const clearHistoryButton = document.getElementById('clear-history-button');
2183
  const showFullHistoryButton = document.getElementById('show-full-history-button');
 
2184
  const statsToggle = document.getElementById('stats-toggle');
2185
  const statsPanel = document.getElementById('stats-panel');
2186
  const settingsToggle = document.getElementById('settings-toggle');
 
2368
  }
2369
  }
2370
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2371
  // ==================== TAB SYSTEM ====================
2372
  function switchTab(category) {
2373
  // Update tab buttons
 
2428
  const elementName = translations[currentLanguage][`elements.${character.element.toLowerCase()}`] || character.element;
2429
 
2430
  card.innerHTML = `
2431
+ <div class="relative mb-3 mx-auto character-avatar-lg">
2432
  <img src="${character.icon}" alt="${character.name}"
2433
+ class="w-full h-full rounded-full object-cover border-4 ${isSelected ? 'border-purple-500' : 'border-gray-700'}">
2434
  ${character.element ? `
2435
  <div class="element-icon tooltip" data-tooltip="${elementName}">
2436
  <img src="pic/Elements/Element_${character.element}.webp"
 
2444
  </div>
2445
  ` : ''}
2446
  </div>
2447
+ <p class="font-semibold text-sm text-white truncate">${character.name}</p>
2448
  `;
2449
 
2450
  if (isSelectable) {
 
2467
 
2468
  card.innerHTML = `
2469
  <img src="${boss.icon}" alt="${boss.name}"
2470
+ class="boss-avatar rounded-full object-cover mx-auto mb-4 border-4 ${isLegend ? 'border-purple-500' : 'border-blue-500'}">
2471
+ <h3 class="font-bold text-lg mb-2 text-white">${boss.name}</h3>
2472
  ${isClickable ? `
2473
  <a href="${boss.guideUrl}" target="_blank"
2474
  class="inline-block mt-3 px-4 py-2 rounded-xl gradient-secondary text-white text-sm font-semibold hover:scale-105 transition-transform">
 
2579
 
2580
  bossToggle.innerHTML = `
2581
  <div class="flex items-center">
2582
+ <div class="w-16 h-16 rounded-full overflow-hidden mr-4 flex-shrink-0">
2583
  <img src="${boss.icon}" alt="${boss.name}" class="w-full h-full object-cover">
2584
  </div>
2585
  <div>
2586
+ <h4 class="font-semibold text-white text-sm">${boss.name}</h4>
2587
+ <p class="text-xs text-gray-400">${categoryName}</p>
2588
  </div>
2589
  </div>
2590
  <label class="toggle-switch">
 
2694
  const placeholder = document.createElement('div');
2695
  placeholder.className = 'flex flex-col items-center p-4';
2696
  placeholder.innerHTML = `
2697
+ <div class="w-24 h-24 rounded-full bg-gradient-to-r from-purple-500 to-pink-500 flex items-center justify-center mb-3">
2698
+ <i class="fas fa-question text-white text-3xl"></i>
2699
  </div>
2700
+ <div class="w-32 h-4 bg-gradient-to-r from-gray-600 to-gray-700 rounded-full"></div>
2701
  `;
2702
  charactersResult.appendChild(placeholder);
2703
  }
 
2721
  charactersLoader.classList.add('hidden');
2722
  charactersResult.innerHTML = '';
2723
 
2724
+ // Create a grid container for better layout
2725
+ const gridContainer = document.createElement('div');
2726
+ gridContainer.className = 'grid grid-cols-2 md:grid-cols-4 gap-6 w-full';
2727
+
2728
  for (let i = 0; i < selectedTeam.length; i++) {
2729
  const char = selectedTeam[i];
2730
  const card = createCharacterCard(char);
2731
  card.classList.add('reveal-animation');
2732
  card.style.animationDelay = `${i * 0.1}s`;
2733
+ gridContainer.appendChild(card);
2734
 
2735
  createParticles(card, 10, '#667eea');
2736
  }
2737
 
2738
+ charactersResult.appendChild(gridContainer);
2739
  playSound('reveal');
2740
  createConfetti(50);
2741
 
 
2775
  worldBossResult.innerHTML = `
2776
  <div class="text-center p-8">
2777
  <div class="text-5xl mb-4">⚠️</div>
2778
+ <h3 class="text-xl font-bold text-white mb-2">No Bosses Available</h3>
2779
+ <p class="text-gray-400">Enable some bosses in the settings to spin!</p>
2780
  </div>
2781
  `;
2782
  worldBossLoader.classList.add('hidden');
 
2832
  weeklyBossResult.innerHTML = `
2833
  <div class="text-center p-8">
2834
  <div class="text-5xl mb-4">⚠️</div>
2835
+ <h3 class="text-xl font-bold text-white mb-2">No Bosses Available</h3>
2836
+ <p class="text-gray-400">Enable some bosses in the settings to spin!</p>
2837
  </div>
2838
  `;
2839
  weeklyBossLoader.classList.add('hidden');
 
2889
  legendResult.innerHTML = `
2890
  <div class="text-center p-8">
2891
  <div class="text-5xl mb-4">⚠️</div>
2892
+ <h3 class="text-xl font-bold text-white mb-2">No Legends Available</h3>
2893
+ <p class="text-gray-400">Enable some legends in the settings to spin!</p>
2894
  </div>
2895
  `;
2896
  legendLoader.classList.add('hidden');
 
3002
  ${item.characters.map(char => `
3003
  <div class="flex flex-col items-center">
3004
  <img src="${char.icon}" alt="${char.name}"
3005
+ class="w-16 h-16 rounded-full object-cover border-2 border-gray-700">
3006
+ <span class="text-xs mt-1 text-gray-300">${char.name}</span>
3007
  </div>
3008
  `).join('')}
3009
  </div>
 
3025
  content = `
3026
  <div class="flex items-center justify-center mt-4">
3027
  <img src="${item.icon}" alt="${item.name}"
3028
+ class="w-24 h-24 rounded-full object-cover border-4 ${item.type === 'legend' ? 'border-purple-500' : 'border-blue-500'}">
3029
  </div>
3030
  `;
3031
  }
 
3038
  ${icon}${badgeText}
3039
  </span>
3040
  </div>
3041
+ <h3 class="font-bold text-white">${title}</h3>
3042
  </div>
3043
  <button class="delete-history-item p-2 rounded-lg glass hover:bg-red-500 hover:text-white transition-colors" data-index="${index}" data-type="${item.type}">
3044
  <i class="fas fa-times"></i>
 
3091
  fullHistoryModalContentInner.innerHTML = `
3092
  <div class="text-center py-12">
3093
  <div class="text-5xl mb-4">📜</div>
3094
+ <h3 class="text-xl font-bold text-white mb-2">No History</h3>
3095
+ <p class="text-gray-400">Your history will appear here after you save some results.</p>
3096
  </div>
3097
  `;
3098
  } else {
 
3118
  ${item.characters.map(char => `
3119
  <div class="flex-shrink-0 flex flex-col items-center">
3120
  <img src="${char.icon}" alt="${char.name}"
3121
+ class="w-20 h-20 rounded-full object-cover border-2 border-gray-700">
3122
+ <span class="text-xs mt-1 text-gray-300 text-center">${char.name}</span>
3123
  </div>
3124
  `).join('')}
3125
  </div>
 
3141
  content = `
3142
  <div class="flex items-center justify-center mt-4">
3143
  <img src="${item.icon}" alt="${item.name}"
3144
+ class="w-28 h-28 rounded-full object-cover border-4 ${item.type === 'legend' ? 'border-purple-500' : 'border-blue-500'}">
3145
  </div>
3146
  `;
3147
  }
 
3156
  ${icon}${badgeText}
3157
  </span>
3158
  </div>
3159
+ <h3 class="font-bold text-white">${title}</h3>
3160
+ <p class="text-sm text-gray-400 mt-1">${date}</p>
3161
  </div>
3162
  </div>
3163
  ${content}
 
3239
  }
3240
 
3241
  // ==================== EVENT LISTENERS ====================
 
 
 
 
3242
  // Stats toggle
3243
  statsToggle.addEventListener('click', () => {
3244
  statsPanel.classList.toggle('open');
 
3441
  animationsToggle.checked = config.animationsEnabled;
3442
 
3443
  // ==================== INITIALIZATION ====================
 
3444
  renderPlayerCharactersSelection('', 'all');
3445
  renderBossSettings('world-bosses');
3446
  renderHistory('all');