Meneman commited on
Commit
497c13e
·
verified ·
1 Parent(s): ae21b37

undefined - Follow Up Deployment

Browse files
Files changed (1) hide show
  1. index.html +507 -414
index.html CHANGED
@@ -14,26 +14,27 @@
14
  --shadow-strong:0 20px 60px rgba(0,0,0,0.4);
15
  }
16
 
17
- *{box-sizing:border-box;backface-visibility:hidden;perspective:1000px}
18
 
19
- /* Enhanced Typography */
20
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Playfair+Display:wght@400;500;600;700;800;900&display=swap');
21
 
22
  body{margin:0;color:#f8f8f8;font-family:'Inter','Segoe UI',system-ui,-apple-system,Roboto,Arial,sans-serif;
23
  background:#0a0a1e;overflow-x:hidden;min-height:100vh;position:relative;
24
- cursor:none;transform:translateZ(0);will-change:auto;font-weight:400;letter-spacing:-0.025em}
 
25
 
26
- /* ENHANCED: Multi-Layer Background System */
27
  body::before{content:'';position:fixed;inset:0;z-index:0;
28
  background:
29
  radial-gradient(ellipse 800px 400px at 20% 30%, rgba(157,78,221,0.15) 0%, transparent 50%),
30
  radial-gradient(ellipse 600px 300px at 80% 70%, rgba(67,97,238,0.12) 0%, transparent 50%),
31
  radial-gradient(ellipse 400px 200px at 50% 50%, rgba(255,107,107,0.08) 0%, transparent 50%),
32
  linear-gradient(135deg, var(--bg1) 0%, var(--bg2) 50%, var(--bg3) 100%);
33
- animation:enhancedBreathing 15s ease-in-out infinite;transform:translateZ(0)}
34
- @keyframes enhancedBreathing{0%,100%{opacity:0.85;transform:scale(1)}50%{opacity:1;transform:scale(1.02)}}
35
 
36
- /* ENHANCED: Flowing Aurora Effect */
37
  .aurora{position:fixed;inset:0;z-index:1;pointer-events:none;
38
  background:
39
  linear-gradient(45deg,
@@ -42,32 +43,39 @@
42
  linear-gradient(-45deg,
43
  rgba(255,107,107,0.05) 0%,transparent 30%,rgba(157,78,221,0.07) 70%,transparent 100%);
44
  background-size:400% 400%, 300% 300%;
45
- animation:enhancedAurora 20s ease-in-out infinite, auroraPulse 8s ease-in-out infinite;
46
- transform:translateZ(0);will-change:background-position,opacity}
47
- @keyframes enhancedAurora{0%,100%{background-position:0% 0%, 100% 100%}50%{background-position:100% 100%, 0% 0%}}
48
  @keyframes auroraPulse{0%,100%{opacity:0.6}50%{opacity:1}}
49
 
50
- /* ENHANCED: Sophisticated Cursor System */
51
  .cursor{position:fixed;width:20px;height:20px;border-radius:50%;
52
  background:radial-gradient(circle,rgba(255,107,107,0.9) 0%,rgba(78,205,196,0.4) 50%,transparent 100%);
53
  pointer-events:none;z-index:999999;mix-blend-mode:screen;
54
- transition:all 0.12s cubic-bezier(0.4,0,0.2,1);transform:translateZ(0);
55
  left:0;top:0;will-change:transform;
56
  box-shadow:0 0 20px rgba(255,107,107,0.6), 0 0 40px rgba(255,107,107,0.3)}
 
 
 
 
 
 
 
57
  .cursor.hover{transform:scale(1.8) !important;
58
  background:radial-gradient(circle,rgba(255,107,107,1) 0%,rgba(78,205,196,0.6) 40%,rgba(157,78,221,0.3) 100%);
59
  box-shadow:0 0 30px rgba(255,107,107,0.8), 0 0 60px rgba(255,107,107,0.4)}
60
  .cursor-trail{position:fixed;width:4px;height:4px;border-radius:50%;
61
  background:rgba(255,107,107,0.8);pointer-events:none;z-index:999998;
62
- animation:enhancedTrailFade 0.8s cubic-bezier(0.4,0,0.2,1) forwards}
63
- @keyframes enhancedTrailFade{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.3)}}
64
 
65
- /* ===== NEW: OPTIMIZATION MODE SYSTEM ===== */
66
-
67
- /* Performance Mode Toggle Button */
68
- .performance-toggle{position:fixed;top:20px;right:80px;z-index:10000;
69
  display:flex;align-items:center;gap:10px;padding:10px 16px;
70
- background:rgba(0,0,0,0.85);backdrop-filter:blur(25px);
71
  border-radius:25px;border:1px solid rgba(255,255,255,0.2);
72
  box-shadow:var(--shadow-medium);cursor:pointer;
73
  transition:all 0.4s cubic-bezier(0.4,0,0.2,1);font-size:12px;font-weight:500;
@@ -77,11 +85,11 @@
77
  .performance-toggle .mode-icon{font-size:16px;transition:all 0.3s ease}
78
  .performance-toggle .mode-text{font-family:'Inter',sans-serif;letter-spacing:0.3px}
79
 
80
- /* Performance Settings Panel */
81
  .performance-panel{position:fixed;top:70px;right:20px;z-index:9999;
82
- background:rgba(0,0,0,0.95);backdrop-filter:blur(30px);
83
  border-radius:20px;padding:25px;border:1px solid rgba(255,255,255,0.15);
84
- box-shadow:var(--shadow-strong);min-width:280px;
85
  opacity:0;transform:translateY(-20px) scale(0.95);
86
  transition:all 0.4s cubic-bezier(0.4,0,0.2,1);pointer-events:none}
87
  .performance-panel.visible{opacity:1;transform:translateY(0) scale(1);pointer-events:all}
@@ -89,12 +97,13 @@
89
  .performance-panel h3{color:var(--gold);margin:0 0 20px;font-size:18px;
90
  font-weight:700;text-align:center;font-family:'Playfair Display',serif}
91
 
92
- /* Mode Selection Cards */
93
- .mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}
94
  .mode-card{padding:12px;border-radius:12px;cursor:pointer;
95
  border:2px solid rgba(255,255,255,0.1);
96
  background:rgba(255,255,255,0.05);
97
- transition:all 0.3s cubic-bezier(0.4,0,0.2,1);text-align:center}
 
98
  .mode-card:hover{transform:translateY(-2px);border-color:rgba(255,107,107,0.4)}
99
  .mode-card.active{border-color:var(--neon-primary);background:rgba(255,107,107,0.15);
100
  box-shadow:0 0 20px rgba(255,107,107,0.3)}
@@ -102,117 +111,134 @@
102
  .mode-card .mode-name{font-size:13px;font-weight:600;margin-bottom:4px}
103
  .mode-card .mode-desc{font-size:10px;opacity:0.7;line-height:1.3}
104
 
 
 
 
 
 
 
 
 
 
 
 
105
  /* Performance Metrics */
106
  .perf-metrics{background:rgba(255,255,255,0.05);border-radius:12px;padding:15px;margin-top:15px}
107
  .perf-metrics h4{margin:0 0 10px;font-size:13px;color:var(--neon-secondary)}
108
  .metric-item{display:flex;justify-content:space-between;margin:8px 0;font-size:11px}
109
  .metric-value{color:var(--gold);font-weight:600}
110
 
111
- /* Mobile Performance Interface */
112
- .mobile-perf-toggle{position:fixed;bottom:90px;right:15px;z-index:45;
113
  width:48px;height:48px;border-radius:50%;
114
- background:rgba(0,0,0,0.9);backdrop-filter:blur(20px);
115
- border:2px solid rgba(255,255,255,0.3);display:flex;align-items:center;justify-content:center;
116
  cursor:pointer;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);
117
  box-shadow:var(--shadow-medium)}
118
  .mobile-perf-toggle:hover{transform:scale(1.1);border-color:rgba(255,107,107,0.6)}
119
  .mobile-perf-toggle .perf-icon{font-size:20px;transition:all 0.3s ease}
120
 
121
- /* Mobile Performance Panel */
122
  .mobile-perf-panel{position:fixed;bottom:0;left:0;right:0;z-index:60;
123
- background:rgba(0,0,0,0.95);backdrop-filter:blur(30px);
124
  border-top:1px solid rgba(255,107,107,0.4);
125
  border-radius:25px 25px 0 0;padding:20px;
126
  transform:translateY(100%);transition:transform 0.5s cubic-bezier(0.4,0,0.2,1);
127
  box-shadow:0 -10px 40px rgba(0,0,0,0.5)}
128
  .mobile-perf-panel.visible{transform:translateY(0)}
129
  .mobile-perf-panel h3{color:var(--gold);margin:0 0 15px;font-size:16px;text-align:center}
130
- .mobile-perf-panel .mode-grid{grid-template-columns:repeat(4,1fr);gap:8px}
131
- .mobile-perf-panel .mode-card{padding:8px 4px}
 
132
  .mobile-perf-panel .mode-emoji{font-size:20px;margin-bottom:4px}
133
  .mobile-perf-panel .mode-name{font-size:10px}
134
  .mobile-perf-panel .mode-desc{font-size:8px}
135
 
136
- /* Performance Mode Classes */
137
- .ultra-mode{--animation-speed:1;--particle-count:15;--effect-intensity:1}
138
- .high-mode{--animation-speed:0.8;--particle-count:10;--effect-intensity:0.8}
139
- .balanced-mode{--animation-speed:0.6;--particle-count:6;--effect-intensity:0.6}
140
- .performance-mode{--animation-speed:0.3;--particle-count:3;--effect-intensity:0.3}
 
141
 
142
- /* Dynamic Performance Adjustments */
143
  .performance-mode .aurora{opacity:0.3;animation-duration:30s}
144
  .performance-mode .music-notes{display:none}
145
  .performance-mode .corner-accent{display:none}
146
  .performance-mode .cursor-trail{display:none}
147
-
 
 
 
 
 
 
 
 
 
 
 
148
  .balanced-mode .aurora{opacity:0.6;animation-duration:25s}
149
- .balanced-mode .corner-accent{animation-duration:6s}
150
-
151
  .high-mode .aurora{opacity:0.8;animation-duration:22s}
152
- .high-mode .corner-accent{animation-duration:4s}
153
-
154
  .ultra-mode .aurora{opacity:1;animation-duration:20s}
155
- .ultra-mode .corner-accent{animation-duration:3s}
156
-
157
- /* ===== END OPTIMIZATION MODE SYSTEM ===== */
158
 
159
- /* ENHANCED: Floating Elements */
160
  .music-notes{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
161
  .note{position:absolute;font-size:24px;color:rgba(255,215,0,0.3);font-family:'Playfair Display',serif;
162
- animation:enhancedFloatNote 12s linear infinite;transform:translateZ(0);
163
  text-shadow:0 0 10px rgba(255,215,0,0.4)}
164
- @keyframes enhancedFloatNote{
165
- 0%{transform:translateY(110vh) rotate(0deg);opacity:0}
166
  10%{opacity:0.6}90%{opacity:0.6}
167
- 100%{transform:translateY(-10vh) rotate(360deg);opacity:0}
168
  }
169
 
170
- /* ENHANCED: Header with Elegant Typography */
171
  header{text-align:center;padding:30px 0 20px;transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
172
- position:relative;z-index:3;transform:translateZ(0)}
173
  h1{font-size:clamp(32px,8vw,64px);font-weight:900;margin:0;font-family:'Playfair Display',serif;
174
  background:linear-gradient(135deg,#ff6b6b 0%,#ffd93d 20%,#4ecdc4 40%,#9d4edd 60%,#ff9a9e 80%,#ff6b6b 100%);
175
  background-size:400% 400%;-webkit-background-clip:text;background-clip:text;color:transparent;
176
- animation:enhancedRainbow 8s ease-in-out infinite;
177
  filter:drop-shadow(0 0 20px rgba(255,107,107,0.5));
178
- transform:translateZ(0);will-change:background-position;letter-spacing:-0.02em}
179
- h1:hover{transform:translateZ(0) scale(1.05) rotateX(5deg);
180
  transition:transform 0.6s cubic-bezier(0.34,1.56,0.64,1)}
181
- @keyframes enhancedRainbow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
182
 
183
  .sub{font-size:16px;color:rgba(255,255,255,.9);margin-top:12px;font-weight:300;
184
  text-shadow:0 0 15px rgba(255,255,255,0.3);letter-spacing:0.5px}
185
  .divider{height:6px;width:140px;margin:20px auto;
186
  background:linear-gradient(90deg,#ff6b6b,#ffd93d,#4ecdc4,#9d4edd,#ff9a9e);
187
  background-size:400% 100%;border-radius:999px;opacity:.95;
188
- animation:enhancedFlow 4s ease-in-out infinite;
189
- box-shadow:0 0 20px rgba(255,107,107,0.4), 0 4px 15px rgba(0,0,0,0.2);transform:translateZ(0)}
190
- @keyframes enhancedFlow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
191
 
192
- /* ENHANCED: Video Panel with Glassmorphism */
193
  .panel{position:relative;margin:20px auto 0;max-width:1000px;aspect-ratio:16/9;
194
  background:var(--glass-bg);border-radius:32px;overflow:hidden;
195
  box-shadow:var(--shadow-strong);z-index:2;
196
- transform:translateZ(0);transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
197
  backdrop-filter:blur(20px);border:1px solid var(--glass-border)}
198
- .panel:hover{transform:translateZ(0) scale(1.02) rotateX(2deg) rotateY(1deg);
199
  box-shadow:0 25px 80px rgba(0,0,0,0.5), 0 0 50px rgba(255,107,107,0.2)}
200
 
201
  .panel::before{content:'';position:absolute;inset:-6px;border-radius:38px;
202
  background:conic-gradient(from 0deg,var(--neon-primary) 0%,var(--magic-purple) 25%,var(--cosmic-blue) 50%,var(--aurora-green) 75%,var(--neon-primary) 100%);
203
- z-index:-1;animation:enhancedHoloRotate 12s linear infinite;transform:translateZ(0);
204
  filter:blur(2px);opacity:0.8}
205
  .panel::after{content:'';position:absolute;inset:-12px;border-radius:44px;
206
  background:radial-gradient(ellipse,rgba(255,107,107,0.2) 0%,rgba(78,205,196,0.1) 50%,transparent 100%);
207
- z-index:-2;filter:blur(15px);animation:enhancedHoloGlow 10s ease-in-out infinite;transform:translateZ(0)}
208
- @keyframes enhancedHoloRotate{0%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(1.02)}100%{transform:rotate(360deg) scale(1)}}
209
- @keyframes enhancedHoloGlow{0%,100%{opacity:0.6}50%{opacity:1}}
210
 
211
- /* ENHANCED: Corner Accents with Morphing */
212
  .panel-accents{position:absolute;inset:0;pointer-events:none;z-index:5}
213
  .corner-accent{position:absolute;width:50px;height:50px;border-radius:50%;
214
- animation:enhancedCornerPulse 4s ease-in-out infinite;
215
- filter:blur(1.5px);transform:translateZ(0)}
216
  .corner-accent:nth-child(1){top:-25px;left:-25px;animation-delay:0s;
217
  background:radial-gradient(circle,rgba(255,107,107,0.8) 0%,rgba(255,107,107,0.2) 70%,transparent 100%)}
218
  .corner-accent:nth-child(2){top:-25px;right:-25px;animation-delay:1s;
@@ -221,22 +247,22 @@
221
  background:radial-gradient(circle,rgba(157,78,221,0.8) 0%,rgba(157,78,221,0.2) 70%,transparent 100%)}
222
  .corner-accent:nth-child(4){bottom:-25px;right:-25px;animation-delay:3s;
223
  background:radial-gradient(circle,rgba(255,211,102,0.8) 0%,rgba(255,211,102,0.2) 70%,transparent 100%)}
224
- @keyframes enhancedCornerPulse{
225
  0%,100%{transform:scale(0.8) rotate(0deg);opacity:0.5}
226
  50%{transform:scale(1.4) rotate(180deg);opacity:0.9}
227
  }
228
 
229
  video{width:100%;height:100%;object-fit:cover;background:#000;border-radius:26px;
230
  transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
231
- filter:contrast(1.08) saturate(1.15) brightness(1.05);transform:translateZ(0)}
232
 
233
  .chip{position:absolute;bottom:15px;right:15px;padding:10px 16px;border-radius:16px;
234
- background:rgba(0,0,0,0.85);backdrop-filter:blur(20px);
235
  font:13px/1.4 'Inter',monospace;color:#fff;z-index:6;
236
  border:1px solid rgba(255,107,107,0.4);
237
- box-shadow:var(--shadow-medium);transform:translateZ(0);font-weight:500}
238
 
239
- /* ENHANCED: Unmute Overlay */
240
  .unmute-overlay{position:absolute;top:0;left:0;right:0;bottom:0;
241
  background:rgba(0,0,0,0.8);display:flex;align-items:center;justify-content:center;
242
  z-index:100;backdrop-filter:blur(25px);border-radius:26px}
@@ -251,10 +277,10 @@
251
  box-shadow:0 20px 60px rgba(255,107,107,0.7)}
252
  .unmute-btn:active{transform:translateY(-2px) scale(1.02)}
253
 
254
- /* ENHANCED: Professional Control Panel */
255
  .control-panel{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);
256
  display:flex;align-items:center;gap:16px;padding:16px 28px;
257
- background:rgba(0,0,0,0.9);backdrop-filter:blur(30px);
258
  border-radius:60px;border:1px solid rgba(255,255,255,0.12);
259
  box-shadow:var(--shadow-strong);z-index:10;
260
  opacity:0;transform:translateX(-50%) translateY(30px);
@@ -262,10 +288,10 @@
262
  .panel:hover .control-panel,.control-panel:hover,.control-panel.active{
263
  opacity:1;transform:translateX(-50%) translateY(0)}
264
 
265
- /* ENHANCED: Volume Button */
266
  .mute-btn{width:52px;height:52px;border-radius:50%;border:2px solid rgba(255,255,255,0.25);
267
  background:linear-gradient(135deg,rgba(255,107,107,0.25),rgba(78,205,196,0.25));
268
- backdrop-filter:blur(20px);display:flex;align-items:center;justify-content:center;
269
  cursor:pointer;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);position:relative;overflow:hidden}
270
  .mute-btn::before{content:'';position:absolute;inset:0;border-radius:50%;
271
  background:linear-gradient(45deg,var(--neon-primary),var(--neon-secondary));
@@ -279,7 +305,7 @@
279
  filter:drop-shadow(0 0 12px rgba(255,255,255,0.6))}
280
  .mute-btn.muted .mute-icon{color:#ff6b6b;filter:drop-shadow(0 0 15px rgba(255,107,107,0.9))}
281
 
282
- /* ENHANCED: Volume Slider */
283
  .volume-control{display:flex;align-items:center;gap:12px}
284
  .volume-slider{width:100px;height:6px;background:rgba(255,255,255,0.25);
285
  border-radius:3px;position:relative;cursor:pointer;overflow:hidden}
@@ -293,9 +319,9 @@
293
  transition:all 0.3s cubic-bezier(0.4,0,0.2,1)}
294
  .volume-slider:hover .volume-fill::after{transform:scale(1.2)}
295
 
296
- /* ENHANCED: Control Buttons */
297
  .control-btn{width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,0.2);
298
- background:rgba(255,255,255,0.08);backdrop-filter:blur(15px);
299
  display:flex;align-items:center;justify-content:center;cursor:pointer;
300
  font-size:18px;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);
301
  color:rgba(255,255,255,0.85)}
@@ -306,7 +332,7 @@
306
  .control-btn.active{background:rgba(255,107,107,0.25);border-color:rgba(255,107,107,0.7);
307
  color:#ff6b6b;box-shadow:0 0 25px rgba(255,107,107,0.5)}
308
 
309
- /* ENHANCED: Progress Bar */
310
  .progress-bar{position:absolute;bottom:0;left:0;right:0;height:4px;
311
  background:rgba(255,255,255,0.15);z-index:8}
312
  .progress-fill{height:100%;
@@ -314,10 +340,10 @@
314
  width:0%;transition:width 0.6s cubic-bezier(0.4,0,0.2,1);
315
  box-shadow:0 0 12px rgba(255,107,107,0.6)}
316
 
317
- /* ENHANCED: Quality Indicator */
318
  .quality-indicator{position:absolute;top:20px;left:20px;
319
  padding:8px 16px;border-radius:25px;font-size:12px;font-weight:600;
320
- backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,0.15);z-index:7;
321
  font-family:'Inter',sans-serif}
322
  .quality-hd{background:rgba(76,222,128,0.25);color:#4ade80;border-color:rgba(76,222,128,0.4);
323
  box-shadow:0 0 20px rgba(76,222,128,0.3)}
@@ -326,9 +352,9 @@
326
  .quality-low{background:rgba(239,68,68,0.25);color:#ef4444;border-color:rgba(239,68,68,0.4);
327
  box-shadow:0 0 20px rgba(239,68,68,0.3)}
328
 
329
- /* ENHANCED: Keyboard Shortcuts */
330
  .shortcuts-overlay{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);
331
- background:rgba(0,0,0,0.95);backdrop-filter:blur(30px);
332
  border-radius:28px;padding:40px;border:1px solid rgba(255,255,255,0.15);
333
  z-index:11000;opacity:0;pointer-events:none;
334
  transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
@@ -344,24 +370,24 @@
344
  font:13px/1 'Inter',monospace;color:var(--neon-primary);font-weight:600;
345
  box-shadow:0 2px 8px rgba(0,0,0,0.2)}
346
 
347
- /* ENHANCED: Info Section */
348
  .info{text-align:center;margin-top:25px;padding:0 15px;
349
- transition:all 0.6s cubic-bezier(0.4,0,0.2,1);position:relative;z-index:2;transform:translateZ(0)}
350
  .info h2{font-size:clamp(20px,5vw,32px);margin:0;font-family:'Playfair Display',serif;
351
  background:linear-gradient(135deg,#fff1a8 0%,#ffd166 50%,#ff9a9e 100%);
352
  background-size:300% 300%;-webkit-background-clip:text;background-clip:text;color:transparent;
353
- font-weight:700;animation:enhancedTitleShimmer 6s ease-in-out infinite;
354
- text-shadow:0 0 25px rgba(255,209,102,0.4);transform:translateZ(0)}
355
- @keyframes enhancedTitleShimmer{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
356
  .info p{margin:12px 0 0;color:rgba(255,255,255,.9);font-size:15px;font-weight:300;
357
  text-shadow:0 0 8px rgba(255,255,255,0.2)}
358
 
359
- /* ENHANCED: Schedule Section */
360
  .schedule{max-width:800px;margin:30px auto;
361
- background:var(--glass-bg);backdrop-filter:blur(25px);
362
  border-radius:28px;padding:30px;transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
363
  position:relative;z-index:2;border:1px solid var(--glass-border);
364
- box-shadow:var(--shadow-medium);transform:translateZ(0)}
365
  .schedule:hover{transform:translateY(-5px);box-shadow:var(--shadow-strong)}
366
 
367
  .schedule h3{margin:0 0 20px;font-size:22px;color:var(--gold);text-align:center;
@@ -369,10 +395,10 @@
369
 
370
  .row{display:flex;gap:20px;align-items:flex-start;padding:16px 20px;border-radius:16px;
371
  font-size:16px;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);position:relative;overflow:hidden;
372
- cursor:pointer;transform:translateZ(0);margin:8px 0}
373
  .row::before{content:'';position:absolute;left:0;top:0;bottom:0;width:0;
374
  background:linear-gradient(90deg,rgba(255,107,107,0.15),rgba(78,205,196,0.15));
375
- transition:all 0.4s cubic-bezier(0.4,0,0.2,1);transform:translateZ(0)}
376
  .row:hover::before{width:100%}
377
  .row:hover{transform:translateX(8px) scale(1.02);
378
  background:rgba(255,255,255,0.05);box-shadow:var(--shadow-soft)}
@@ -385,96 +411,96 @@
385
  border-left:5px solid #ff6b6b;box-shadow:var(--shadow-medium);
386
  transform:translateX(10px) scale(1.03)}
387
  .row.active::after{content:'✨';position:absolute;right:20px;top:50%;transform:translateY(-50%);
388
- font-size:18px;animation:enhancedSparkle 2s ease-in-out infinite}
389
- @keyframes enhancedSparkle{0%,100%{opacity:0.7;transform:translateY(-50%) scale(1)}50%{opacity:1;transform:translateY(-50%) scale(1.2)}}
390
 
391
  footer{text-align:center;color:rgba(255,255,255,.8);font-size:14px;padding:30px;
392
  position:relative;z-index:2;text-shadow:0 0 8px rgba(255,255,255,0.2);font-weight:300}
393
 
394
- /* ENHANCED: Badges */
395
- .live-badge{position:fixed;top:20px;right:350px;z-index:9999;display:inline-flex;align-items:center;gap:10px;
396
  padding:12px 20px;border-radius:30px;
397
- background:rgba(0,0,0,0.85);backdrop-filter:blur(25px);border:1px solid rgba(255,107,107,.5);
398
  color:#ff6b6b;font-weight:600;font-size:15px;
399
  box-shadow:var(--shadow-medium);
400
- animation:enhancedLivePulse 3s ease-in-out infinite;transform:translateZ(0)}
401
- @keyframes enhancedLivePulse{0%,100%{box-shadow:var(--shadow-medium)}50%{box-shadow:0 8px 40px rgba(255,107,107,0.6)}}
402
 
403
  .dot{width:10px;height:10px;border-radius:50%;background:#ff3b3b;
404
  box-shadow:0 0 15px rgba(255,59,59,.9);
405
- animation:enhancedDotPulse 2s ease-in-out infinite;transform:translateZ(0)}
406
- @keyframes enhancedDotPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.3)}}
407
 
408
- .reactions-badge{position:fixed;top:20px;left:20px;z-index:9999;padding:12px 20px;border-radius:30px;
409
- background:rgba(0,0,0,0.85);backdrop-filter:blur(25px);border:1px solid rgba(78,205,196,.5);
410
  color:#4ecdc4;font-weight:600;font-size:15px;display:inline-flex;gap:12px;align-items:center;
411
- box-shadow:var(--shadow-medium);transform:translateZ(0)}
412
 
413
- /* ENHANCED: Emoji Panel */
414
  .emoji-panel{position:absolute;right:20px;bottom:110px;z-index:6;display:flex;flex-direction:column;gap:18px}
415
  .emoji-btn{width:56px;height:56px;border-radius:50%;border:2px solid rgba(255,255,255,.35);
416
- background:rgba(0,0,0,.7);backdrop-filter:blur(20px);display:flex;align-items:center;justify-content:center;
417
  font-size:26px;cursor:pointer;transition:all 0.3s cubic-bezier(0.4,0,0.2,1);
418
- box-shadow:var(--shadow-soft);transform:translateZ(0)}
419
  .emoji-btn:hover{transform:scale(1.15) rotateZ(10deg);
420
  box-shadow:var(--shadow-medium);border-color:rgba(255,107,107,0.6)}
421
  .emoji-btn:active{transform:scale(1.05) rotateZ(5deg)}
422
 
423
  .emoji-count{position:absolute;right:76px;min-width:70px;height:36px;padding:0 16px;border-radius:18px;
424
  display:flex;align-items:center;justify-content:center;
425
- background:rgba(0,0,0,.8);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.25);
426
  font:13px/1.4 'Inter',monospace;color:#fff;font-weight:500;
427
- box-shadow:var(--shadow-soft);transform:translateZ(0)}
428
 
429
- /* ENHANCED: Particles */
430
  .particle{position:absolute;pointer-events:none;z-index:8;font-size:26px;
431
- animation:enhancedFloatUp 2s cubic-bezier(0.4,0,0.2,1) forwards;transform:translateZ(0)}
432
- @keyframes enhancedFloatUp{
433
- 0%{transform:translateY(0) scale(0.8) rotate(0deg);opacity:0}
434
  20%{opacity:1}
435
- 100%{transform:translateY(-200px) scale(1.5) rotate(360deg);opacity:0}
436
  }
437
 
438
  .burst{position:absolute;pointer-events:none;z-index:8;
439
- animation:enhancedBurst 1s cubic-bezier(0.4,0,0.2,1) forwards;transform:translateZ(0)}
440
- @keyframes enhancedBurst{
441
  0%{transform:scale(0.4) rotate(0deg);opacity:0}
442
  60%{transform:scale(1.2) rotate(180deg);opacity:1}
443
  100%{transform:scale(1.6) rotate(360deg);opacity:0}
444
  }
445
 
446
- /* ENHANCED: Bubbles */
447
  #bubbles{position:fixed;inset:0;overflow:hidden;z-index:1;pointer-events:none}
448
  .bubble{position:absolute;bottom:-100px;border-radius:50%;
449
  background:linear-gradient(45deg,rgba(255,255,255,.12),rgba(255,107,107,.08));
450
- animation:enhancedRise linear infinite;
451
- box-shadow:inset 0 0 20px rgba(255,255,255,0.15);transform:translateZ(0)}
452
- @keyframes enhancedRise{
453
- 0%{transform:translateY(0) scale(1) rotate(0deg);opacity:.5}
454
  50%{opacity:.8}
455
- 100%{transform:translateY(-120vh) scale(1.3) rotate(360deg);opacity:0}
456
  }
457
 
458
- /* ENHANCED: Welcome Text */
459
  .welcome-neon{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);
460
  z-index:10000;font-size:clamp(36px,9vw,72px);font-weight:900;font-family:'Playfair Display',serif;
461
  background:linear-gradient(45deg,#ff6b6b,#ffd93d,#6bcf7f,#4d96ff,#9c88ff,#ff6b6b);
462
  background-size:500% 500%;-webkit-background-clip:text;background-clip:text;color:transparent;
463
- animation:enhancedNeonFlow 4s ease-in-out, enhancedFadeOut 5s ease-in-out forwards;
464
  text-shadow:0 0 40px rgba(255,107,107,0.8);pointer-events:none;opacity:1;
465
  filter:drop-shadow(0 0 30px rgba(255,107,107,0.5));transform-origin:center}
466
- @keyframes enhancedNeonFlow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
467
- @keyframes enhancedFadeOut{
468
  0%{opacity:1;transform:translate(-50%, -50%) scale(1)}
469
  80%{opacity:1;transform:translate(-50%, -50%) scale(1.08)}
470
  100%{opacity:0;transform:translate(-50%, -50%) scale(0.85)}
471
  }
472
 
473
- /* ENHANCED: Audio Visualizer */
474
  .audio-visualizer{position:absolute;bottom:30px;left:30px;display:flex;gap:4px;z-index:6}
475
  .audio-bar{width:5px;border-radius:3px;
476
  background:linear-gradient(180deg,#ff6b6b 0%,#4ecdc4 50%,#9d4edd 100%);
477
- animation:enhancedAudioVisualize 1.2s ease-in-out infinite;transform:translateZ(0);
478
  box-shadow:0 0 10px rgba(255,107,107,0.4)}
479
  .audio-bar:nth-child(1){height:25px;animation-delay:0s}
480
  .audio-bar:nth-child(2){height:35px;animation-delay:0.1s}
@@ -482,16 +508,19 @@
482
  .audio-bar:nth-child(4){height:55px;animation-delay:0.3s}
483
  .audio-bar:nth-child(5){height:45px;animation-delay:0.4s}
484
  .audio-bar:nth-child(6){height:35px;animation-delay:0.5s}
485
- @keyframes enhancedAudioVisualize{0%,100%{transform:scaleY(0.4)}50%{transform:scaleY(1.3)}}
486
 
487
- /* ENHANCED MOBILE RESPONSIVE DESIGN */
488
  @media (max-width:768px) and (orientation:portrait){
489
  body{cursor:auto}
490
  .cursor,.cursor-trail{display:none !important}
491
-
492
  /* Hide desktop performance toggle on mobile */
493
  .performance-toggle,.performance-panel{display:none !important}
494
 
 
 
 
495
  header{padding:20px 0 0;transform:translateY(-100%);opacity:0}
496
  header.visible{transform:translateY(0);opacity:1}
497
  .divider{display:none}
@@ -503,6 +532,7 @@
503
  .panel:hover{transform:none}
504
  video{border-radius:0}
505
 
 
506
  .control-panel{
507
  position:fixed;
508
  bottom:30px;
@@ -512,7 +542,7 @@
512
  padding:8px 16px;
513
  opacity:1 !important;
514
  background:rgba(0,0,0,0.95);
515
- backdrop-filter:blur(30px);
516
  border:1px solid rgba(255,107,107,0.4);
517
  z-index:50;
518
  box-shadow:var(--shadow-strong);
@@ -522,6 +552,7 @@
522
  .volume-slider{width:50px;height:4px}
523
  .control-btn{width:32px;height:32px;font-size:12px}
524
 
 
525
  .emoji-panel{
526
  position:fixed;
527
  right:15px;
@@ -533,21 +564,20 @@
533
  .emoji-btn{width:48px;height:48px;font-size:22px;border:1.5px solid rgba(255,255,255,.4)}
534
  .emoji-count{right:60px;min-width:50px;height:28px;font-size:11px}
535
 
536
- .live-badge{top:15px;right:15px;font-size:12px;padding:8px 12px;z-index:55}
537
- .reactions-badge{top:15px;left:15px;font-size:12px;padding:8px 12px;z-index:55}
 
 
538
  .chip{position:fixed;bottom:85px;right:15px;font-size:11px;padding:6px 10px;z-index:40}
539
- .audio-visualizer{position:fixed;bottom:85px;left:15px;z-index:40}
540
  .quality-indicator{top:60px;left:15px;font-size:10px;padding:4px 8px;z-index:40}
541
 
542
- /* Show mobile performance toggle */
543
- .mobile-perf-toggle{display:flex}
544
-
545
  .info,.schedule{position:relative;margin:0;border-radius:20px 20px 0 0;transform:translateY(-100%);opacity:0}
546
  .info.visible,.schedule.visible{transform:translateY(0);opacity:1}
547
 
548
  .bottom-sheet{
549
  position:fixed;left:0;right:0;bottom:0;z-index:35;
550
- background:rgba(0,0,0,.95);backdrop-filter:blur(30px);
551
  border-top:1px solid rgba(255,107,107,.5);
552
  max-height:45vh;overflow:auto;padding:15px;
553
  transform:translateY(100%);transition:transform 0.5s cubic-bezier(0.4,0,0.2,1);
@@ -556,10 +586,10 @@
556
  .bottom-sheet.visible{transform:translateY(0)}
557
 
558
  .auto-hide-indicator{
559
- position:fixed;bottom:100px;left:50%;transform:translateX(-50%);
560
  background:rgba(0,0,0,.9);color:rgba(255,255,255,.9);
561
  padding:8px 20px;border-radius:20px;font-size:12px;z-index:30;
562
- opacity:0;transition:opacity 0.4s ease;backdrop-filter:blur(20px);
563
  border:1px solid rgba(255,107,107,0.4);box-shadow:var(--shadow-soft);
564
  }
565
  .auto-hide-indicator.visible{opacity:1}
@@ -577,7 +607,6 @@
577
  .panel{max-width:95%;margin:15px auto 0}
578
  .emoji-panel{right:25px;bottom:120px;gap:14px}
579
  .control-panel{bottom:25px;gap:12px;padding:12px 22px}
580
- .live-badge{right:320px}
581
  }
582
 
583
  /* Enhanced Large Desktop Support */
@@ -588,10 +617,9 @@
588
  .control-panel{gap:18px;padding:18px 32px}
589
  .mute-btn{width:56px;height:56px}
590
  .volume-slider{width:120px}
591
- .live-badge{right:400px}
592
  }
593
 
594
- /* Performance optimizations */
595
  .low-performance *{animation-duration:4s !important}
596
  .low-performance .aurora{opacity:0.4}
597
  .low-performance .music-notes{display:none}
@@ -609,15 +637,15 @@
609
  <div class="cursor" id="cursor"></div>
610
  <div class="music-notes" id="music-notes"></div>
611
 
612
- <!-- NEW: Desktop Performance Toggle -->
613
  <div class="performance-toggle" id="performance-toggle">
614
  <span class="mode-icon">⚙️</span>
615
  <span class="mode-text" id="mode-text">Balanced</span>
616
  </div>
617
 
618
- <!-- NEW: Desktop Performance Panel -->
619
  <div class="performance-panel" id="performance-panel">
620
- <h3>🎨 Visual Quality</h3>
621
  <div class="mode-grid">
622
  <div class="mode-card" data-mode="ultra">
623
  <span class="mode-emoji">🌟</span>
@@ -639,6 +667,11 @@
639
  <div class="mode-name">Performance</div>
640
  <div class="mode-desc">Maximum speed & efficiency</div>
641
  </div>
 
 
 
 
 
642
  </div>
643
  <div class="perf-metrics">
644
  <h4>📊 Current Status</h4>
@@ -652,29 +685,29 @@
652
  </div>
653
  <div class="metric-item">
654
  <span>Particles:</span>
655
- <span class="metric-value" id="particles-count">6 Active</span>
656
  </div>
657
  </div>
658
  </div>
659
 
660
- <!-- NEW: Mobile Performance Toggle -->
661
  <div class="mobile-perf-toggle" id="mobile-perf-toggle">
662
  <span class="perf-icon">⚙️</span>
663
  </div>
664
 
665
- <!-- NEW: Mobile Performance Panel -->
666
  <div class="mobile-perf-panel" id="mobile-perf-panel">
667
  <h3>🎨 Visual Quality</h3>
668
  <div class="mode-grid">
669
  <div class="mode-card" data-mode="ultra">
670
  <span class="mode-emoji">🌟</span>
671
  <div class="mode-name">Ultra</div>
672
- <div class="mode-desc">Max effects</div>
673
  </div>
674
  <div class="mode-card" data-mode="high">
675
  <span class="mode-emoji">✨</span>
676
  <div class="mode-name">High</div>
677
- <div class="mode-desc">Rich visuals</div>
678
  </div>
679
  <div class="mode-card active" data-mode="balanced">
680
  <span class="mode-emoji">⚖️</span>
@@ -684,7 +717,12 @@
684
  <div class="mode-card" data-mode="performance">
685
  <span class="mode-emoji">🚀</span>
686
  <div class="mode-name">Fast</div>
687
- <div class="mode-desc">Max speed</div>
 
 
 
 
 
688
  </div>
689
  </div>
690
  </div>
@@ -724,6 +762,10 @@
724
  <span>Performance Toggle</span>
725
  <span class="shortcut-key">Q</span>
726
  </div>
 
 
 
 
727
  <div class="shortcut-item">
728
  <span>Show Shortcuts</span>
729
  <span class="shortcut-key">?</span>
@@ -740,7 +782,23 @@
740
 
741
  <main>
742
  <section class="panel" id="panel">
743
- <canvas id="color-canvas"></canvas>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
744
  <div class="panel-accents">
745
  <div class="corner-accent"></div>
746
  <div class="corner-accent"></div>
@@ -748,166 +806,173 @@
748
  <div class="corner-accent"></div>
749
  </div>
750
 
751
- <!-- Enhanced Progress Bar -->
752
- <div class="progress-bar">
753
- <div class="progress-fill" id="progress-fill"></div>
754
- </div>
755
-
756
- <!-- Enhanced Quality Indicator -->
757
- <div class="quality-indicator quality-hd" id="quality-indicator">HD</div>
758
-
759
- <!-- Enhanced Unmute Overlay -->
760
- <div class="unmute-overlay" id="unmute-overlay">
761
- <button class="unmute-btn" id="unmute-btn">
762
- <span>🔊</span>
763
- <span>Click to Enable Sound</span>
764
- </button>
765
  </div>
766
 
767
- <video id="player" autoplay muted playsinline loop crossorigin="anonymous"></video>
768
- <div id="chip" class="chip"></div>
769
-
770
- <!-- Enhanced Professional Control Panel -->
771
  <div class="control-panel" id="control-panel">
772
- <div class="mute-btn" id="mute-btn" title="Mute/Unmute (M)">
773
- <span class="mute-icon" id="mute-icon">🔇</span>
774
- </div>
 
775
  <div class="volume-control">
776
- <div class="volume-slider" id="volume-slider" title="Volume">
777
  <div class="volume-fill" id="volume-fill"></div>
778
  </div>
779
  </div>
780
- <div class="control-btn" id="theater-btn" title="Theater Mode (T)">🎭</div>
781
- <div class="control-btn" id="fullscreen-btn" title="Fullscreen (F)">⛶</div>
782
- <div class="control-btn" id="pip-btn" title="Picture-in-Picture (P)">📱</div>
783
- <div class="control-btn" id="shortcuts-btn" title="Keyboard Shortcuts (?)">⌨️</div>
 
 
 
 
 
 
 
 
 
 
 
 
784
  </div>
785
 
786
- <!-- Enhanced Audio Visualizer -->
787
- <div class="audio-visualizer" id="audio-visualizer">
788
- <div class="audio-bar"></div>
789
- <div class="audio-bar"></div>
790
- <div class="audio-bar"></div>
791
- <div class="audio-bar"></div>
792
- <div class="audio-bar"></div>
793
- <div class="audio-bar"></div>
794
  </div>
795
 
796
- <!-- Enhanced Emoji Panel -->
797
  <div class="emoji-panel" id="emoji-panel">
798
- <div class="emoji-wrap">
799
- <button class="emoji-btn" data-type="heart" aria-label="Heart">❤️</button>
800
  <div class="emoji-count" id="count-heart">0</div>
801
  </div>
802
- <div class="emoji-wrap">
803
- <button class="emoji-btn" data-type="fire" aria-label="Fire">🔥</button>
 
804
  <div class="emoji-count" id="count-fire">0</div>
805
  </div>
806
- <div class="emoji-wrap">
807
- <button class="emoji-btn" data-type="dancer" aria-label="Dancer">💃</button>
 
808
  <div class="emoji-count" id="count-dancer">0</div>
809
  </div>
810
- <div class="emoji-wrap">
811
- <button class="emoji-btn" data-type="spark" aria-label="Sparkles">✨</button>
 
812
  <div class="emoji-count" id="count-spark">0</div>
813
  </div>
814
  </div>
815
  </section>
 
816
 
817
- <section class="info" id="main-info">
818
- <h2 id="vtitle">—</h2>
819
- <p id="vmeta">—</p>
820
- </section>
821
-
822
- <section class="schedule" id="main-schedule">
823
- <h3 id="schedule-title">✨ Global Schedule (UTC) — Today</h3>
824
- <div id="rows"></div>
 
 
 
 
 
 
 
825
  </section>
826
 
827
- <section class="bottom-sheet" id="bottom-sheet">
828
- <div class="info">
829
- <h2 id="vtitle2">—</h2>
830
- <p id="vmeta2">—</p>
831
- </div>
832
- <div class="schedule" style="margin-top:15px;">
833
- <h3>Schedule</h3>
834
- <div id="rows2"></div>
835
- </div>
836
  </section>
 
837
 
838
- <div class="auto-hide-indicator" id="auto-hide-indicator">✨ Double-tap to show schedule ✨</div>
839
-
840
- </main>
841
 
842
- <footer>✨ Pre-recorded performances looped 24/7 (Global UTC) ✨</footer>
 
 
843
 
844
  <script>
845
- /* ============= ULTIMATE OPTIMIZED STREAMING INTERFACE ============= */
846
- const USE_UTC = true;
847
- let currentDominantColor = '#ff6b6b';
848
- let audioContext = null;
849
- let analyser = null;
850
- let mouseX = 0, mouseY = 0;
851
- let performanceMode = false;
852
- let maxFloatingElements = 10;
853
  let frameCount = 0;
854
- let isTheaterMode = false;
855
- let isControlPanelVisible = false;
856
-
857
- // NEW: Performance Mode State
858
  let currentPerformanceMode = 'balanced';
859
- let performanceModes = {
860
- ultra: { particles: 15, animationSpeed: 1, effectIntensity: 1, name: 'Ultra', icon: '🌟' },
861
- high: { particles: 10, animationSpeed: 0.8, effectIntensity: 0.8, name: 'High', icon: '✨' },
862
- balanced: { particles: 6, animationSpeed: 0.6, effectIntensity: 0.6, name: 'Balanced', icon: '⚖️' },
863
- performance: { particles: 3, animationSpeed: 0.3, effectIntensity: 0.3, name: 'Performance', icon: '🚀' }
864
- };
865
-
866
- // State
867
- let isMuted = true;
868
  let currentVolume = 0.5;
 
 
869
  let isFullscreen = false;
870
  let isPictureInPicture = false;
871
- let audioEnabled = false;
 
872
 
873
- /* Enhanced Performance Detection with Real-time Monitoring */
874
  const performanceCheck = {
875
- fps: 60,
876
- lastFrameTime: performance.now(),
877
  frameCount: 0,
878
- fpsHistory: [],
879
  avgFps: 60,
880
-
881
  update() {
882
- const currentTime = performance.now();
883
  this.frameCount++;
 
 
 
 
 
884
 
885
- if (this.frameCount % 30 === 0) {
886
- const deltaTime = currentTime - this.lastFrameTime;
887
- this.fps = Math.round(30000 / deltaTime);
888
-
889
- this.fpsHistory.push(this.fps);
890
- if (this.fpsHistory.length > 10) this.fpsHistory.shift();
891
-
892
- this.avgFps = Math.round(this.fpsHistory.reduce((a, b) => a + b, 0) / this.fpsHistory.length);
893
-
894
- // Update performance metrics display
895
- updatePerformanceMetrics();
896
-
897
- this.lastFrameTime = currentTime;
898
  }
899
  }
900
  };
901
 
902
- /* NEW: Performance Mode System */
 
 
 
 
 
 
 
 
 
903
  function initPerformanceModeSystem() {
904
  const desktopToggle = document.getElementById('performance-toggle');
905
  const desktopPanel = document.getElementById('performance-panel');
906
  const mobileToggle = document.getElementById('mobile-perf-toggle');
907
  const mobilePanel = document.getElementById('mobile-perf-panel');
908
 
909
- // Load saved preference
910
- const savedMode = localStorage.getItem('performanceMode') || 'balanced';
 
 
 
 
 
 
911
  setPerformanceMode(savedMode);
912
 
913
  // Desktop toggle
@@ -930,7 +995,7 @@ function initPerformanceModeSystem() {
930
  if (modeCard) {
931
  const mode = modeCard.getAttribute('data-mode');
932
  setPerformanceMode(mode);
933
-
934
  // Hide panels after selection
935
  desktopPanel?.classList.remove('visible');
936
  mobilePanel?.classList.remove('visible');
@@ -947,13 +1012,15 @@ function initPerformanceModeSystem() {
947
  }
948
  });
949
 
950
- // Keyboard shortcut
951
  document.addEventListener('keydown', function(e) {
952
- if (e.key.toLowerCase() === 'q') {
953
  const modes = Object.keys(performanceModes);
954
  const currentIndex = modes.indexOf(currentPerformanceMode);
955
  const nextIndex = (currentIndex + 1) % modes.length;
956
  setPerformanceMode(modes[nextIndex]);
 
 
957
  }
958
  });
959
  }
@@ -963,18 +1030,18 @@ function setPerformanceMode(mode) {
963
 
964
  currentPerformanceMode = mode;
965
  const config = performanceModes[mode];
966
-
967
  // Update body class
968
  document.body.className = document.body.className.replace(/\b\w+-mode\b/g, '');
969
  document.body.classList.add(mode + '-mode');
970
-
971
  // Update maxFloatingElements
972
  maxFloatingElements = config.particles;
973
-
974
  // Update UI indicators
975
  const modeText = document.getElementById('mode-text');
976
  if (modeText) modeText.textContent = config.name;
977
-
978
  // Update active cards
979
  document.querySelectorAll('.mode-card').forEach(card => {
980
  card.classList.remove('active');
@@ -989,24 +1056,22 @@ function setPerformanceMode(mode) {
989
 
990
  // Save preference
991
  localStorage.setItem('performanceMode', mode);
992
-
993
  // Apply performance adjustments
994
  applyPerformanceSettings();
995
-
996
  console.log(`Performance mode set to: ${config.name}`);
997
  }
998
 
999
  function applyPerformanceSettings() {
1000
  const config = performanceModes[currentPerformanceMode];
1001
-
1002
  // Adjust animation speeds
1003
- const animatableElements = document.querySelectorAll('.aurora, .corner-accent, .note, .bubble');
1004
- animatableElements.forEach(el => {
1005
- const currentDuration = parseFloat(getComputedStyle(el).animationDuration) || 1;
1006
- const newDuration = currentDuration / config.animationSpeed;
1007
- el.style.animationDuration = newDuration + 's';
1008
- });
1009
-
1010
  // Update performance metrics display
1011
  updatePerformanceMetrics();
1012
  }
@@ -1015,21 +1080,23 @@ function updatePerformanceMetrics() {
1015
  const fpsDisplay = document.getElementById('fps-display');
1016
  const effectsLevel = document.getElementById('effects-level');
1017
  const particlesCount = document.getElementById('particles-count');
1018
-
1019
  if (fpsDisplay) fpsDisplay.textContent = performanceCheck.avgFps + ' FPS';
1020
  if (effectsLevel) {
1021
- const levels = { ultra: 'Maximum', high: 'High', balanced: 'Medium', performance: 'Low' };
1022
  effectsLevel.textContent = levels[currentPerformanceMode];
1023
  }
1024
  if (particlesCount) particlesCount.textContent = maxFloatingElements + ' Active';
1025
  }
1026
 
1027
- /* ENHANCED: Sophisticated Cursor System */
1028
- function initEnhancedCursor(){
 
 
 
1029
  if (isMobileDevice()) return;
1030
-
1031
  const cursor = document.getElementById('cursor');
1032
- let trailCount = 0;
1033
  let isMoving = false;
1034
  let moveTimeout;
1035
 
@@ -1038,15 +1105,15 @@ function initEnhancedCursor(){
1038
  mouseY = e.clientY;
1039
 
1040
  cursor.style.transform = `translate3d(${mouseX - 10}px, ${mouseY - 10}px, 0)`;
1041
-
1042
  isMoving = true;
1043
  clearTimeout(moveTimeout);
1044
-
1045
- // Enhanced trail with performance awareness
1046
  const config = performanceModes[currentPerformanceMode];
1047
- const shouldCreateTrail = Math.random() > (0.88 - (config.effectIntensity * 0.1));
1048
-
1049
- if(shouldCreateTrail && trailCount < Math.floor(5 * config.effectIntensity)) {
1050
  trailCount++;
1051
  const trail = document.createElement('div');
1052
  trail.className = 'cursor-trail';
@@ -1054,34 +1121,30 @@ function initEnhancedCursor(){
1054
  document.body.appendChild(trail);
1055
 
1056
  setTimeout(function() {
1057
- if (trail.parentNode) trail.remove();
1058
- trailCount--;
1059
- }, 800 * config.animationSpeed);
 
 
1060
  }
1061
-
1062
  moveTimeout = setTimeout(() => { isMoving = false; }, 150);
1063
  });
1064
 
1065
- // Enhanced hover effects with smooth transitions
1066
  const interactiveElements = 'button, .control-btn, .emoji-btn, .mute-btn, .row, .shortcut-item, .mode-card, .performance-toggle';
1067
-
1068
  document.addEventListener('mouseenter', function(e) {
1069
  if (e.target.matches(interactiveElements)) {
1070
  cursor.classList.add('hover');
1071
  }
1072
  }, true);
1073
-
1074
  document.addEventListener('mouseleave', function(e) {
1075
  if (e.target.matches(interactiveElements)) {
1076
  cursor.classList.remove('hover');
1077
  }
1078
  }, true);
1079
-
1080
- document.addEventListener('scroll', function() {
1081
- if (isMoving) {
1082
- cursor.style.transform = `translate3d(${mouseX - 10}px, ${mouseY - 10}px, 0)`;
1083
- }
1084
- }, { passive: true });
1085
  }
1086
 
1087
  function isMobileDevice() {
@@ -1089,7 +1152,7 @@ function isMobileDevice() {
1089
  (window.innerWidth <= 768 && 'ontouchstart' in window);
1090
  }
1091
 
1092
- /* Enhanced Audio Enable */
1093
  function initSimpleAudioEnable() {
1094
  const overlay = document.getElementById('unmute-overlay');
1095
  const unmuteBtn = document.getElementById('unmute-btn');
@@ -1108,7 +1171,7 @@ function initSimpleAudioEnable() {
1108
  try {
1109
  if (!audioContext) {
1110
  audioContext = new (window.AudioContext || window.webkitAudioContext)();
1111
- initEnhancedAudioAnalysis();
1112
  }
1113
  } catch (e) {
1114
  console.log('Audio context creation failed, continuing without visualizer');
@@ -1121,7 +1184,7 @@ function initSimpleAudioEnable() {
1121
  }
1122
  }
1123
 
1124
- /* Enhanced Schedules */
1125
  const SCHEDULE_A = [
1126
  { title:"Dance in Front of the Library of Alexandria", url:"https://ik.imagekit.io/plerqlkuh/A%20dance%20in%20front%20of%20the%20Library%20of%20Alexandria.mp4", duration:155, start:0, end:2.667 },
1127
  { title:"✨ Belly dance ✨ - sensual dance", url:"https://ik.imagekit.io/plerqlkuh/%E2%9C%A8%20Belly%20dance%20%E2%9C%A8%20-%20-%20sensual%20dance.mp4", duration:113, start:2.667, end:5.333 },
@@ -1146,6 +1209,8 @@ const SCHEDULE_B = [
1146
  { title:"✨ Belly dance ✨ - secret of the goddess", url:"https://ik.imagekit.io/b3mprpaei/%E2%9C%A8%20Belly%20dance%20%E2%9C%A8%20-%20secret%20of%20the%20goddess.mp4", duration:166, start:19.1, end:21 }
1147
  ];
1148
 
 
 
1149
  /* Utilities */
1150
  function nowHour(){
1151
  const n=new Date();
@@ -1156,7 +1221,7 @@ function utcDayIndex(){ return (new Date()).getUTCDay(); }
1156
  function secFmt(s){return `${Math.floor(s/60)}:${String(s%60).padStart(2,'0')}`;}
1157
  function clamp(n,min,max){return Math.max(min,Math.min(max,n));}
1158
 
1159
- /* Enhanced Control Functions (same as before but with performance awareness) */
1160
  function initMuteControl() {
1161
  const muteBtn = document.getElementById('mute-btn');
1162
  const muteIcon = document.getElementById('mute-icon');
@@ -1179,14 +1244,9 @@ function initMuteControl() {
1179
  muteBtn.classList.remove('muted');
1180
  }
1181
 
1182
- const config = performanceModes[currentPerformanceMode];
1183
- const animationDuration = 300 * config.animationSpeed;
1184
-
1185
- muteBtn.animate([
1186
- {transform: 'scale(1)'},
1187
- {transform: 'scale(1.25)'},
1188
- {transform: 'scale(1)'}
1189
- ], {duration: animationDuration, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)'});
1190
  });
1191
  }
1192
 
@@ -1229,15 +1289,6 @@ function initTheaterMode() {
1229
  isTheaterMode = !isTheaterMode;
1230
  document.body.classList.toggle('theater-mode', isTheaterMode);
1231
  theaterBtn.classList.toggle('active', isTheaterMode);
1232
-
1233
- const config = performanceModes[currentPerformanceMode];
1234
- const animationDuration = 500 * config.animationSpeed;
1235
-
1236
- theaterBtn.animate([
1237
- {transform: 'rotateY(0deg) scale(1)'},
1238
- {transform: 'rotateY(180deg) scale(1.1)'},
1239
- {transform: 'rotateY(0deg) scale(1)'}
1240
- ], {duration: animationDuration, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)'});
1241
  });
1242
  }
1243
 
@@ -1261,7 +1312,7 @@ function initFullscreenControl() {
1261
 
1262
  document.addEventListener('fullscreenchange', function() {
1263
  isFullscreen = !!document.fullscreenElement;
1264
- fullscreenBtn.classList.toggle('active', isFullscreen);
1265
  });
1266
  }
1267
 
@@ -1309,7 +1360,7 @@ function initKeyboardShortcuts() {
1309
  document.addEventListener('keydown', function(e) {
1310
  switch(e.key.toLowerCase()) {
1311
  case 'm':
1312
- document.getElementById('mute-btn').click();
1313
  break;
1314
  case 'f':
1315
  document.getElementById('fullscreen-btn').click();
@@ -1320,9 +1371,6 @@ function initKeyboardShortcuts() {
1320
  case 'p':
1321
  document.getElementById('pip-btn').click();
1322
  break;
1323
- case 'q':
1324
- // Performance mode cycling handled in initPerformanceModeSystem
1325
- break;
1326
  case 'arrowup':
1327
  e.preventDefault();
1328
  if (audioEnabled) {
@@ -1414,9 +1462,11 @@ function initQualityIndicator() {
1414
  });
1415
  }
1416
 
1417
- /* Enhanced Floating Elements with Performance Awareness */
1418
  let activeFloatingElements = 0;
1419
- function createEnhancedFloatingNote(){
 
 
1420
  const config = performanceModes[currentPerformanceMode];
1421
  if(activeFloatingElements >= config.particles) return;
1422
 
@@ -1431,26 +1481,30 @@ function createEnhancedFloatingNote(){
1431
 
1432
  activeFloatingElements++;
1433
  document.getElementById('music-notes').appendChild(note);
 
1434
  setTimeout(function() {
1435
- note.remove();
1436
- activeFloatingElements--;
1437
- }, 14000 / config.animationSpeed);
 
 
1438
  }
1439
 
1440
- function initEnhancedColorSampling(){
1441
  const canvas = document.getElementById('color-canvas');
1442
  const ctx = canvas.getContext('2d');
1443
  const video = document.getElementById('player');
 
1444
 
1445
- function sampleEnhancedColors(){
1446
  if(!video.videoWidth || !video.videoHeight) return;
1447
 
1448
- canvas.width = 40;
1449
- canvas.height = 22;
1450
 
1451
  try{
1452
- ctx.drawImage(video, 0, 0, 40, 22);
1453
- const imageData = ctx.getImageData(10, 6, 20, 10);
1454
  const data = imageData.data;
1455
 
1456
  let r = 0, g = 0, b = 0, count = 0;
@@ -1466,24 +1520,25 @@ function initEnhancedColorSampling(){
1466
  r = Math.floor(r / count);
1467
  g = Math.floor(g / count);
1468
  b = Math.floor(b / count);
1469
-
1470
- updateEnhancedDynamicColors(r, g, b);
1471
  }
1472
  }catch(e){
 
1473
  const time = Date.now() / 2500;
1474
  const r = Math.floor(128 + 127 * Math.sin(time * 0.15));
1475
  const g = Math.floor(128 + 127 * Math.sin(time * 0.25));
1476
  const b = Math.floor(128 + 127 * Math.sin(time * 0.35));
1477
- updateEnhancedDynamicColors(r, g, b);
1478
  }
1479
  }
1480
 
1481
  const config = performanceModes[currentPerformanceMode];
1482
- const interval = 700 / config.animationSpeed;
1483
- setInterval(sampleEnhancedColors, interval);
 
1484
  }
1485
 
1486
- function updateEnhancedDynamicColors(r, g, b){
1487
  const root = document.documentElement;
1488
  const config = performanceModes[currentPerformanceMode];
1489
 
@@ -1496,13 +1551,13 @@ function updateEnhancedDynamicColors(r, g, b){
1496
  const compG = Math.max(0, 255 - g + intensity * 0.5);
1497
  const compB = Math.max(0, 255 - b + intensity * 0.875);
1498
 
1499
- root.style.setProperty('--neon-primary', 'rgb(' + enhancedR + ', ' + enhancedG + ', ' + enhancedB + ')');
1500
- root.style.setProperty('--neon-secondary', 'rgb(' + compR + ', ' + compG + ', ' + compB + ')');
1501
 
1502
- currentDominantColor = 'rgb(' + enhancedR + ', ' + enhancedG + ', ' + enhancedB + ')';
1503
  }
1504
 
1505
- function initEnhancedAudioAnalysis(){
1506
  if (!audioEnabled || !audioContext) return;
1507
 
1508
  const video = document.getElementById('player');
@@ -1518,11 +1573,15 @@ function initEnhancedAudioAnalysis(){
1518
  const bufferLength = analyser.frequencyBinCount;
1519
  const dataArray = new Uint8Array(bufferLength);
1520
 
1521
- function updateEnhancedVisualizer(){
 
 
1522
  const config = performanceModes[currentPerformanceMode];
1523
-
1524
- if(frameCount % Math.max(1, Math.floor(3 / config.animationSpeed)) !== 0) {
1525
- requestAnimationFrame(updateEnhancedVisualizer);
 
 
1526
  return;
1527
  }
1528
 
@@ -1533,21 +1592,22 @@ function initEnhancedAudioAnalysis(){
1533
  const value = dataArray[i] || 0;
1534
  const normalizedValue = value / 255;
1535
  const height = Math.max(8, normalizedValue * 50 * config.effectIntensity);
1536
-
1537
  bar.style.height = height + 'px';
1538
  });
1539
 
1540
- requestAnimationFrame(updateEnhancedVisualizer);
 
1541
  }
1542
 
1543
- updateEnhancedVisualizer();
1544
 
1545
  }catch(e){
 
1546
  const bars = document.querySelectorAll('.audio-bar');
1547
  bars.forEach(function(bar, i) {
1548
  const config = performanceModes[currentPerformanceMode];
1549
- const interval = (120 + Math.random() * 180) / config.animationSpeed;
1550
-
1551
  setInterval(function() {
1552
  const randomHeight = (8 + Math.random() * 40) * config.effectIntensity;
1553
  bar.style.height = randomHeight + 'px';
@@ -1556,13 +1616,14 @@ function initEnhancedAudioAnalysis(){
1556
  }
1557
  }
1558
 
1559
- /* Rest of the JavaScript code continues with the same pattern... */
1560
  function todaySchedule(){
1561
  const d = utcDayIndex();
1562
  if(d===1 || d===2 || d===3) return { which:'A (Mon-Tue-Wed)', list: SCHEDULE_A };
1563
  return { which:'B (Thu-Fri-Sat-Sun)', list: SCHEDULE_B };
1564
  }
1565
 
 
1566
  const $player = document.getElementById('player');
1567
  const $vtitle = document.getElementById('vtitle');
1568
  const $vmeta = document.getElementById('vmeta');
@@ -1604,7 +1665,7 @@ function showSchedule() {
1604
  isScheduleVisible = true;
1605
 
1606
  if (autoHideTimer) clearTimeout(autoHideTimer);
1607
- autoHideTimer = setTimeout(function() { hideSchedule(); }, 6000);
1608
  }
1609
 
1610
  function hideSchedule() {
@@ -1634,7 +1695,7 @@ document.addEventListener('click', function(e) {
1634
  if (!isMobilePortrait()) return;
1635
  if (e.target.closest('.emoji-btn') || e.target.closest('.bottom-sheet') ||
1636
  e.target.closest('header') || e.target.closest('.info') || e.target.closest('.schedule') ||
1637
- e.target.closest('.control-panel') || e.target.closest('.mobile-perf-toggle') ||
1638
  e.target.closest('.mobile-perf-panel')) return;
1639
 
1640
  const currentTime = new Date().getTime();
@@ -1751,13 +1812,17 @@ $player.addEventListener('loadedmetadata', function(){
1751
  }
1752
 
1753
  setTimeout(function() {
1754
- initEnhancedColorSampling();
1755
  }, 1000);
1756
  });
1757
 
1758
- function createEnhancedBubble(){
 
 
 
 
1759
  const config = performanceModes[currentPerformanceMode];
1760
- if(activeFloatingElements >= config.particles) return;
1761
 
1762
  const b = document.createElement('div');
1763
  b.className = 'bubble';
@@ -1768,14 +1833,18 @@ function createEnhancedBubble(){
1768
  b.style.animationDuration = ((25 + Math.random() * 25) / config.animationSpeed) + 's';
1769
  b.style.opacity = 0.5 * config.effectIntensity;
1770
 
1771
- activeFloatingElements++;
1772
  document.getElementById('bubbles').appendChild(b);
 
1773
  setTimeout(function() {
1774
- b.remove();
1775
- activeFloatingElements--;
1776
- }, 50000 / config.animationSpeed);
 
 
1777
  }
1778
 
 
1779
  const $liveCount = document.getElementById('live-count');
1780
  const BUCKETS = [
1781
  {start:0,end:6,min:700,max:2000},
@@ -1814,6 +1883,7 @@ document.addEventListener('visibilitychange', function(){
1814
  initLive();
1815
  liveTimer = setTimeout(tickLive, delay());
1816
 
 
1817
  const EMOJIS = [{key:'heart',sym:'❤️'},{key:'fire',sym:'🔥'},{key:'dancer',sym:'💃'},{key:'spark',sym:'✨'}];
1818
  const STORAGE_PREFIX = 'pro-reactions:';
1819
  function utcDateKey(){ const d=new Date(); return d.getUTCFullYear() + '-' + String(d.getUTCMonth()+1).padStart(2,'0') + '-' + String(d.getUTCDate()).padStart(2,'0'); }
@@ -1856,10 +1926,13 @@ function renderReactions(){
1856
  'Today ❤️' + reactionCounts.heart + ' 🔥' + reactionCounts.fire + ' 💃' + reactionCounts.dancer + ' ✨' + reactionCounts.spark;
1857
  }
1858
 
 
1859
  let activeParticles = 0;
1860
- function spawnEnhancedParticles(type, x, y){
 
 
1861
  const config = performanceModes[currentPerformanceMode];
1862
- if(activeParticles > 20 * config.effectIntensity) return;
1863
 
1864
  const pane = document.getElementById('panel').getBoundingClientRect();
1865
  const burst = document.createElement('div');
@@ -1871,12 +1944,15 @@ function spawnEnhancedParticles(type, x, y){
1871
  burst.style.filter = 'drop-shadow(0 0 15px ' + currentDominantColor + ')';
1872
  document.getElementById('panel').appendChild(burst);
1873
  activeParticles++;
 
1874
  setTimeout(function(){
1875
- burst.remove();
1876
- activeParticles--;
1877
- },1000 / config.animationSpeed);
 
 
1878
 
1879
- const particleCount = Math.floor((performanceMode ? 5 : 10) * config.effectIntensity);
1880
  for(let i=0;i<particleCount;i++){
1881
  const p = document.createElement('div');
1882
  p.className='particle';
@@ -1888,10 +1964,13 @@ function spawnEnhancedParticles(type, x, y){
1888
  p.style.filter = 'drop-shadow(0 0 10px ' + currentDominantColor + ')';
1889
  document.getElementById('panel').appendChild(p);
1890
  activeParticles++;
 
1891
  setTimeout(function(){
1892
- p.remove();
1893
- activeParticles--;
1894
- },2000 / config.animationSpeed);
 
 
1895
  }
1896
  }
1897
 
@@ -1907,16 +1986,11 @@ function setupEmojiClicks(){
1907
  reactionCounts[type] = (reactionCounts[type]||0) + 1;
1908
  saveLocalInc(type);
1909
  renderReactions();
1910
- spawnEnhancedParticles(type, x, y);
1911
-
1912
- const config = performanceModes[currentPerformanceMode];
1913
- const animationDuration = 400 * config.animationSpeed;
1914
-
1915
- btn.animate([
1916
- {transform:'scale(1) rotateZ(0deg)', filter:'brightness(1)'},
1917
- {transform:'scale(1.2) rotateZ(15deg)', filter:'brightness(1.4)'},
1918
- {transform:'scale(1) rotateZ(0deg)', filter:'brightness(1)'}
1919
- ],{duration: animationDuration, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)'});
1920
  });
1921
  }
1922
  loadReactions();
@@ -1935,7 +2009,7 @@ function isMobilePortrait(){
1935
 
1936
  function applyMobileLayout(){
1937
  if(isMobilePortrait()) {
1938
- setTimeout(function() { showSchedule(); }, 800);
1939
  } else {
1940
  $header.classList.add('visible');
1941
  $info.classList.add('visible');
@@ -1948,18 +2022,18 @@ function applyMobileLayout(){
1948
  }
1949
  }
1950
 
1951
- // Initialize everything
1952
  document.addEventListener('DOMContentLoaded', function() {
1953
- // NEW: Initialize performance mode system first
1954
  initPerformanceModeSystem();
1955
-
1956
  initSimpleAudioEnable();
1957
  initWelcomeText();
1958
-
1959
  if (!isMobileDevice()) {
1960
- initEnhancedCursor();
1961
  }
1962
-
1963
  applyMobileLayout();
1964
  window.addEventListener('resize', applyMobileLayout);
1965
 
@@ -1975,25 +2049,44 @@ document.addEventListener('DOMContentLoaded', function() {
1975
 
1976
  schedulePlay();
1977
 
1978
- // Performance-aware intervals
1979
- setInterval(function() {
1980
  const config = performanceModes[currentPerformanceMode];
1981
- if(Math.random() > (1 - config.effectIntensity * 0.7)) createEnhancedFloatingNote();
1982
- }, 5000);
 
 
1983
 
1984
- setInterval(function() {
1985
  const config = performanceModes[currentPerformanceMode];
1986
- if(Math.random() > (1 - config.effectIntensity * 0.8)) createEnhancedBubble();
1987
- }, 1000);
 
 
1988
 
1989
- function enhancedPerformanceMonitor() {
 
1990
  frameCount++;
1991
- performanceCheck.update();
1992
- requestAnimationFrame(enhancedPerformanceMonitor);
 
 
 
 
 
1993
  }
1994
- requestAnimationFrame(enhancedPerformanceMonitor);
 
 
 
 
 
 
 
 
 
1995
  });
1996
 
1997
  </script>
1998
- <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Meneman/bdance" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
1999
  </html>
 
14
  --shadow-strong:0 20px 60px rgba(0,0,0,0.4);
15
  }
16
 
17
+ *{box-sizing:border-box}
18
 
19
+ /* OPTIMIZED: Typography */
20
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Playfair+Display:wght@400;500;600;700;800;900&display=swap');
21
 
22
  body{margin:0;color:#f8f8f8;font-family:'Inter','Segoe UI',system-ui,-apple-system,Roboto,Arial,sans-serif;
23
  background:#0a0a1e;overflow-x:hidden;min-height:100vh;position:relative;
24
+ cursor:none;font-weight:400;letter-spacing:-0.025em;
25
+ transform:translate3d(0,0,0);will-change:auto}
26
 
27
+ /* OPTIMIZED: Multi-Layer Background System */
28
  body::before{content:'';position:fixed;inset:0;z-index:0;
29
  background:
30
  radial-gradient(ellipse 800px 400px at 20% 30%, rgba(157,78,221,0.15) 0%, transparent 50%),
31
  radial-gradient(ellipse 600px 300px at 80% 70%, rgba(67,97,238,0.12) 0%, transparent 50%),
32
  radial-gradient(ellipse 400px 200px at 50% 50%, rgba(255,107,107,0.08) 0%, transparent 50%),
33
  linear-gradient(135deg, var(--bg1) 0%, var(--bg2) 50%, var(--bg3) 100%);
34
+ animation:breathing 15s ease-in-out infinite;transform:translate3d(0,0,0)}
35
+ @keyframes breathing{0%,100%{opacity:0.85;transform:translate3d(0,0,0) scale(1)}50%{opacity:1;transform:translate3d(0,0,0) scale(1.02)}}
36
 
37
+ /* OPTIMIZED: Aurora Effect */
38
  .aurora{position:fixed;inset:0;z-index:1;pointer-events:none;
39
  background:
40
  linear-gradient(45deg,
 
43
  linear-gradient(-45deg,
44
  rgba(255,107,107,0.05) 0%,transparent 30%,rgba(157,78,221,0.07) 70%,transparent 100%);
45
  background-size:400% 400%, 300% 300%;
46
+ animation:aurora 20s ease-in-out infinite, auroraPulse 8s ease-in-out infinite;
47
+ transform:translate3d(0,0,0);will-change:background-position}
48
+ @keyframes aurora{0%,100%{background-position:0% 0%, 100% 100%}50%{background-position:100% 100%, 0% 0%}}
49
  @keyframes auroraPulse{0%,100%{opacity:0.6}50%{opacity:1}}
50
 
51
+ /* OPTIMIZED: Cursor System - Desktop Only */
52
  .cursor{position:fixed;width:20px;height:20px;border-radius:50%;
53
  background:radial-gradient(circle,rgba(255,107,107,0.9) 0%,rgba(78,205,196,0.4) 50%,transparent 100%);
54
  pointer-events:none;z-index:999999;mix-blend-mode:screen;
55
+ transition:all 0.12s cubic-bezier(0.4,0,0.2,1);transform:translate3d(0,0,0);
56
  left:0;top:0;will-change:transform;
57
  box-shadow:0 0 20px rgba(255,107,107,0.6), 0 0 40px rgba(255,107,107,0.3)}
58
+
59
+ /* FIXED: Mobile-first performance optimization */
60
+ @media (max-width:768px) and (orientation:portrait){
61
+ body{cursor:auto}
62
+ .cursor,.cursor-trail{display:none !important}
63
+ }
64
+
65
  .cursor.hover{transform:scale(1.8) !important;
66
  background:radial-gradient(circle,rgba(255,107,107,1) 0%,rgba(78,205,196,0.6) 40%,rgba(157,78,221,0.3) 100%);
67
  box-shadow:0 0 30px rgba(255,107,107,0.8), 0 0 60px rgba(255,107,107,0.4)}
68
  .cursor-trail{position:fixed;width:4px;height:4px;border-radius:50%;
69
  background:rgba(255,107,107,0.8);pointer-events:none;z-index:999998;
70
+ animation:trailFade 0.8s cubic-bezier(0.4,0,0.2,1) forwards}
71
+ @keyframes trailFade{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.3)}}
72
 
73
+ /* FIXED: Optimization Mode System - Non-overlapping mobile layout */
74
+
75
+ /* Desktop Performance Toggle */
76
+ .performance-toggle{position:fixed;top:20px;right:20px;z-index:10000;
77
  display:flex;align-items:center;gap:10px;padding:10px 16px;
78
+ background:rgba(0,0,0,0.85);backdrop-filter:blur(10px);
79
  border-radius:25px;border:1px solid rgba(255,255,255,0.2);
80
  box-shadow:var(--shadow-medium);cursor:pointer;
81
  transition:all 0.4s cubic-bezier(0.4,0,0.2,1);font-size:12px;font-weight:500;
 
85
  .performance-toggle .mode-icon{font-size:16px;transition:all 0.3s ease}
86
  .performance-toggle .mode-text{font-family:'Inter',sans-serif;letter-spacing:0.3px}
87
 
88
+ /* FIXED: Performance Settings Panel */
89
  .performance-panel{position:fixed;top:70px;right:20px;z-index:9999;
90
+ background:rgba(0,0,0,0.95);backdrop-filter:blur(15px);
91
  border-radius:20px;padding:25px;border:1px solid rgba(255,255,255,0.15);
92
+ box-shadow:var(--shadow-strong);min-width:320px;max-width:90vw;
93
  opacity:0;transform:translateY(-20px) scale(0.95);
94
  transition:all 0.4s cubic-bezier(0.4,0,0.2,1);pointer-events:none}
95
  .performance-panel.visible{opacity:1;transform:translateY(0) scale(1);pointer-events:all}
 
97
  .performance-panel h3{color:var(--gold);margin:0 0 20px;font-size:18px;
98
  font-weight:700;text-align:center;font-family:'Playfair Display',serif}
99
 
100
+ /* FIXED: Mode Selection Grid - Better mobile layout */
101
+ .mode-grid{display:grid;grid-template-columns:repeat(2, 1fr);gap:10px;margin-bottom:20px}
102
  .mode-card{padding:12px;border-radius:12px;cursor:pointer;
103
  border:2px solid rgba(255,255,255,0.1);
104
  background:rgba(255,255,255,0.05);
105
+ transition:all 0.3s cubic-bezier(0.4,0,0.2,1);text-align:center;
106
+ min-height:80px;display:flex;flex-direction:column;justify-content:center}
107
  .mode-card:hover{transform:translateY(-2px);border-color:rgba(255,107,107,0.4)}
108
  .mode-card.active{border-color:var(--neon-primary);background:rgba(255,107,107,0.15);
109
  box-shadow:0 0 20px rgba(255,107,107,0.3)}
 
111
  .mode-card .mode-name{font-size:13px;font-weight:600;margin-bottom:4px}
112
  .mode-card .mode-desc{font-size:10px;opacity:0.7;line-height:1.3}
113
 
114
+ /* Special styling for Mobile+ mode */
115
+ .mode-card[data-mode="mobile-plus"]{
116
+ grid-column:span 2;
117
+ background:linear-gradient(135deg, rgba(0,255,127,0.1), rgba(0,191,255,0.1));
118
+ border-color:rgba(0,255,127,0.3)}
119
+ .mode-card[data-mode="mobile-plus"]:hover{
120
+ border-color:rgba(0,255,127,0.6);transform:translateY(-3px) scale(1.02)}
121
+ .mode-card[data-mode="mobile-plus"].active{
122
+ border-color:#00ff7f;background:rgba(0,255,127,0.2);
123
+ box-shadow:0 0 25px rgba(0,255,127,0.4)}
124
+
125
  /* Performance Metrics */
126
  .perf-metrics{background:rgba(255,255,255,0.05);border-radius:12px;padding:15px;margin-top:15px}
127
  .perf-metrics h4{margin:0 0 10px;font-size:13px;color:var(--neon-secondary)}
128
  .metric-item{display:flex;justify-content:space-between;margin:8px 0;font-size:11px}
129
  .metric-value{color:var(--gold);font-weight:600}
130
 
131
+ /* FIXED: Mobile Performance Interface - No overlapping */
132
+ .mobile-perf-toggle{position:fixed;bottom:100px;right:15px;z-index:50;
133
  width:48px;height:48px;border-radius:50%;
134
+ background:rgba(0,0,0,0.9);backdrop-filter:blur(10px);
135
+ border:2px solid rgba(255,255,255,0.3);display:none;align-items:center;justify-content:center;
136
  cursor:pointer;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);
137
  box-shadow:var(--shadow-medium)}
138
  .mobile-perf-toggle:hover{transform:scale(1.1);border-color:rgba(255,107,107,0.6)}
139
  .mobile-perf-toggle .perf-icon{font-size:20px;transition:all 0.3s ease}
140
 
141
+ /* FIXED: Mobile Performance Panel - Proper positioning */
142
  .mobile-perf-panel{position:fixed;bottom:0;left:0;right:0;z-index:60;
143
+ background:rgba(0,0,0,0.95);backdrop-filter:blur(15px);
144
  border-top:1px solid rgba(255,107,107,0.4);
145
  border-radius:25px 25px 0 0;padding:20px;
146
  transform:translateY(100%);transition:transform 0.5s cubic-bezier(0.4,0,0.2,1);
147
  box-shadow:0 -10px 40px rgba(0,0,0,0.5)}
148
  .mobile-perf-panel.visible{transform:translateY(0)}
149
  .mobile-perf-panel h3{color:var(--gold);margin:0 0 15px;font-size:16px;text-align:center}
150
+ .mobile-perf-panel .mode-grid{grid-template-columns:repeat(2,1fr);gap:8px}
151
+ .mobile-perf-panel .mode-card{padding:8px 4px;min-height:60px}
152
+ .mobile-perf-panel .mode-card[data-mode="mobile-plus"]{grid-column:span 2}
153
  .mobile-perf-panel .mode-emoji{font-size:20px;margin-bottom:4px}
154
  .mobile-perf-panel .mode-name{font-size:10px}
155
  .mobile-perf-panel .mode-desc{font-size:8px}
156
 
157
+ /* OPTIMIZED: Performance Mode Classes */
158
+ .ultra-mode{--animation-speed:1;--particle-count:8;--effect-intensity:1}
159
+ .high-mode{--animation-speed:0.8;--particle-count:6;--effect-intensity:0.8}
160
+ .balanced-mode{--animation-speed:0.6;--particle-count:4;--effect-intensity:0.6}
161
+ .performance-mode{--animation-speed:0.4;--particle-count:2;--effect-intensity:0.4}
162
+ .mobile-plus-mode{--animation-speed:0.2;--particle-count:1;--effect-intensity:0.2}
163
 
164
+ /* OPTIMIZED: Dynamic Performance Adjustments */
165
  .performance-mode .aurora{opacity:0.3;animation-duration:30s}
166
  .performance-mode .music-notes{display:none}
167
  .performance-mode .corner-accent{display:none}
168
  .performance-mode .cursor-trail{display:none}
169
+
170
+ /* Mobile+ Mode - Ultra Performance */
171
+ .mobile-plus-mode .aurora{opacity:0.1;animation-duration:60s}
172
+ .mobile-plus-mode .music-notes{display:none !important}
173
+ .mobile-plus-mode .corner-accent{display:none !important}
174
+ .mobile-plus-mode .cursor-trail{display:none !important}
175
+ .mobile-plus-mode .bubble{display:none !important}
176
+ .mobile-plus-mode body::before{animation:none;opacity:0.7}
177
+ .mobile-plus-mode .panel::before{display:none}
178
+ .mobile-plus-mode .panel::after{display:none}
179
+ .mobile-plus-mode .audio-visualizer{display:none}
180
+
181
  .balanced-mode .aurora{opacity:0.6;animation-duration:25s}
 
 
182
  .high-mode .aurora{opacity:0.8;animation-duration:22s}
 
 
183
  .ultra-mode .aurora{opacity:1;animation-duration:20s}
 
 
 
184
 
185
+ /* OPTIMIZED: Floating Elements */
186
  .music-notes{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
187
  .note{position:absolute;font-size:24px;color:rgba(255,215,0,0.3);font-family:'Playfair Display',serif;
188
+ animation:floatNote 12s linear infinite;transform:translate3d(0,0,0);
189
  text-shadow:0 0 10px rgba(255,215,0,0.4)}
190
+ @keyframes floatNote{
191
+ 0%{transform:translate3d(0,110vh,0) rotate(0deg);opacity:0}
192
  10%{opacity:0.6}90%{opacity:0.6}
193
+ 100%{transform:translate3d(0,-10vh,0) rotate(360deg);opacity:0}
194
  }
195
 
196
+ /* OPTIMIZED: Header */
197
  header{text-align:center;padding:30px 0 20px;transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
198
+ position:relative;z-index:3;transform:translate3d(0,0,0)}
199
  h1{font-size:clamp(32px,8vw,64px);font-weight:900;margin:0;font-family:'Playfair Display',serif;
200
  background:linear-gradient(135deg,#ff6b6b 0%,#ffd93d 20%,#4ecdc4 40%,#9d4edd 60%,#ff9a9e 80%,#ff6b6b 100%);
201
  background-size:400% 400%;-webkit-background-clip:text;background-clip:text;color:transparent;
202
+ animation:rainbow 8s ease-in-out infinite;
203
  filter:drop-shadow(0 0 20px rgba(255,107,107,0.5));
204
+ transform:translate3d(0,0,0);will-change:background-position;letter-spacing:-0.02em}
205
+ h1:hover{transform:translate3d(0,0,0) scale(1.05) rotateX(5deg);
206
  transition:transform 0.6s cubic-bezier(0.34,1.56,0.64,1)}
207
+ @keyframes rainbow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
208
 
209
  .sub{font-size:16px;color:rgba(255,255,255,.9);margin-top:12px;font-weight:300;
210
  text-shadow:0 0 15px rgba(255,255,255,0.3);letter-spacing:0.5px}
211
  .divider{height:6px;width:140px;margin:20px auto;
212
  background:linear-gradient(90deg,#ff6b6b,#ffd93d,#4ecdc4,#9d4edd,#ff9a9e);
213
  background-size:400% 100%;border-radius:999px;opacity:.95;
214
+ animation:flow 4s ease-in-out infinite;
215
+ box-shadow:0 0 20px rgba(255,107,107,0.4), 0 4px 15px rgba(0,0,0,0.2);transform:translate3d(0,0,0)}
216
+ @keyframes flow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
217
 
218
+ /* OPTIMIZED: Video Panel */
219
  .panel{position:relative;margin:20px auto 0;max-width:1000px;aspect-ratio:16/9;
220
  background:var(--glass-bg);border-radius:32px;overflow:hidden;
221
  box-shadow:var(--shadow-strong);z-index:2;
222
+ transform:translate3d(0,0,0);transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
223
  backdrop-filter:blur(20px);border:1px solid var(--glass-border)}
224
+ .panel:hover{transform:translate3d(0,0,0) scale(1.02) rotateX(2deg) rotateY(1deg);
225
  box-shadow:0 25px 80px rgba(0,0,0,0.5), 0 0 50px rgba(255,107,107,0.2)}
226
 
227
  .panel::before{content:'';position:absolute;inset:-6px;border-radius:38px;
228
  background:conic-gradient(from 0deg,var(--neon-primary) 0%,var(--magic-purple) 25%,var(--cosmic-blue) 50%,var(--aurora-green) 75%,var(--neon-primary) 100%);
229
+ z-index:-1;animation:holoRotate 12s linear infinite;transform:translate3d(0,0,0);
230
  filter:blur(2px);opacity:0.8}
231
  .panel::after{content:'';position:absolute;inset:-12px;border-radius:44px;
232
  background:radial-gradient(ellipse,rgba(255,107,107,0.2) 0%,rgba(78,205,196,0.1) 50%,transparent 100%);
233
+ z-index:-2;filter:blur(15px);animation:holoGlow 10s ease-in-out infinite;transform:translate3d(0,0,0)}
234
+ @keyframes holoRotate{0%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(1.02)}100%{transform:rotate(360deg) scale(1)}}
235
+ @keyframes holoGlow{0%,100%{opacity:0.6}50%{opacity:1}}
236
 
237
+ /* OPTIMIZED: Corner Accents */
238
  .panel-accents{position:absolute;inset:0;pointer-events:none;z-index:5}
239
  .corner-accent{position:absolute;width:50px;height:50px;border-radius:50%;
240
+ animation:cornerPulse 4s ease-in-out infinite;
241
+ filter:blur(1.5px);transform:translate3d(0,0,0)}
242
  .corner-accent:nth-child(1){top:-25px;left:-25px;animation-delay:0s;
243
  background:radial-gradient(circle,rgba(255,107,107,0.8) 0%,rgba(255,107,107,0.2) 70%,transparent 100%)}
244
  .corner-accent:nth-child(2){top:-25px;right:-25px;animation-delay:1s;
 
247
  background:radial-gradient(circle,rgba(157,78,221,0.8) 0%,rgba(157,78,221,0.2) 70%,transparent 100%)}
248
  .corner-accent:nth-child(4){bottom:-25px;right:-25px;animation-delay:3s;
249
  background:radial-gradient(circle,rgba(255,211,102,0.8) 0%,rgba(255,211,102,0.2) 70%,transparent 100%)}
250
+ @keyframes cornerPulse{
251
  0%,100%{transform:scale(0.8) rotate(0deg);opacity:0.5}
252
  50%{transform:scale(1.4) rotate(180deg);opacity:0.9}
253
  }
254
 
255
  video{width:100%;height:100%;object-fit:cover;background:#000;border-radius:26px;
256
  transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
257
+ filter:contrast(1.08) saturate(1.15) brightness(1.05);transform:translate3d(0,0,0)}
258
 
259
  .chip{position:absolute;bottom:15px;right:15px;padding:10px 16px;border-radius:16px;
260
+ background:rgba(0,0,0,0.85);backdrop-filter:blur(10px);
261
  font:13px/1.4 'Inter',monospace;color:#fff;z-index:6;
262
  border:1px solid rgba(255,107,107,0.4);
263
+ box-shadow:var(--shadow-medium);transform:translate3d(0,0,0);font-weight:500}
264
 
265
+ /* Unmute Overlay */
266
  .unmute-overlay{position:absolute;top:0;left:0;right:0;bottom:0;
267
  background:rgba(0,0,0,0.8);display:flex;align-items:center;justify-content:center;
268
  z-index:100;backdrop-filter:blur(25px);border-radius:26px}
 
277
  box-shadow:0 20px 60px rgba(255,107,107,0.7)}
278
  .unmute-btn:active{transform:translateY(-2px) scale(1.02)}
279
 
280
+ /* OPTIMIZED: Control Panel */
281
  .control-panel{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);
282
  display:flex;align-items:center;gap:16px;padding:16px 28px;
283
+ background:rgba(0,0,0,0.9);backdrop-filter:blur(15px);
284
  border-radius:60px;border:1px solid rgba(255,255,255,0.12);
285
  box-shadow:var(--shadow-strong);z-index:10;
286
  opacity:0;transform:translateX(-50%) translateY(30px);
 
288
  .panel:hover .control-panel,.control-panel:hover,.control-panel.active{
289
  opacity:1;transform:translateX(-50%) translateY(0)}
290
 
291
+ /* Volume Button */
292
  .mute-btn{width:52px;height:52px;border-radius:50%;border:2px solid rgba(255,255,255,0.25);
293
  background:linear-gradient(135deg,rgba(255,107,107,0.25),rgba(78,205,196,0.25));
294
+ backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;
295
  cursor:pointer;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);position:relative;overflow:hidden}
296
  .mute-btn::before{content:'';position:absolute;inset:0;border-radius:50%;
297
  background:linear-gradient(45deg,var(--neon-primary),var(--neon-secondary));
 
305
  filter:drop-shadow(0 0 12px rgba(255,255,255,0.6))}
306
  .mute-btn.muted .mute-icon{color:#ff6b6b;filter:drop-shadow(0 0 15px rgba(255,107,107,0.9))}
307
 
308
+ /* Volume Slider */
309
  .volume-control{display:flex;align-items:center;gap:12px}
310
  .volume-slider{width:100px;height:6px;background:rgba(255,255,255,0.25);
311
  border-radius:3px;position:relative;cursor:pointer;overflow:hidden}
 
319
  transition:all 0.3s cubic-bezier(0.4,0,0.2,1)}
320
  .volume-slider:hover .volume-fill::after{transform:scale(1.2)}
321
 
322
+ /* Control Buttons */
323
  .control-btn{width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,0.2);
324
+ background:rgba(255,255,255,0.08);backdrop-filter:blur(10px);
325
  display:flex;align-items:center;justify-content:center;cursor:pointer;
326
  font-size:18px;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);
327
  color:rgba(255,255,255,0.85)}
 
332
  .control-btn.active{background:rgba(255,107,107,0.25);border-color:rgba(255,107,107,0.7);
333
  color:#ff6b6b;box-shadow:0 0 25px rgba(255,107,107,0.5)}
334
 
335
+ /* Progress Bar */
336
  .progress-bar{position:absolute;bottom:0;left:0;right:0;height:4px;
337
  background:rgba(255,255,255,0.15);z-index:8}
338
  .progress-fill{height:100%;
 
340
  width:0%;transition:width 0.6s cubic-bezier(0.4,0,0.2,1);
341
  box-shadow:0 0 12px rgba(255,107,107,0.6)}
342
 
343
+ /* Quality Indicator */
344
  .quality-indicator{position:absolute;top:20px;left:20px;
345
  padding:8px 16px;border-radius:25px;font-size:12px;font-weight:600;
346
+ backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,0.15);z-index:7;
347
  font-family:'Inter',sans-serif}
348
  .quality-hd{background:rgba(76,222,128,0.25);color:#4ade80;border-color:rgba(76,222,128,0.4);
349
  box-shadow:0 0 20px rgba(76,222,128,0.3)}
 
352
  .quality-low{background:rgba(239,68,68,0.25);color:#ef4444;border-color:rgba(239,68,68,0.4);
353
  box-shadow:0 0 20px rgba(239,68,68,0.3)}
354
 
355
+ /* Keyboard Shortcuts */
356
  .shortcuts-overlay{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);
357
+ background:rgba(0,0,0,0.95);backdrop-filter:blur(15px);
358
  border-radius:28px;padding:40px;border:1px solid rgba(255,255,255,0.15);
359
  z-index:11000;opacity:0;pointer-events:none;
360
  transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
 
370
  font:13px/1 'Inter',monospace;color:var(--neon-primary);font-weight:600;
371
  box-shadow:0 2px 8px rgba(0,0,0,0.2)}
372
 
373
+ /* Info Section */
374
  .info{text-align:center;margin-top:25px;padding:0 15px;
375
+ transition:all 0.6s cubic-bezier(0.4,0,0.2,1);position:relative;z-index:2;transform:translate3d(0,0,0)}
376
  .info h2{font-size:clamp(20px,5vw,32px);margin:0;font-family:'Playfair Display',serif;
377
  background:linear-gradient(135deg,#fff1a8 0%,#ffd166 50%,#ff9a9e 100%);
378
  background-size:300% 300%;-webkit-background-clip:text;background-clip:text;color:transparent;
379
+ font-weight:700;animation:titleShimmer 6s ease-in-out infinite;
380
+ text-shadow:0 0 25px rgba(255,209,102,0.4);transform:translate3d(0,0,0)}
381
+ @keyframes titleShimmer{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
382
  .info p{margin:12px 0 0;color:rgba(255,255,255,.9);font-size:15px;font-weight:300;
383
  text-shadow:0 0 8px rgba(255,255,255,0.2)}
384
 
385
+ /* Schedule Section */
386
  .schedule{max-width:800px;margin:30px auto;
387
+ background:var(--glass-bg);backdrop-filter:blur(15px);
388
  border-radius:28px;padding:30px;transition:all 0.6s cubic-bezier(0.4,0,0.2,1);
389
  position:relative;z-index:2;border:1px solid var(--glass-border);
390
+ box-shadow:var(--shadow-medium);transform:translate3d(0,0,0)}
391
  .schedule:hover{transform:translateY(-5px);box-shadow:var(--shadow-strong)}
392
 
393
  .schedule h3{margin:0 0 20px;font-size:22px;color:var(--gold);text-align:center;
 
395
 
396
  .row{display:flex;gap:20px;align-items:flex-start;padding:16px 20px;border-radius:16px;
397
  font-size:16px;transition:all 0.4s cubic-bezier(0.4,0,0.2,1);position:relative;overflow:hidden;
398
+ cursor:pointer;transform:translate3d(0,0,0);margin:8px 0}
399
  .row::before{content:'';position:absolute;left:0;top:0;bottom:0;width:0;
400
  background:linear-gradient(90deg,rgba(255,107,107,0.15),rgba(78,205,196,0.15));
401
+ transition:all 0.4s cubic-bezier(0.4,0,0.2,1);transform:translate3d(0,0,0)}
402
  .row:hover::before{width:100%}
403
  .row:hover{transform:translateX(8px) scale(1.02);
404
  background:rgba(255,255,255,0.05);box-shadow:var(--shadow-soft)}
 
411
  border-left:5px solid #ff6b6b;box-shadow:var(--shadow-medium);
412
  transform:translateX(10px) scale(1.03)}
413
  .row.active::after{content:'✨';position:absolute;right:20px;top:50%;transform:translateY(-50%);
414
+ font-size:18px;animation:sparkle 2s ease-in-out infinite}
415
+ @keyframes sparkle{0%,100%{opacity:0.7;transform:translateY(-50%) scale(1)}50%{opacity:1;transform:translateY(-50%) scale(1.2)}}
416
 
417
  footer{text-align:center;color:rgba(255,255,255,.8);font-size:14px;padding:30px;
418
  position:relative;z-index:2;text-shadow:0 0 8px rgba(255,255,255,0.2);font-weight:300}
419
 
420
+ /* FIXED: Badges - Non-overlapping positioning */
421
+ .live-badge{position:fixed;top:20px;left:20px;z-index:9999;display:inline-flex;align-items:center;gap:10px;
422
  padding:12px 20px;border-radius:30px;
423
+ background:rgba(0,0,0,0.85);backdrop-filter:blur(10px);border:1px solid rgba(255,107,107,.5);
424
  color:#ff6b6b;font-weight:600;font-size:15px;
425
  box-shadow:var(--shadow-medium);
426
+ animation:livePulse 3s ease-in-out infinite;transform:translate3d(0,0,0)}
427
+ @keyframes livePulse{0%,100%{box-shadow:var(--shadow-medium)}50%{box-shadow:0 8px 40px rgba(255,107,107,0.6)}}
428
 
429
  .dot{width:10px;height:10px;border-radius:50%;background:#ff3b3b;
430
  box-shadow:0 0 15px rgba(255,59,59,.9);
431
+ animation:dotPulse 2s ease-in-out infinite;transform:translate3d(0,0,0)}
432
+ @keyframes dotPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.3)}}
433
 
434
+ .reactions-badge{position:fixed;bottom:20px;left:20px;z-index:9999;padding:12px 20px;border-radius:30px;
435
+ background:rgba(0,0,0,0.85);backdrop-filter:blur(10px);border:1px solid rgba(78,205,196,.5);
436
  color:#4ecdc4;font-weight:600;font-size:15px;display:inline-flex;gap:12px;align-items:center;
437
+ box-shadow:var(--shadow-medium);transform:translate3d(0,0,0)}
438
 
439
+ /* FIXED: Emoji Panel - Mobile positioning fixed */
440
  .emoji-panel{position:absolute;right:20px;bottom:110px;z-index:6;display:flex;flex-direction:column;gap:18px}
441
  .emoji-btn{width:56px;height:56px;border-radius:50%;border:2px solid rgba(255,255,255,.35);
442
+ background:rgba(0,0,0,.7);backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;
443
  font-size:26px;cursor:pointer;transition:all 0.3s cubic-bezier(0.4,0,0.2,1);
444
+ box-shadow:var(--shadow-soft);transform:translate3d(0,0,0)}
445
  .emoji-btn:hover{transform:scale(1.15) rotateZ(10deg);
446
  box-shadow:var(--shadow-medium);border-color:rgba(255,107,107,0.6)}
447
  .emoji-btn:active{transform:scale(1.05) rotateZ(5deg)}
448
 
449
  .emoji-count{position:absolute;right:76px;min-width:70px;height:36px;padding:0 16px;border-radius:18px;
450
  display:flex;align-items:center;justify-content:center;
451
+ background:rgba(0,0,0,.8);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.25);
452
  font:13px/1.4 'Inter',monospace;color:#fff;font-weight:500;
453
+ box-shadow:var(--shadow-soft);transform:translate3d(0,0,0)}
454
 
455
+ /* Particles */
456
  .particle{position:absolute;pointer-events:none;z-index:8;font-size:26px;
457
+ animation:floatUp 2s cubic-bezier(0.4,0,0.2,1) forwards;transform:translate3d(0,0,0)}
458
+ @keyframes floatUp{
459
+ 0%{transform:translate3d(0,0,0) scale(0.8) rotate(0deg);opacity:0}
460
  20%{opacity:1}
461
+ 100%{transform:translate3d(0,-200px,0) scale(1.5) rotate(360deg);opacity:0}
462
  }
463
 
464
  .burst{position:absolute;pointer-events:none;z-index:8;
465
+ animation:burst 1s cubic-bezier(0.4,0,0.2,1) forwards;transform:translate3d(0,0,0)}
466
+ @keyframes burst{
467
  0%{transform:scale(0.4) rotate(0deg);opacity:0}
468
  60%{transform:scale(1.2) rotate(180deg);opacity:1}
469
  100%{transform:scale(1.6) rotate(360deg);opacity:0}
470
  }
471
 
472
+ /* OPTIMIZED: Bubbles */
473
  #bubbles{position:fixed;inset:0;overflow:hidden;z-index:1;pointer-events:none}
474
  .bubble{position:absolute;bottom:-100px;border-radius:50%;
475
  background:linear-gradient(45deg,rgba(255,255,255,.12),rgba(255,107,107,.08));
476
+ animation:rise linear infinite;
477
+ box-shadow:inset 0 0 20px rgba(255,255,255,0.15);transform:translate3d(0,0,0)}
478
+ @keyframes rise{
479
+ 0%{transform:translate3d(0,0,0) scale(1) rotate(0deg);opacity:.5}
480
  50%{opacity:.8}
481
+ 100%{transform:translate3d(0,-120vh,0) scale(1.3) rotate(360deg);opacity:0}
482
  }
483
 
484
+ /* Welcome Text */
485
  .welcome-neon{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);
486
  z-index:10000;font-size:clamp(36px,9vw,72px);font-weight:900;font-family:'Playfair Display',serif;
487
  background:linear-gradient(45deg,#ff6b6b,#ffd93d,#6bcf7f,#4d96ff,#9c88ff,#ff6b6b);
488
  background-size:500% 500%;-webkit-background-clip:text;background-clip:text;color:transparent;
489
+ animation:neonFlow 4s ease-in-out, fadeOut 5s ease-in-out forwards;
490
  text-shadow:0 0 40px rgba(255,107,107,0.8);pointer-events:none;opacity:1;
491
  filter:drop-shadow(0 0 30px rgba(255,107,107,0.5));transform-origin:center}
492
+ @keyframes neonFlow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
493
+ @keyframes fadeOut{
494
  0%{opacity:1;transform:translate(-50%, -50%) scale(1)}
495
  80%{opacity:1;transform:translate(-50%, -50%) scale(1.08)}
496
  100%{opacity:0;transform:translate(-50%, -50%) scale(0.85)}
497
  }
498
 
499
+ /* Audio Visualizer */
500
  .audio-visualizer{position:absolute;bottom:30px;left:30px;display:flex;gap:4px;z-index:6}
501
  .audio-bar{width:5px;border-radius:3px;
502
  background:linear-gradient(180deg,#ff6b6b 0%,#4ecdc4 50%,#9d4edd 100%);
503
+ animation:audioVisualize 1.2s ease-in-out infinite;transform:translate3d(0,0,0);
504
  box-shadow:0 0 10px rgba(255,107,107,0.4)}
505
  .audio-bar:nth-child(1){height:25px;animation-delay:0s}
506
  .audio-bar:nth-child(2){height:35px;animation-delay:0.1s}
 
508
  .audio-bar:nth-child(4){height:55px;animation-delay:0.3s}
509
  .audio-bar:nth-child(5){height:45px;animation-delay:0.4s}
510
  .audio-bar:nth-child(6){height:35px;animation-delay:0.5s}
511
+ @keyframes audioVisualize{0%,100%{transform:scaleY(0.4)}50%{transform:scaleY(1.3)}}
512
 
513
+ /* FIXED: MOBILE RESPONSIVE DESIGN - No overlapping elements */
514
  @media (max-width:768px) and (orientation:portrait){
515
  body{cursor:auto}
516
  .cursor,.cursor-trail{display:none !important}
517
+
518
  /* Hide desktop performance toggle on mobile */
519
  .performance-toggle,.performance-panel{display:none !important}
520
 
521
+ /* Show mobile performance toggle */
522
+ .mobile-perf-toggle{display:flex !important}
523
+
524
  header{padding:20px 0 0;transform:translateY(-100%);opacity:0}
525
  header.visible{transform:translateY(0);opacity:1}
526
  .divider{display:none}
 
532
  .panel:hover{transform:none}
533
  video{border-radius:0}
534
 
535
+ /* FIXED: Control panel positioning for mobile */
536
  .control-panel{
537
  position:fixed;
538
  bottom:30px;
 
542
  padding:8px 16px;
543
  opacity:1 !important;
544
  background:rgba(0,0,0,0.95);
545
+ backdrop-filter:blur(15px);
546
  border:1px solid rgba(255,107,107,0.4);
547
  z-index:50;
548
  box-shadow:var(--shadow-strong);
 
552
  .volume-slider{width:50px;height:4px}
553
  .control-btn{width:32px;height:32px;font-size:12px}
554
 
555
+ /* FIXED: Emoji panel mobile positioning - no overlap */
556
  .emoji-panel{
557
  position:fixed;
558
  right:15px;
 
564
  .emoji-btn{width:48px;height:48px;font-size:22px;border:1.5px solid rgba(255,255,255,.4)}
565
  .emoji-count{right:60px;min-width:50px;height:28px;font-size:11px}
566
 
567
+ /* FIXED: Badge positioning - no overlap */
568
+ .live-badge{top:15px;left:15px;font-size:12px;padding:8px 12px;z-index:55}
569
+ .reactions-badge{bottom:90px;left:15px;font-size:12px;padding:8px 12px;z-index:55}
570
+
571
  .chip{position:fixed;bottom:85px;right:15px;font-size:11px;padding:6px 10px;z-index:40}
572
+ .audio-visualizer{position:fixed;bottom:85px;right:80px;z-index:40}
573
  .quality-indicator{top:60px;left:15px;font-size:10px;padding:4px 8px;z-index:40}
574
 
 
 
 
575
  .info,.schedule{position:relative;margin:0;border-radius:20px 20px 0 0;transform:translateY(-100%);opacity:0}
576
  .info.visible,.schedule.visible{transform:translateY(0);opacity:1}
577
 
578
  .bottom-sheet{
579
  position:fixed;left:0;right:0;bottom:0;z-index:35;
580
+ background:rgba(0,0,0,.95);backdrop-filter:blur(15px);
581
  border-top:1px solid rgba(255,107,107,.5);
582
  max-height:45vh;overflow:auto;padding:15px;
583
  transform:translateY(100%);transition:transform 0.5s cubic-bezier(0.4,0,0.2,1);
 
586
  .bottom-sheet.visible{transform:translateY(0)}
587
 
588
  .auto-hide-indicator{
589
+ position:fixed;bottom:150px;left:50%;transform:translateX(-50%);
590
  background:rgba(0,0,0,.9);color:rgba(255,255,255,.9);
591
  padding:8px 20px;border-radius:20px;font-size:12px;z-index:30;
592
+ opacity:0;transition:opacity 0.4s ease;backdrop-filter:blur(10px);
593
  border:1px solid rgba(255,107,107,0.4);box-shadow:var(--shadow-soft);
594
  }
595
  .auto-hide-indicator.visible{opacity:1}
 
607
  .panel{max-width:95%;margin:15px auto 0}
608
  .emoji-panel{right:25px;bottom:120px;gap:14px}
609
  .control-panel{bottom:25px;gap:12px;padding:12px 22px}
 
610
  }
611
 
612
  /* Enhanced Large Desktop Support */
 
617
  .control-panel{gap:18px;padding:18px 32px}
618
  .mute-btn{width:56px;height:56px}
619
  .volume-slider{width:120px}
 
620
  }
621
 
622
+ /* OPTIMIZED: Performance optimizations */
623
  .low-performance *{animation-duration:4s !important}
624
  .low-performance .aurora{opacity:0.4}
625
  .low-performance .music-notes{display:none}
 
637
  <div class="cursor" id="cursor"></div>
638
  <div class="music-notes" id="music-notes"></div>
639
 
640
+ <!-- Desktop Performance Toggle -->
641
  <div class="performance-toggle" id="performance-toggle">
642
  <span class="mode-icon">⚙️</span>
643
  <span class="mode-text" id="mode-text">Balanced</span>
644
  </div>
645
 
646
+ <!-- Enhanced Desktop Performance Panel -->
647
  <div class="performance-panel" id="performance-panel">
648
+ <h3>🎨 Visual Quality & Performance</h3>
649
  <div class="mode-grid">
650
  <div class="mode-card" data-mode="ultra">
651
  <span class="mode-emoji">🌟</span>
 
667
  <div class="mode-name">Performance</div>
668
  <div class="mode-desc">Maximum speed & efficiency</div>
669
  </div>
670
+ <div class="mode-card" data-mode="mobile-plus">
671
+ <span class="mode-emoji">📱</span>
672
+ <div class="mode-name">Mobile+</div>
673
+ <div class="mode-desc">Ultra mobile optimization</div>
674
+ </div>
675
  </div>
676
  <div class="perf-metrics">
677
  <h4>📊 Current Status</h4>
 
685
  </div>
686
  <div class="metric-item">
687
  <span>Particles:</span>
688
+ <span class="metric-value" id="particles-count">4 Active</span>
689
  </div>
690
  </div>
691
  </div>
692
 
693
+ <!-- Enhanced Mobile Performance Toggle -->
694
  <div class="mobile-perf-toggle" id="mobile-perf-toggle">
695
  <span class="perf-icon">⚙️</span>
696
  </div>
697
 
698
+ <!-- Enhanced Mobile Performance Panel -->
699
  <div class="mobile-perf-panel" id="mobile-perf-panel">
700
  <h3>🎨 Visual Quality</h3>
701
  <div class="mode-grid">
702
  <div class="mode-card" data-mode="ultra">
703
  <span class="mode-emoji">🌟</span>
704
  <div class="mode-name">Ultra</div>
705
+ <div class="mode-desc">Max</div>
706
  </div>
707
  <div class="mode-card" data-mode="high">
708
  <span class="mode-emoji">✨</span>
709
  <div class="mode-name">High</div>
710
+ <div class="mode-desc">Rich</div>
711
  </div>
712
  <div class="mode-card active" data-mode="balanced">
713
  <span class="mode-emoji">⚖️</span>
 
717
  <div class="mode-card" data-mode="performance">
718
  <span class="mode-emoji">🚀</span>
719
  <div class="mode-name">Fast</div>
720
+ <div class="mode-desc">Speed</div>
721
+ </div>
722
+ <div class="mode-card" data-mode="mobile-plus">
723
+ <span class="mode-emoji">📱</span>
724
+ <div class="mode-name">Mobile+</div>
725
+ <div class="mode-desc">Ultra</div>
726
  </div>
727
  </div>
728
  </div>
 
762
  <span>Performance Toggle</span>
763
  <span class="shortcut-key">Q</span>
764
  </div>
765
+ <div class="shortcut-item">
766
+ <span>Mobile+ Mode</span>
767
+ <span class="shortcut-key">Shift+M</span>
768
+ </div>
769
  <div class="shortcut-item">
770
  <span>Show Shortcuts</span>
771
  <span class="shortcut-key">?</span>
 
782
 
783
  <main>
784
  <section class="panel" id="panel">
785
+ <canvas id="color-canvas" style="display:none"></canvas>
786
+
787
+ <div class="unmute-overlay" id="unmute-overlay">
788
+ <button class="unmute-btn" id="unmute-btn">
789
+ <span>🔊</span>
790
+ <span>Enable Audio</span>
791
+ </button>
792
+ </div>
793
+
794
+ <video id="player" muted loop playsinline preload="metadata">
795
+ <source src="" />
796
+ Your browser does not support the video tag.
797
+ </video>
798
+
799
+ <div class="quality-indicator quality-hd" id="quality-indicator">HD</div>
800
+ <div class="chip" id="chip">Local: —</div>
801
+
802
  <div class="panel-accents">
803
  <div class="corner-accent"></div>
804
  <div class="corner-accent"></div>
 
806
  <div class="corner-accent"></div>
807
  </div>
808
 
809
+ <div class="audio-visualizer">
810
+ <div class="audio-bar"></div>
811
+ <div class="audio-bar"></div>
812
+ <div class="audio-bar"></div>
813
+ <div class="audio-bar"></div>
814
+ <div class="audio-bar"></div>
815
+ <div class="audio-bar"></div>
 
 
 
 
 
 
 
816
  </div>
817
 
 
 
 
 
818
  <div class="control-panel" id="control-panel">
819
+ <button class="mute-btn" id="mute-btn">
820
+ <span class="mute-icon" id="mute-icon">🔊</span>
821
+ </button>
822
+
823
  <div class="volume-control">
824
+ <div class="volume-slider" id="volume-slider">
825
  <div class="volume-fill" id="volume-fill"></div>
826
  </div>
827
  </div>
828
+
829
+ <button class="control-btn" id="theater-btn" title="Theater Mode">
830
+ <span>🎭</span>
831
+ </button>
832
+
833
+ <button class="control-btn" id="fullscreen-btn" title="Fullscreen">
834
+ <span>⛶</span>
835
+ </button>
836
+
837
+ <button class="control-btn" id="pip-btn" title="Picture-in-Picture">
838
+ <span>⧉</span>
839
+ </button>
840
+
841
+ <button class="control-btn" id="shortcuts-btn" title="Keyboard Shortcuts">
842
+ <span>⌨</span>
843
+ </button>
844
  </div>
845
 
846
+ <div class="progress-bar">
847
+ <div class="progress-fill" id="progress-fill"></div>
 
 
 
 
 
 
848
  </div>
849
 
 
850
  <div class="emoji-panel" id="emoji-panel">
851
+ <div class="emoji-btn" data-type="heart" title="Love it!">
852
+ <span>❤️</span>
853
  <div class="emoji-count" id="count-heart">0</div>
854
  </div>
855
+
856
+ <div class="emoji-btn" data-type="fire" title="On Fire!">
857
+ <span>🔥</span>
858
  <div class="emoji-count" id="count-fire">0</div>
859
  </div>
860
+
861
+ <div class="emoji-btn" data-type="dancer" title="Amazing Dance!">
862
+ <span>💃</span>
863
  <div class="emoji-count" id="count-dancer">0</div>
864
  </div>
865
+
866
+ <div class="emoji-btn" data-type="spark" title="Magical!">
867
+ <span>✨</span>
868
  <div class="emoji-count" id="count-spark">0</div>
869
  </div>
870
  </div>
871
  </section>
872
+ </main>
873
 
874
+ <section class="info" id="main-info">
875
+ <h2 id="vtitle">✨ Belly Dance Stream ✨</h2>
876
+ <p id="vmeta">Loading amazing content...</p>
877
+ </section>
878
+
879
+ <section class="schedule" id="main-schedule">
880
+ <h3 id="schedule-title">✨ Global Schedule (UTC) ✨</h3>
881
+ <div id="rows"></div>
882
+ </section>
883
+
884
+ <!-- Mobile Bottom Sheet -->
885
+ <div class="bottom-sheet" id="bottom-sheet">
886
+ <section class="info">
887
+ <h2 id="vtitle2">✨ Belly Dance Stream ✨</h2>
888
+ <p id="vmeta2">Loading amazing content...</p>
889
  </section>
890
 
891
+ <section class="schedule">
892
+ <h3>✨ Today's Schedule ✨</h3>
893
+ <div id="rows2"></div>
 
 
 
 
 
 
894
  </section>
895
+ </div>
896
 
897
+ <div class="auto-hide-indicator" id="auto-hide-indicator">
898
+ Double tap to show schedule
899
+ </div>
900
 
901
+ <footer>
902
+ <p>✨ Ultimate Belly Dance Experience - Optimized for All Devices ✨</p>
903
+ </footer>
904
 
905
  <script>
906
+ /* OPTIMIZED: Global Variables & Performance Monitoring */
 
 
 
 
 
 
 
907
  let frameCount = 0;
 
 
 
 
908
  let currentPerformanceMode = 'balanced';
909
+ let maxFloatingElements = 4;
910
+ let audioEnabled = false;
911
+ let audioContext = null;
912
+ let analyser = null;
913
+ let isMuted = false;
 
 
 
 
914
  let currentVolume = 0.5;
915
+ let currentDominantColor = '#ff6b6b';
916
+ let mouseX = 0, mouseY = 0;
917
  let isFullscreen = false;
918
  let isPictureInPicture = false;
919
+ let isTheaterMode = false;
920
+ let isControlPanelVisible = false;
921
 
922
+ /* OPTIMIZED: Performance Monitoring System */
923
  const performanceCheck = {
924
+ lastTime: performance.now(),
 
925
  frameCount: 0,
 
926
  avgFps: 60,
 
927
  update() {
928
+ const now = performance.now();
929
  this.frameCount++;
930
+
931
+ if (now - this.lastTime >= 1000) {
932
+ this.avgFps = Math.round((this.frameCount * 1000) / (now - this.lastTime));
933
+ this.frameCount = 0;
934
+ this.lastTime = now;
935
 
936
+ // Auto-adjust performance mode based on FPS
937
+ this.autoAdjustPerformance();
938
+ }
939
+ },
940
+
941
+ autoAdjustPerformance() {
942
+ if (this.avgFps < 30 && currentPerformanceMode !== 'mobile-plus') {
943
+ console.log('Low FPS detected, switching to Mobile+ mode');
944
+ setPerformanceMode('mobile-plus');
945
+ } else if (this.avgFps > 55 && currentPerformanceMode === 'mobile-plus') {
946
+ console.log('FPS improved, switching to Performance mode');
947
+ setPerformanceMode('performance');
 
948
  }
949
  }
950
  };
951
 
952
+ /* OPTIMIZED: Performance Mode Configuration */
953
+ const performanceModes = {
954
+ 'ultra': { name: 'Ultra', icon: '🌟', particles: 8, animationSpeed: 1.0, effectIntensity: 1.0 },
955
+ 'high': { name: 'High', icon: '✨', particles: 6, animationSpeed: 0.8, effectIntensity: 0.8 },
956
+ 'balanced': { name: 'Balanced', icon: '⚖️', particles: 4, animationSpeed: 0.6, effectIntensity: 0.6 },
957
+ 'performance': { name: 'Performance', icon: '🚀', particles: 2, animationSpeed: 0.4, effectIntensity: 0.4 },
958
+ 'mobile-plus': { name: 'Mobile+', icon: '📱', particles: 1, animationSpeed: 0.2, effectIntensity: 0.2 }
959
+ };
960
+
961
+ /* OPTIMIZED: Performance Mode System */
962
  function initPerformanceModeSystem() {
963
  const desktopToggle = document.getElementById('performance-toggle');
964
  const desktopPanel = document.getElementById('performance-panel');
965
  const mobileToggle = document.getElementById('mobile-perf-toggle');
966
  const mobilePanel = document.getElementById('mobile-perf-panel');
967
 
968
+ // Load saved preference with mobile auto-detection
969
+ let savedMode = localStorage.getItem('performanceMode') || 'balanced';
970
+
971
+ // Auto-suggest Mobile+ for mobile devices
972
+ if (!localStorage.getItem('performanceMode') && isMobileDevice()) {
973
+ savedMode = 'mobile-plus';
974
+ }
975
+
976
  setPerformanceMode(savedMode);
977
 
978
  // Desktop toggle
 
995
  if (modeCard) {
996
  const mode = modeCard.getAttribute('data-mode');
997
  setPerformanceMode(mode);
998
+
999
  // Hide panels after selection
1000
  desktopPanel?.classList.remove('visible');
1001
  mobilePanel?.classList.remove('visible');
 
1012
  }
1013
  });
1014
 
1015
+ // Keyboard shortcuts
1016
  document.addEventListener('keydown', function(e) {
1017
+ if (e.key.toLowerCase() === 'q' && !e.shiftKey) {
1018
  const modes = Object.keys(performanceModes);
1019
  const currentIndex = modes.indexOf(currentPerformanceMode);
1020
  const nextIndex = (currentIndex + 1) % modes.length;
1021
  setPerformanceMode(modes[nextIndex]);
1022
+ } else if (e.key.toLowerCase() === 'm' && e.shiftKey) {
1023
+ setPerformanceMode('mobile-plus');
1024
  }
1025
  });
1026
  }
 
1030
 
1031
  currentPerformanceMode = mode;
1032
  const config = performanceModes[mode];
1033
+
1034
  // Update body class
1035
  document.body.className = document.body.className.replace(/\b\w+-mode\b/g, '');
1036
  document.body.classList.add(mode + '-mode');
1037
+
1038
  // Update maxFloatingElements
1039
  maxFloatingElements = config.particles;
1040
+
1041
  // Update UI indicators
1042
  const modeText = document.getElementById('mode-text');
1043
  if (modeText) modeText.textContent = config.name;
1044
+
1045
  // Update active cards
1046
  document.querySelectorAll('.mode-card').forEach(card => {
1047
  card.classList.remove('active');
 
1056
 
1057
  // Save preference
1058
  localStorage.setItem('performanceMode', mode);
1059
+
1060
  // Apply performance adjustments
1061
  applyPerformanceSettings();
1062
+
1063
  console.log(`Performance mode set to: ${config.name}`);
1064
  }
1065
 
1066
  function applyPerformanceSettings() {
1067
  const config = performanceModes[currentPerformanceMode];
1068
+
1069
  // Adjust animation speeds
1070
+ const root = document.documentElement;
1071
+ root.style.setProperty('--animation-speed', config.animationSpeed);
1072
+ root.style.setProperty('--particle-count', config.particles);
1073
+ root.style.setProperty('--effect-intensity', config.effectIntensity);
1074
+
 
 
1075
  // Update performance metrics display
1076
  updatePerformanceMetrics();
1077
  }
 
1080
  const fpsDisplay = document.getElementById('fps-display');
1081
  const effectsLevel = document.getElementById('effects-level');
1082
  const particlesCount = document.getElementById('particles-count');
1083
+
1084
  if (fpsDisplay) fpsDisplay.textContent = performanceCheck.avgFps + ' FPS';
1085
  if (effectsLevel) {
1086
+ const levels = { ultra: 'Maximum', high: 'High', balanced: 'Medium', performance: 'Low', 'mobile-plus': 'Minimal' };
1087
  effectsLevel.textContent = levels[currentPerformanceMode];
1088
  }
1089
  if (particlesCount) particlesCount.textContent = maxFloatingElements + ' Active';
1090
  }
1091
 
1092
+ /* OPTIMIZED: Cursor System - Desktop Only */
1093
+ let trailCount = 0;
1094
+ const maxTrails = 3;
1095
+
1096
+ function initOptimizedCursor(){
1097
  if (isMobileDevice()) return;
1098
+
1099
  const cursor = document.getElementById('cursor');
 
1100
  let isMoving = false;
1101
  let moveTimeout;
1102
 
 
1105
  mouseY = e.clientY;
1106
 
1107
  cursor.style.transform = `translate3d(${mouseX - 10}px, ${mouseY - 10}px, 0)`;
1108
+
1109
  isMoving = true;
1110
  clearTimeout(moveTimeout);
1111
+
1112
+ // Optimized trail with performance limits
1113
  const config = performanceModes[currentPerformanceMode];
1114
+ const shouldCreateTrail = Math.random() > (0.9 - (config.effectIntensity * 0.1));
1115
+
1116
+ if(shouldCreateTrail && trailCount < maxTrails) {
1117
  trailCount++;
1118
  const trail = document.createElement('div');
1119
  trail.className = 'cursor-trail';
 
1121
  document.body.appendChild(trail);
1122
 
1123
  setTimeout(function() {
1124
+ if (trail.parentNode) {
1125
+ trail.remove();
1126
+ trailCount--;
1127
+ }
1128
+ }, 800);
1129
  }
1130
+
1131
  moveTimeout = setTimeout(() => { isMoving = false; }, 150);
1132
  });
1133
 
1134
+ // Optimized hover effects
1135
  const interactiveElements = 'button, .control-btn, .emoji-btn, .mute-btn, .row, .shortcut-item, .mode-card, .performance-toggle';
1136
+
1137
  document.addEventListener('mouseenter', function(e) {
1138
  if (e.target.matches(interactiveElements)) {
1139
  cursor.classList.add('hover');
1140
  }
1141
  }, true);
1142
+
1143
  document.addEventListener('mouseleave', function(e) {
1144
  if (e.target.matches(interactiveElements)) {
1145
  cursor.classList.remove('hover');
1146
  }
1147
  }, true);
 
 
 
 
 
 
1148
  }
1149
 
1150
  function isMobileDevice() {
 
1152
  (window.innerWidth <= 768 && 'ontouchstart' in window);
1153
  }
1154
 
1155
+ /* OPTIMIZED: Audio Enable */
1156
  function initSimpleAudioEnable() {
1157
  const overlay = document.getElementById('unmute-overlay');
1158
  const unmuteBtn = document.getElementById('unmute-btn');
 
1171
  try {
1172
  if (!audioContext) {
1173
  audioContext = new (window.AudioContext || window.webkitAudioContext)();
1174
+ initOptimizedAudioAnalysis();
1175
  }
1176
  } catch (e) {
1177
  console.log('Audio context creation failed, continuing without visualizer');
 
1184
  }
1185
  }
1186
 
1187
+ /* OPTIMIZED: Schedules */
1188
  const SCHEDULE_A = [
1189
  { title:"Dance in Front of the Library of Alexandria", url:"https://ik.imagekit.io/plerqlkuh/A%20dance%20in%20front%20of%20the%20Library%20of%20Alexandria.mp4", duration:155, start:0, end:2.667 },
1190
  { title:"✨ Belly dance ✨ - sensual dance", url:"https://ik.imagekit.io/plerqlkuh/%E2%9C%A8%20Belly%20dance%20%E2%9C%A8%20-%20-%20sensual%20dance.mp4", duration:113, start:2.667, end:5.333 },
 
1209
  { title:"✨ Belly dance ✨ - secret of the goddess", url:"https://ik.imagekit.io/b3mprpaei/%E2%9C%A8%20Belly%20dance%20%E2%9C%A8%20-%20secret%20of%20the%20goddess.mp4", duration:166, start:19.1, end:21 }
1210
  ];
1211
 
1212
+ const USE_UTC = true;
1213
+
1214
  /* Utilities */
1215
  function nowHour(){
1216
  const n=new Date();
 
1221
  function secFmt(s){return `${Math.floor(s/60)}:${String(s%60).padStart(2,'0')}`;}
1222
  function clamp(n,min,max){return Math.max(min,Math.min(max,n));}
1223
 
1224
+ /* OPTIMIZED: Control Functions */
1225
  function initMuteControl() {
1226
  const muteBtn = document.getElementById('mute-btn');
1227
  const muteIcon = document.getElementById('mute-icon');
 
1244
  muteBtn.classList.remove('muted');
1245
  }
1246
 
1247
+ // Optimized animation
1248
+ muteBtn.style.transform = 'scale(1.25)';
1249
+ setTimeout(() => { muteBtn.style.transform = ''; }, 200);
 
 
 
 
 
1250
  });
1251
  }
1252
 
 
1289
  isTheaterMode = !isTheaterMode;
1290
  document.body.classList.toggle('theater-mode', isTheaterMode);
1291
  theaterBtn.classList.toggle('active', isTheaterMode);
 
 
 
 
 
 
 
 
 
1292
  });
1293
  }
1294
 
 
1312
 
1313
  document.addEventListener('fullscreenchange', function() {
1314
  isFullscreen = !!document.fullscreenElement;
1315
+ document.getElementById('fullscreen-btn').classList.toggle('active', isFullscreen);
1316
  });
1317
  }
1318
 
 
1360
  document.addEventListener('keydown', function(e) {
1361
  switch(e.key.toLowerCase()) {
1362
  case 'm':
1363
+ if (!e.shiftKey) document.getElementById('mute-btn').click();
1364
  break;
1365
  case 'f':
1366
  document.getElementById('fullscreen-btn').click();
 
1371
  case 'p':
1372
  document.getElementById('pip-btn').click();
1373
  break;
 
 
 
1374
  case 'arrowup':
1375
  e.preventDefault();
1376
  if (audioEnabled) {
 
1462
  });
1463
  }
1464
 
1465
+ /* OPTIMIZED: Floating Elements with Performance Limits */
1466
  let activeFloatingElements = 0;
1467
+ let noteCreateTimer = null;
1468
+
1469
+ function createOptimizedFloatingNote(){
1470
  const config = performanceModes[currentPerformanceMode];
1471
  if(activeFloatingElements >= config.particles) return;
1472
 
 
1481
 
1482
  activeFloatingElements++;
1483
  document.getElementById('music-notes').appendChild(note);
1484
+
1485
  setTimeout(function() {
1486
+ if (note.parentNode) {
1487
+ note.remove();
1488
+ activeFloatingElements--;
1489
+ }
1490
+ }, 12000 / config.animationSpeed);
1491
  }
1492
 
1493
+ function initOptimizedColorSampling(){
1494
  const canvas = document.getElementById('color-canvas');
1495
  const ctx = canvas.getContext('2d');
1496
  const video = document.getElementById('player');
1497
+ let colorSampleTimer = null;
1498
 
1499
+ function sampleColors(){
1500
  if(!video.videoWidth || !video.videoHeight) return;
1501
 
1502
+ canvas.width = 30;
1503
+ canvas.height = 20;
1504
 
1505
  try{
1506
+ ctx.drawImage(video, 0, 0, 30, 20);
1507
+ const imageData = ctx.getImageData(5, 5, 20, 10);
1508
  const data = imageData.data;
1509
 
1510
  let r = 0, g = 0, b = 0, count = 0;
 
1520
  r = Math.floor(r / count);
1521
  g = Math.floor(g / count);
1522
  b = Math.floor(b / count);
1523
+ updateDynamicColors(r, g, b);
 
1524
  }
1525
  }catch(e){
1526
+ // Fallback to time-based colors
1527
  const time = Date.now() / 2500;
1528
  const r = Math.floor(128 + 127 * Math.sin(time * 0.15));
1529
  const g = Math.floor(128 + 127 * Math.sin(time * 0.25));
1530
  const b = Math.floor(128 + 127 * Math.sin(time * 0.35));
1531
+ updateDynamicColors(r, g, b);
1532
  }
1533
  }
1534
 
1535
  const config = performanceModes[currentPerformanceMode];
1536
+ const interval = Math.max(500, 1000 / config.animationSpeed);
1537
+
1538
+ colorSampleTimer = setInterval(sampleColors, interval);
1539
  }
1540
 
1541
+ function updateDynamicColors(r, g, b){
1542
  const root = document.documentElement;
1543
  const config = performanceModes[currentPerformanceMode];
1544
 
 
1551
  const compG = Math.max(0, 255 - g + intensity * 0.5);
1552
  const compB = Math.max(0, 255 - b + intensity * 0.875);
1553
 
1554
+ root.style.setProperty('--neon-primary', `rgb(${enhancedR}, ${enhancedG}, ${enhancedB})`);
1555
+ root.style.setProperty('--neon-secondary', `rgb(${compR}, ${compG}, ${compB})`);
1556
 
1557
+ currentDominantColor = `rgb(${enhancedR}, ${enhancedG}, ${enhancedB})`;
1558
  }
1559
 
1560
+ function initOptimizedAudioAnalysis(){
1561
  if (!audioEnabled || !audioContext) return;
1562
 
1563
  const video = document.getElementById('player');
 
1573
  const bufferLength = analyser.frequencyBinCount;
1574
  const dataArray = new Uint8Array(bufferLength);
1575
 
1576
+ let visualizerFrame = 0;
1577
+
1578
+ function updateVisualizer(){
1579
  const config = performanceModes[currentPerformanceMode];
1580
+
1581
+ // Throttle updates based on performance mode
1582
+ if(visualizerFrame % Math.max(1, Math.floor(4 / config.animationSpeed)) !== 0) {
1583
+ visualizerFrame++;
1584
+ requestAnimationFrame(updateVisualizer);
1585
  return;
1586
  }
1587
 
 
1592
  const value = dataArray[i] || 0;
1593
  const normalizedValue = value / 255;
1594
  const height = Math.max(8, normalizedValue * 50 * config.effectIntensity);
 
1595
  bar.style.height = height + 'px';
1596
  });
1597
 
1598
+ visualizerFrame++;
1599
+ requestAnimationFrame(updateVisualizer);
1600
  }
1601
 
1602
+ updateVisualizer();
1603
 
1604
  }catch(e){
1605
+ // Fallback to random visualization
1606
  const bars = document.querySelectorAll('.audio-bar');
1607
  bars.forEach(function(bar, i) {
1608
  const config = performanceModes[currentPerformanceMode];
1609
+ const interval = Math.max(100, (120 + Math.random() * 180) / config.animationSpeed);
1610
+
1611
  setInterval(function() {
1612
  const randomHeight = (8 + Math.random() * 40) * config.effectIntensity;
1613
  bar.style.height = randomHeight + 'px';
 
1616
  }
1617
  }
1618
 
1619
+ /* Schedule and Content Management */
1620
  function todaySchedule(){
1621
  const d = utcDayIndex();
1622
  if(d===1 || d===2 || d===3) return { which:'A (Mon-Tue-Wed)', list: SCHEDULE_A };
1623
  return { which:'B (Thu-Fri-Sat-Sun)', list: SCHEDULE_B };
1624
  }
1625
 
1626
+ // Cache DOM elements for better performance
1627
  const $player = document.getElementById('player');
1628
  const $vtitle = document.getElementById('vtitle');
1629
  const $vmeta = document.getElementById('vmeta');
 
1665
  isScheduleVisible = true;
1666
 
1667
  if (autoHideTimer) clearTimeout(autoHideTimer);
1668
+ autoHideTimer = setTimeout(hideSchedule, 6000);
1669
  }
1670
 
1671
  function hideSchedule() {
 
1695
  if (!isMobilePortrait()) return;
1696
  if (e.target.closest('.emoji-btn') || e.target.closest('.bottom-sheet') ||
1697
  e.target.closest('header') || e.target.closest('.info') || e.target.closest('.schedule') ||
1698
+ e.target.closest('.control-panel') || e.target.closest('.mobile-perf-toggle') ||
1699
  e.target.closest('.mobile-perf-panel')) return;
1700
 
1701
  const currentTime = new Date().getTime();
 
1812
  }
1813
 
1814
  setTimeout(function() {
1815
+ initOptimizedColorSampling();
1816
  }, 1000);
1817
  });
1818
 
1819
+ /* OPTIMIZED: Bubble System */
1820
+ let activeBubbles = 0;
1821
+ const maxBubbles = 10;
1822
+
1823
+ function createOptimizedBubble(){
1824
  const config = performanceModes[currentPerformanceMode];
1825
+ if(activeBubbles >= Math.min(maxBubbles, config.particles)) return;
1826
 
1827
  const b = document.createElement('div');
1828
  b.className = 'bubble';
 
1833
  b.style.animationDuration = ((25 + Math.random() * 25) / config.animationSpeed) + 's';
1834
  b.style.opacity = 0.5 * config.effectIntensity;
1835
 
1836
+ activeBubbles++;
1837
  document.getElementById('bubbles').appendChild(b);
1838
+
1839
  setTimeout(function() {
1840
+ if (b.parentNode) {
1841
+ b.remove();
1842
+ activeBubbles--;
1843
+ }
1844
+ }, 40000 / config.animationSpeed);
1845
  }
1846
 
1847
+ /* OPTIMIZED: Live Count System */
1848
  const $liveCount = document.getElementById('live-count');
1849
  const BUCKETS = [
1850
  {start:0,end:6,min:700,max:2000},
 
1883
  initLive();
1884
  liveTimer = setTimeout(tickLive, delay());
1885
 
1886
+ /* OPTIMIZED: Reactions System */
1887
  const EMOJIS = [{key:'heart',sym:'❤️'},{key:'fire',sym:'🔥'},{key:'dancer',sym:'💃'},{key:'spark',sym:'✨'}];
1888
  const STORAGE_PREFIX = 'pro-reactions:';
1889
  function utcDateKey(){ const d=new Date(); return d.getUTCFullYear() + '-' + String(d.getUTCMonth()+1).padStart(2,'0') + '-' + String(d.getUTCDate()).padStart(2,'0'); }
 
1926
  'Today ❤️' + reactionCounts.heart + ' 🔥' + reactionCounts.fire + ' 💃' + reactionCounts.dancer + ' ✨' + reactionCounts.spark;
1927
  }
1928
 
1929
+ /* OPTIMIZED: Particle System */
1930
  let activeParticles = 0;
1931
+ const maxParticles = 15;
1932
+
1933
+ function spawnOptimizedParticles(type, x, y){
1934
  const config = performanceModes[currentPerformanceMode];
1935
+ if(activeParticles > maxParticles * config.effectIntensity) return;
1936
 
1937
  const pane = document.getElementById('panel').getBoundingClientRect();
1938
  const burst = document.createElement('div');
 
1944
  burst.style.filter = 'drop-shadow(0 0 15px ' + currentDominantColor + ')';
1945
  document.getElementById('panel').appendChild(burst);
1946
  activeParticles++;
1947
+
1948
  setTimeout(function(){
1949
+ if (burst.parentNode) {
1950
+ burst.remove();
1951
+ activeParticles--;
1952
+ }
1953
+ }, 1000);
1954
 
1955
+ const particleCount = Math.floor((config.effectIntensity > 0.5 ? 8 : 4) * config.effectIntensity);
1956
  for(let i=0;i<particleCount;i++){
1957
  const p = document.createElement('div');
1958
  p.className='particle';
 
1964
  p.style.filter = 'drop-shadow(0 0 10px ' + currentDominantColor + ')';
1965
  document.getElementById('panel').appendChild(p);
1966
  activeParticles++;
1967
+
1968
  setTimeout(function(){
1969
+ if (p.parentNode) {
1970
+ p.remove();
1971
+ activeParticles--;
1972
+ }
1973
+ }, 2000);
1974
  }
1975
  }
1976
 
 
1986
  reactionCounts[type] = (reactionCounts[type]||0) + 1;
1987
  saveLocalInc(type);
1988
  renderReactions();
1989
+ spawnOptimizedParticles(type, x, y);
1990
+
1991
+ // Optimized animation
1992
+ btn.style.transform = 'scale(1.2) rotateZ(15deg)';
1993
+ setTimeout(() => { btn.style.transform = ''; }, 300);
 
 
 
 
 
1994
  });
1995
  }
1996
  loadReactions();
 
2009
 
2010
  function applyMobileLayout(){
2011
  if(isMobilePortrait()) {
2012
+ setTimeout(showSchedule, 800);
2013
  } else {
2014
  $header.classList.add('visible');
2015
  $info.classList.add('visible');
 
2022
  }
2023
  }
2024
 
2025
+ // OPTIMIZED: Initialize everything with proper cleanup
2026
  document.addEventListener('DOMContentLoaded', function() {
2027
+ // Initialize performance mode system first
2028
  initPerformanceModeSystem();
2029
+
2030
  initSimpleAudioEnable();
2031
  initWelcomeText();
2032
+
2033
  if (!isMobileDevice()) {
2034
+ initOptimizedCursor();
2035
  }
2036
+
2037
  applyMobileLayout();
2038
  window.addEventListener('resize', applyMobileLayout);
2039
 
 
2049
 
2050
  schedulePlay();
2051
 
2052
+ // OPTIMIZED: Performance-aware intervals with cleanup
2053
+ const noteInterval = setInterval(function() {
2054
  const config = performanceModes[currentPerformanceMode];
2055
+ if(Math.random() > (1 - config.effectIntensity * 0.5)) {
2056
+ createOptimizedFloatingNote();
2057
+ }
2058
+ }, 4000);
2059
 
2060
+ const bubbleInterval = setInterval(function() {
2061
  const config = performanceModes[currentPerformanceMode];
2062
+ if(Math.random() > (1 - config.effectIntensity * 0.6)) {
2063
+ createOptimizedBubble();
2064
+ }
2065
+ }, 1500);
2066
 
2067
+ // OPTIMIZED: Performance monitoring with throttling
2068
+ function optimizedPerformanceMonitor() {
2069
  frameCount++;
2070
+
2071
+ // Only update performance check every 60 frames
2072
+ if (frameCount % 60 === 0) {
2073
+ performanceCheck.update();
2074
+ }
2075
+
2076
+ requestAnimationFrame(optimizedPerformanceMonitor);
2077
  }
2078
+ requestAnimationFrame(optimizedPerformanceMonitor);
2079
+
2080
+ // Cleanup on page unload
2081
+ window.addEventListener('beforeunload', function() {
2082
+ clearInterval(noteInterval);
2083
+ clearInterval(bubbleInterval);
2084
+ if (playTimer) clearTimeout(playTimer);
2085
+ if (liveTimer) clearTimeout(liveTimer);
2086
+ if (autoHideTimer) clearTimeout(autoHideTimer);
2087
+ });
2088
  });
2089
 
2090
  </script>
2091
+ </body>
2092
  </html>