Meneman commited on
Commit
341b95e
·
verified ·
1 Parent(s): 1dc1796

undefined - Follow Up Deployment

Browse files
Files changed (1) hide show
  1. index.html +1467 -18
index.html CHANGED
@@ -1,20 +1,1469 @@
1
  <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>My app</title>
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <meta charset="utf-8">
7
- <script src="https://cdn.tailwindcss.com"></script>
8
- </head>
9
- <body class="flex justify-center items-center h-screen overflow-hidden bg-white font-sans text-center px-6">
10
- <div class="w-full">
11
- <span class="text-xs rounded-full mb-2 inline-block px-2 py-1 border border-amber-500/15 bg-amber-500/15 text-amber-500">🔥 New version dropped!</span>
12
- <h1 class="text-4xl lg:text-6xl font-bold font-sans">
13
- <span class="text-2xl lg:text-4xl text-gray-400 block font-medium">I'm ready to work,</span>
14
- Ask me anything.
15
- </h1>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  </div>
17
- <img src="https://enzostvs-deepsite.hf.space/arrow.svg" class="absolute bottom-8 left-0 w-[100px] transform rotate-[30deg]" />
18
- <script></script>
19
- <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>
20
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <!DOCTYPE html>
2
+ <html lang="tr">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
6
+ <title>✨ Belly Dance 24/7 — Professional Streaming Experience ✨</title>
7
+ <style>
8
+ :root{
9
+ --bg1:#0a0a1e;--bg2:#1a1a3e;--bg3:#2a2a5e;--gold:#f5d76e;
10
+ --neon-primary:#ff6b6b;--neon-secondary:#4ecdc4;--magic-purple:#9d4edd;
11
+ --cosmic-blue:#4361ee;--aurora-green:#43aa8b;--sunset-orange:#f77f00;
12
+ }
13
+
14
+ *{box-sizing:border-box;backface-visibility:hidden;perspective:1000px}
15
+
16
+ body{margin:0;color:#f8f8f8;font-family:'Segoe UI',system-ui,-apple-system,Roboto,Arial,sans-serif;
17
+ background:#0a0a1e;overflow-x:hidden;min-height:100vh;position:relative;
18
+ cursor:none;transform:translateZ(0);will-change:auto}
19
+
20
+ /* Optimized Background Effects */
21
+ body::before{content:'';position:fixed;inset:0;z-index:0;
22
+ background:
23
+ radial-gradient(ellipse at 20% 30%, rgba(157,78,221,0.12) 0%, transparent 50%),
24
+ radial-gradient(ellipse at 80% 70%, rgba(67,97,238,0.1) 0%, transparent 50%),
25
+ linear-gradient(135deg, var(--bg1) 0%, var(--bg2) 50%, var(--bg3) 100%);
26
+ animation:optimizedBreathing 12s ease-in-out infinite;transform:translateZ(0)}
27
+ @keyframes optimizedBreathing{0%,100%{opacity:0.8}50%{opacity:1}}
28
+
29
+ .aurora{position:fixed;inset:0;z-index:1;pointer-events:none;
30
+ background:linear-gradient(45deg,
31
+ transparent 0%,rgba(157,78,221,0.08) 25%,transparent 50%,
32
+ rgba(67,97,238,0.06) 75%,transparent 100%);
33
+ background-size:200% 200%;animation:optimizedAurora 16s ease-in-out infinite;
34
+ transform:translateZ(0);will-change:background-position}
35
+ @keyframes optimizedAurora{0%,100%{background-position:0% 0%}50%{background-position:100% 100%}}
36
+
37
+ /* Custom Cursor */
38
+ .cursor{position:fixed;width:16px;height:16px;border-radius:50%;
39
+ background:radial-gradient(circle,rgba(255,107,107,0.7),transparent);
40
+ pointer-events:none;z-index:10000;mix-blend-mode:screen;
41
+ transition:transform 0.08s ease;transform:translateZ(0)}
42
+ .cursor-trail{position:fixed;width:3px;height:3px;border-radius:50%;
43
+ background:rgba(255,107,107,0.5);pointer-events:none;z-index:9999;
44
+ animation:optimizedTrailFade 0.6s ease-out forwards}
45
+ @keyframes optimizedTrailFade{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0)}}
46
+
47
+ /* Floating Elements */
48
+ .music-notes{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
49
+ .note{position:absolute;font-size:20px;color:rgba(255,215,0,0.25);
50
+ animation:optimizedFloatNote 10s linear infinite;transform:translateZ(0)}
51
+ @keyframes optimizedFloatNote{0%{transform:translateY(110vh);opacity:0}
52
+ 15%{opacity:0.5}85%{opacity:0.5}100%{transform:translateY(-10vh);opacity:0}}
53
+
54
+ /* Enhanced Header */
55
+ header{text-align:center;padding:20px 0 8px;transition:all 0.4s ease;
56
+ position:relative;z-index:3;transform:translateZ(0)}
57
+ h1{font-size:clamp(28px,7vw,50px);font-weight:900;margin:0;
58
+ background:linear-gradient(135deg,#ff6b6b 0%,#ffd93d 25%,#4ecdc4 50%,#9d4edd 75%,#ff6b6b 100%);
59
+ background-size:300% 300%;-webkit-background-clip:text;background-clip:text;color:transparent;
60
+ animation:optimizedRainbow 5s ease-in-out infinite;
61
+ filter:drop-shadow(0 0 12px rgba(255,107,107,0.4));
62
+ transform:translateZ(0);will-change:background-position}
63
+ h1:hover{transform:translateZ(0) scale(1.02);transition:transform 0.3s ease}
64
+ @keyframes optimizedRainbow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
65
+
66
+ .sub{font-size:14px;color:rgba(255,255,255,.85);margin-top:8px;
67
+ text-shadow:0 0 8px rgba(255,255,255,0.2)}
68
+ .divider{height:4px;width:120px;margin:15px auto;
69
+ background:linear-gradient(90deg,#ff6b6b,#ffd93d,#4ecdc4,#9d4edd);
70
+ background-size:300% 100%;border-radius:999px;opacity:.9;
71
+ animation:optimizedFlow 3s ease-in-out infinite;
72
+ box-shadow:0 0 8px rgba(255,107,107,0.3);transform:translateZ(0)}
73
+ @keyframes optimizedFlow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
74
+
75
+ /* Enhanced Video Panel */
76
+ .panel{position:relative;margin:16px auto 0;max-width:980px;aspect-ratio:16/9;
77
+ background:rgba(255,255,255,.08);border-radius:24px;overflow:hidden;
78
+ box-shadow:0 12px 40px rgba(0,0,0,.6);z-index:2;
79
+ transform:translateZ(0);transition:transform 0.3s ease}
80
+ .panel:hover{transform:translateZ(0) scale(1.01)}
81
+
82
+ .panel::before{content:'';position:absolute;inset:-4px;border-radius:28px;
83
+ background:conic-gradient(from 0deg,var(--neon-primary),var(--magic-purple),var(--cosmic-blue),var(--aurora-green),var(--neon-primary));
84
+ z-index:-1;animation:optimizedHoloRotate 6s linear infinite;transform:translateZ(0)}
85
+ .panel::after{content:'';position:absolute;inset:-8px;border-radius:32px;
86
+ background:radial-gradient(circle,rgba(255,107,107,0.15),transparent 70%);
87
+ z-index:-2;filter:blur(8px);animation:optimizedHoloGlow 8s ease-in-out infinite;transform:translateZ(0)}
88
+ @keyframes optimizedHoloRotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
89
+ @keyframes optimizedHoloGlow{0%,100%{opacity:0.5}50%{opacity:0.8}}
90
+
91
+ .panel-accents{position:absolute;inset:0;pointer-events:none;z-index:5}
92
+ .corner-accent{position:absolute;width:40px;height:40px;border-radius:50%;
93
+ animation:optimizedCornerPulse 3s ease-in-out infinite;
94
+ filter:blur(1px);transform:translateZ(0)}
95
+ .corner-accent:nth-child(1){top:-20px;left:-20px;animation-delay:0s;background:radial-gradient(circle,#ff6b6b,transparent)}
96
+ .corner-accent:nth-child(2){top:-20px;right:-20px;animation-delay:0.75s;background:radial-gradient(circle,#4ecdc4,transparent)}
97
+ .corner-accent:nth-child(3){bottom:-20px;left:-20px;animation-delay:1.5s;background:radial-gradient(circle,#9d4edd,transparent)}
98
+ .corner-accent:nth-child(4){bottom:-20px;right:-20px;animation-delay:2.25s;background:radial-gradient(circle,#ffd93d,transparent)}
99
+ @keyframes optimizedCornerPulse{0%,100%{transform:scale(0.7);opacity:0.4}50%{transform:scale(1.2);opacity:0.7}}
100
+
101
+ video{width:100%;height:100%;object-fit:cover;background:#000;border-radius:20px;
102
+ transition:filter 0.3s ease;filter:contrast(1.05) saturate(1.1) brightness(1.02);
103
+ transform:translateZ(0)}
104
+
105
+ .chip{position:absolute;bottom:12px;right:12px;padding:8px 12px;border-radius:12px;
106
+ background:rgba(0,0,0,.8);backdrop-filter:blur(10px);font:12px/1.3 'Courier New',monospace;
107
+ color:#fff;z-index:6;border:1px solid rgba(255,107,107,0.3);
108
+ box-shadow:0 4px 15px rgba(0,0,0,0.3);transform:translateZ(0)}
109
+
110
+ /* PROFESSIONAL CONTROL PANEL */
111
+ .control-panel{position:absolute;bottom:15px;left:50%;transform:translateX(-50%);
112
+ display:flex;align-items:center;gap:12px;padding:12px 20px;
113
+ background:rgba(0,0,0,0.85);backdrop-filter:blur(20px);
114
+ border-radius:50px;border:1px solid rgba(255,255,255,0.1);
115
+ box-shadow:0 8px 32px rgba(0,0,0,0.4);z-index:10;
116
+ opacity:0;transform:translateX(-50%) translateY(20px);
117
+ transition:all 0.4s cubic-bezier(0.4, 0, 0.2, 1)}
118
+ .panel:hover .control-panel,.control-panel:hover,.control-panel.active{
119
+ opacity:1;transform:translateX(-50%) translateY(0)}
120
+
121
+ /* ULTIMATE MUTE BUTTON */
122
+ .mute-btn{width:48px;height:48px;border-radius:50%;border:2px solid rgba(255,255,255,0.2);
123
+ background:linear-gradient(135deg,rgba(255,107,107,0.2),rgba(78,205,196,0.2));
124
+ backdrop-filter:blur(15px);display:flex;align-items:center;justify-content:center;
125
+ cursor:pointer;transition:all 0.3s ease;position:relative;overflow:hidden}
126
+ .mute-btn::before{content:'';position:absolute;inset:0;border-radius:50%;
127
+ background:linear-gradient(45deg,var(--neon-primary),var(--neon-secondary));
128
+ opacity:0;transition:opacity 0.3s ease}
129
+ .mute-btn:hover{transform:scale(1.1);border-color:rgba(255,107,107,0.5)}
130
+ .mute-btn:hover::before{opacity:0.1}
131
+ .mute-btn:active{transform:scale(0.95)}
132
+
133
+ .mute-icon{font-size:20px;z-index:1;transition:all 0.3s ease;
134
+ filter:drop-shadow(0 0 8px rgba(255,255,255,0.5))}
135
+ .mute-btn.muted .mute-icon{color:#ff6b6b;filter:drop-shadow(0 0 8px rgba(255,107,107,0.8))}
136
+
137
+ /* VOLUME SLIDER */
138
+ .volume-control{display:flex;align-items:center;gap:8px}
139
+ .volume-slider{width:80px;height:4px;background:rgba(255,255,255,0.2);
140
+ border-radius:2px;position:relative;cursor:pointer;overflow:hidden}
141
+ .volume-fill{height:100%;background:linear-gradient(90deg,var(--neon-primary),var(--neon-secondary));
142
+ border-radius:2px;width:50%;transition:width 0.3s ease;position:relative}
143
+ .volume-fill::after{content:'';position:absolute;right:-6px;top:-4px;
144
+ width:12px;height:12px;background:white;border-radius:50%;
145
+ box-shadow:0 0 8px rgba(255,255,255,0.5)}
146
+
147
+ /* ADDITIONAL CONTROL BUTTONS */
148
+ .control-btn{width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,0.15);
149
+ background:rgba(255,255,255,0.05);backdrop-filter:blur(10px);
150
+ display:flex;align-items:center;justify-content:center;cursor:pointer;
151
+ font-size:16px;transition:all 0.3s ease;color:rgba(255,255,255,0.8)}
152
+ .control-btn:hover{background:rgba(255,255,255,0.1);border-color:rgba(255,107,107,0.4);
153
+ color:white;transform:scale(1.05)}
154
+ .control-btn:active{transform:scale(0.95)}
155
+ .control-btn.active{background:rgba(255,107,107,0.2);border-color:rgba(255,107,107,0.6);color:#ff6b6b}
156
+
157
+ /* THEATER MODE */
158
+ .theater-mode .panel{max-width:100%;margin:0;border-radius:0;height:80vh}
159
+ .theater-mode .panel::before{border-radius:0}
160
+ .theater-mode .panel::after{border-radius:0}
161
+ .theater-mode video{border-radius:0}
162
+
163
+ /* FULLSCREEN STYLES */
164
+ .panel:-webkit-full-screen{max-width:100%;border-radius:0;height:100vh;margin:0}
165
+ .panel:-moz-full-screen{max-width:100%;border-radius:0;height:100vh;margin:0}
166
+ .panel:fullscreen{max-width:100%;border-radius:0;height:100vh;margin:0}
167
+
168
+ /* PROGRESS BAR */
169
+ .progress-bar{position:absolute;bottom:0;left:0;right:0;height:3px;
170
+ background:rgba(255,255,255,0.1);z-index:8}
171
+ .progress-fill{height:100%;background:linear-gradient(90deg,var(--neon-primary),var(--neon-secondary));
172
+ width:0%;transition:width 0.5s ease}
173
+
174
+ /* CONNECTION QUALITY INDICATOR */
175
+ .quality-indicator{position:absolute;top:15px;left:15px;
176
+ padding:6px 12px;border-radius:20px;font-size:11px;font-weight:600;
177
+ backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,0.1);z-index:7}
178
+ .quality-hd{background:rgba(0,255,0,0.2);color:#4ade80;border-color:rgba(76,222,128,0.3)}
179
+ .quality-sd{background:rgba(255,165,0,0.2);color:#fbbf24;border-color:rgba(251,191,36,0.3)}
180
+ .quality-low{background:rgba(255,0,0,0.2);color:#ef4444;border-color:rgba(239,68,68,0.3)}
181
+
182
+ /* KEYBOARD SHORTCUTS OVERLAY */
183
+ .shortcuts-overlay{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);
184
+ background:rgba(0,0,0,0.9);backdrop-filter:blur(20px);
185
+ border-radius:20px;padding:30px;border:1px solid rgba(255,255,255,0.1);
186
+ z-index:11000;opacity:0;pointer-events:none;transition:all 0.4s ease;
187
+ max-width:400px;width:90%}
188
+ .shortcuts-overlay.visible{opacity:1;pointer-events:all}
189
+ .shortcuts-overlay h3{color:var(--gold);text-align:center;margin:0 0 20px;font-size:18px}
190
+ .shortcut-item{display:flex;justify-content:space-between;align-items:center;
191
+ padding:8px 0;border-bottom:1px solid rgba(255,255,255,0.1)}
192
+ .shortcut-key{background:rgba(255,255,255,0.1);padding:4px 8px;border-radius:6px;
193
+ font:12px/1 'Courier New',monospace;color:var(--neon-primary)}
194
+
195
+ /* Info Section */
196
+ .info{text-align:center;margin-top:15px;padding:0 10px;
197
+ transition:all 0.4s ease;position:relative;z-index:2;transform:translateZ(0)}
198
+ .info h2{font-size:clamp(18px,4.5vw,26px);margin:0;
199
+ background:linear-gradient(135deg,#fff1a8,#ffd166,#ff9a9e);
200
+ background-size:200% 200%;-webkit-background-clip:text;background-clip:text;color:transparent;
201
+ font-weight:700;animation:optimizedTitleShimmer 4s ease-in-out infinite;
202
+ text-shadow:0 0 15px rgba(255,209,102,0.3);transform:translateZ(0)}
203
+ @keyframes optimizedTitleShimmer{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
204
+ .info p{margin:8px 0 0;color:rgba(255,255,255,.85);font-size:14px;
205
+ text-shadow:0 0 4px rgba(255,255,255,0.15)}
206
+
207
+ /* Schedule Section */
208
+ .schedule{max-width:760px;margin:20px auto;
209
+ background:rgba(255,255,255,.08);backdrop-filter:blur(15px);
210
+ border-radius:20px;padding:20px;transition:all 0.4s ease;position:relative;z-index:2;
211
+ border:1px solid rgba(255,255,255,0.12);
212
+ box-shadow:0 8px 30px rgba(0,0,0,0.25);transform:translateZ(0)}
213
+
214
+ .schedule h3{margin:0 0 15px;font-size:18px;color:var(--gold);text-align:center;
215
+ text-shadow:0 0 10px rgba(245,215,110,0.5)}
216
+
217
+ .row{display:flex;gap:15px;align-items:flex-start;padding:12px 15px;border-radius:12px;
218
+ font-size:15px;transition:all 0.3s ease;position:relative;overflow:hidden;
219
+ cursor:pointer;transform:translateZ(0)}
220
+ .row::before{content:'';position:absolute;left:0;top:0;bottom:0;width:0;
221
+ background:linear-gradient(90deg,rgba(255,107,107,0.12),rgba(78,205,196,0.12));
222
+ transition:width 0.3s ease;transform:translateZ(0)}
223
+ .row:hover::before{width:100%}
224
+ .row:hover{transform:translateX(4px)}
225
+
226
+ .row .time{width:130px;color:#ffd166;font:14px/1.4 'Courier New',monospace;position:relative;z-index:1;
227
+ text-shadow:0 0 6px rgba(255,209,102,0.3)}
228
+ .row .name{position:relative;z-index:1;font-weight:500}
229
+ .row.active{
230
+ background:linear-gradient(90deg,rgba(255,107,107,.1),rgba(78,205,196,.1));
231
+ border-left:4px solid #ff6b6b;box-shadow:0 4px 15px rgba(255,107,107,0.2);
232
+ transform:translateX(6px)}
233
+ .row.active::after{content:'✨';position:absolute;right:15px;top:50%;transform:translateY(-50%);
234
+ font-size:16px;animation:optimizedSparkle 1.5s ease-in-out infinite}
235
+ @keyframes optimizedSparkle{0%,100%{opacity:0.6}50%{opacity:1}}
236
+
237
+ footer{text-align:center;color:rgba(255,255,255,.75);font-size:13px;padding:20px;
238
+ position:relative;z-index:2;text-shadow:0 0 4px rgba(255,255,255,0.15)}
239
+
240
+ /* Enhanced Badges */
241
+ .live-badge{position:fixed;top:15px;right:15px;z-index:9999;display:inline-flex;align-items:center;gap:8px;
242
+ padding:10px 15px;border-radius:25px;
243
+ background:rgba(0,0,0,0.8);backdrop-filter:blur(15px);border:1px solid rgba(255,107,107,.4);
244
+ color:#ff6b6b;font-weight:600;font-size:14px;
245
+ box-shadow:0 4px 20px rgba(255,107,107,0.3);
246
+ animation:optimizedLivePulse 2.5s ease-in-out infinite;transform:translateZ(0)}
247
+ @keyframes optimizedLivePulse{0%,100%{box-shadow:0 4px 20px rgba(255,107,107,0.3)}50%{box-shadow:0 6px 25px rgba(255,107,107,0.5)}}
248
+
249
+ .dot{width:8px;height:8px;border-radius:50%;background:#ff3b3b;
250
+ box-shadow:0 0 10px rgba(255,59,59,.8);
251
+ animation:optimizedDotPulse 1.8s ease-in-out infinite;transform:translateZ(0)}
252
+ @keyframes optimizedDotPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.2)}}
253
+
254
+ .reactions-badge{position:fixed;top:15px;left:15px;z-index:9999;padding:10px 15px;border-radius:25px;
255
+ background:rgba(0,0,0,0.8);backdrop-filter:blur(15px);border:1px solid rgba(78,205,196,.4);
256
+ color:#4ecdc4;font-weight:600;font-size:14px;display:inline-flex;gap:10px;align-items:center;
257
+ box-shadow:0 4px 20px rgba(78,205,196,0.3);transform:translateZ(0)}
258
+
259
+ /* Enhanced Emoji Panel */
260
+ .emoji-panel{position:absolute;right:15px;bottom:90px;z-index:6;display:flex;flex-direction:column;gap:15px}
261
+ .emoji-btn{width:50px;height:50px;border-radius:50%;border:2px solid rgba(255,255,255,.3);
262
+ background:rgba(0,0,0,.6);backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;
263
+ font-size:24px;cursor:pointer;transition:all 0.25s ease;
264
+ box-shadow:0 4px 15px rgba(0,0,0,0.3);transform:translateZ(0)}
265
+ .emoji-btn:hover{transform:scale(1.08);
266
+ box-shadow:0 6px 20px rgba(255,107,107,0.35);border-color:rgba(255,107,107,0.5)}
267
+ .emoji-btn:active{transform:scale(0.95)}
268
+
269
+ .emoji-count{position:absolute;right:68px;min-width:60px;height:32px;padding:0 12px;border-radius:16px;
270
+ display:flex;align-items:center;justify-content:center;
271
+ background:rgba(0,0,0,.7);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);
272
+ font:12px/1.3 'Courier New',monospace;color:#fff;
273
+ box-shadow:0 4px 15px rgba(0,0,0,0.3);transform:translateZ(0)}
274
+
275
+ /* Optimized Particles */
276
+ .particle{position:absolute;pointer-events:none;z-index:8;font-size:22px;
277
+ animation:optimizedFloatUp 1.5s ease-out forwards;transform:translateZ(0)}
278
+ @keyframes optimizedFloatUp{
279
+ 0%{transform:translateY(0) scale(0.7);opacity:0}
280
+ 20%{opacity:1}
281
+ 100%{transform:translateY(-150px) scale(1.3);opacity:0}
282
+ }
283
+
284
+ .burst{position:absolute;pointer-events:none;z-index:8;
285
+ animation:optimizedBurst 0.8s ease-out forwards;transform:translateZ(0)}
286
+ @keyframes optimizedBurst{
287
+ 0%{transform:scale(.3);opacity:0}
288
+ 60%{transform:scale(1.1);opacity:1}
289
+ 100%{transform:scale(1.3);opacity:0}
290
+ }
291
+
292
+ /* Bubbles */
293
+ #bubbles{position:fixed;inset:0;overflow:hidden;z-index:1;pointer-events:none}
294
+ .bubble{position:absolute;bottom:-100px;border-radius:50%;
295
+ background:linear-gradient(45deg,rgba(255,255,255,.08),rgba(255,107,107,.06));
296
+ animation:optimizedRise linear infinite;
297
+ box-shadow:inset 0 0 15px rgba(255,255,255,0.1);transform:translateZ(0)}
298
+ @keyframes optimizedRise{
299
+ 0%{transform:translateY(0) scale(1);opacity:.4}
300
+ 50%{opacity:.7}
301
+ 100%{transform:translateY(-120vh) scale(1.2);opacity:0}
302
+ }
303
+
304
+ /* Welcome Text */
305
+ .welcome-neon{position:fixed;top:50%;left:50%;transform:translate(-50%, -50%);
306
+ z-index:10000;font-size:clamp(32px,8vw,60px);font-weight:900;
307
+ background:linear-gradient(45deg,#ff6b6b,#ffd93d,#6bcf7f,#4d96ff,#9c88ff,#ff6b6b);
308
+ background-size:400% 400%;-webkit-background-clip:text;background-clip:text;color:transparent;
309
+ animation:optimizedNeonFlow 3s ease-in-out, optimizedFadeOut 4s ease-in-out forwards;
310
+ text-shadow:0 0 25px rgba(255,107,107,0.6);pointer-events:none;opacity:1;
311
+ filter:drop-shadow(0 0 20px rgba(255,107,107,0.4));transform-origin:center}
312
+ @keyframes optimizedNeonFlow{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
313
+ @keyframes optimizedFadeOut{
314
+ 0%{opacity:1;transform:translate(-50%, -50%) scale(1)}
315
+ 70%{opacity:1;transform:translate(-50%, -50%) scale(1.05)}
316
+ 100%{opacity:0;transform:translate(-50%, -50%) scale(0.9)}
317
+ }
318
+
319
+ /* Audio Visualizer */
320
+ .audio-visualizer{position:absolute;bottom:25px;left:25px;display:flex;gap:3px;z-index:6}
321
+ .audio-bar{width:4px;border-radius:2px;background:linear-gradient(180deg,#ff6b6b,#4ecdc4);
322
+ animation:optimizedAudioVisualize 1s ease-in-out infinite;transform:translateZ(0)}
323
+ .audio-bar:nth-child(1){height:20px;animation-delay:0s}
324
+ .audio-bar:nth-child(2){height:30px;animation-delay:0.1s}
325
+ .audio-bar:nth-child(3){height:40px;animation-delay:0.2s}
326
+ .audio-bar:nth-child(4){height:50px;animation-delay:0.3s}
327
+ .audio-bar:nth-child(5){height:40px;animation-delay:0.4s}
328
+ .audio-bar:nth-child(6){height:30px;animation-delay:0.5s}
329
+ @keyframes optimizedAudioVisualize{0%,100%{transform:scaleY(0.3)}50%{transform:scaleY(1.1)}}
330
+
331
+ /* MOBILE RESPONSIVE CONTROLS */
332
+ @media (max-width:768px) and (orientation:portrait){
333
+ body{cursor:auto}
334
+ header{padding:15px 0 0;transform:translateY(-100%);opacity:0}
335
+ header.visible{transform:translateY(0);opacity:1}
336
+ .divider{display:none}
337
+ .panel{margin:0;max-width:none;border-radius:0;aspect-ratio:auto;position:fixed;inset:0 0 auto 0;height:100vh;border:none}
338
+ .panel::before{inset:-2px;border-radius:0}
339
+ .panel::after{inset:-4px;border-radius:0}
340
+ .panel:hover{transform:none}
341
+ video{border-radius:0}
342
+ h1:hover{transform:none}
343
+
344
+ /* Mobile Control Panel */
345
+ .control-panel{bottom:20px;gap:8px;padding:8px 16px;opacity:1;transform:translateX(-50%) translateY(0)}
346
+ .mute-btn{width:44px;height:44px}
347
+ .mute-icon{font-size:18px}
348
+ .volume-slider{width:60px}
349
+ .control-btn{width:36px;height:36px;font-size:14px}
350
+
351
+ .info,.schedule{position:relative;margin:0;border-radius:18px 18px 0 0;transform:translateY(-100%);opacity:0}
352
+ .info.visible,.schedule.visible{transform:translateY(0);opacity:1}
353
+
354
+ .bottom-sheet{position:fixed;left:0;right:0;bottom:0;z-index:8;
355
+ background:rgba(0,0,0,.85);backdrop-filter:blur(20px);
356
+ border-top:1px solid rgba(255,107,107,.3);
357
+ max-height:42vh;overflow:auto;padding:12px;
358
+ transform:translateY(100%);transition:transform 0.4s ease;
359
+ border-radius:20px 20px 0 0;
360
+ box-shadow:0 -4px 20px rgba(0,0,0,0.3)}
361
+ .bottom-sheet.visible{transform:translateY(0)}
362
+
363
+ .bottom-sheet .schedule{margin:8px 0;padding:12px;font-size:13px;
364
+ background:rgba(255,255,255,.1);transform:none;opacity:1;border-radius:12px}
365
+ .bottom-sheet .schedule h3{font-size:15px;margin:0 0 10px}
366
+ .bottom-sheet .row{padding:8px 12px;font-size:12px;line-height:1.4}
367
+ .bottom-sheet .row .time{width:85px;font-size:11px}
368
+ .bottom-sheet .row .name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
369
+ .bottom-sheet .info h2{font-size:16px;margin:0 0 5px}
370
+ .bottom-sheet .info p{font-size:12px;margin:0}
371
+
372
+ main{padding-bottom:0}
373
+ .emoji-panel{right:12px;bottom:140px}
374
+ .emoji-btn{width:55px;height:55px;font-size:26px}
375
+ .emoji-count{right:75px}
376
+ .live-badge{top:12px;right:12px}
377
+ .reactions-badge{top:12px;left:12px}
378
+ .chip{bottom:80px;right:18px}
379
+
380
+ .auto-hide-indicator{position:fixed;bottom:12px;left:50%;transform:translateX(-50%);
381
+ background:rgba(0,0,0,.8);color:rgba(255,255,255,.9);
382
+ padding:8px 18px;border-radius:18px;font-size:12px;z-index:9999;
383
+ opacity:0;transition:opacity 0.3s ease;backdrop-filter:blur(15px);
384
+ border:1px solid rgba(255,107,107,0.3);
385
+ box-shadow:0 4px 15px rgba(0,0,0,0.3)}
386
+ .auto-hide-indicator.visible{opacity:1}
387
+
388
+ .cursor,.cursor-trail{display:none}
389
+ }
390
+
391
+ @media (min-width:769px) {
392
+ .bottom-sheet{display:none !important}
393
+ .auto-hide-indicator{display:none !important}
394
+ }
395
+
396
+ /* Performance Mode */
397
+ .low-performance *{animation-duration:3s !important}
398
+ .low-performance .aurora{opacity:0.3}
399
+ .low-performance .music-notes{display:none}
400
+ .low-performance .corner-accent{display:none}
401
+
402
+ @media (prefers-reduced-motion: reduce) {
403
+ *{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important}
404
+ .aurora,.music-notes,.corner-accent{display:none}
405
+ }
406
+ </style>
407
+ </head>
408
+ <body>
409
+
410
+ <div class="aurora"></div>
411
+ <div class="cursor" id="cursor"></div>
412
+ <div class="music-notes" id="music-notes"></div>
413
+
414
+ <div class="live-badge"><span class="dot"></span><span>LIVE:</span><strong id="live-count">—</strong><span>Watching</span></div>
415
+ <div class="reactions-badge" id="today-reactions">Today ❤️0 🔥0 💃0 ✨0</div>
416
+ <div id="bubbles"></div>
417
+
418
+ <!-- Keyboard Shortcuts Overlay -->
419
+ <div class="shortcuts-overlay" id="shortcuts-overlay">
420
+ <h3>⌨️ Keyboard Shortcuts</h3>
421
+ <div class="shortcut-item">
422
+ <span>Mute/Unmute</span>
423
+ <span class="shortcut-key">M</span>
424
  </div>
425
+ <div class="shortcut-item">
426
+ <span>Volume Up</span>
427
+ <span class="shortcut-key">↑</span>
428
+ </div>
429
+ <div class="shortcut-item">
430
+ <span>Volume Down</span>
431
+ <span class="shortcut-key">↓</span>
432
+ </div>
433
+ <div class="shortcut-item">
434
+ <span>Fullscreen</span>
435
+ <span class="shortcut-key">F</span>
436
+ </div>
437
+ <div class="shortcut-item">
438
+ <span>Theater Mode</span>
439
+ <span class="shortcut-key">T</span>
440
+ </div>
441
+ <div class="shortcut-item">
442
+ <span>Picture-in-Picture</span>
443
+ <span class="shortcut-key">P</span>
444
+ </div>
445
+ <div class="shortcut-item">
446
+ <span>Show Shortcuts</span>
447
+ <span class="shortcut-key">?</span>
448
+ </div>
449
+ </div>
450
+
451
+ <div class="welcome-neon" id="welcome-neon">✨ Welcome to Professional Experience ✨</div>
452
+
453
+ <header id="main-header">
454
+ <h1>✨ Belly Dance 24/7 ✨</h1>
455
+ <div id="header-time" class="sub">—</div>
456
+ <div class="divider"></div>
457
+ </header>
458
+
459
+ <main>
460
+ <section class="panel" id="panel">
461
+ <canvas id="color-canvas"></canvas>
462
+ <div class="panel-accents">
463
+ <div class="corner-accent"></div>
464
+ <div class="corner-accent"></div>
465
+ <div class="corner-accent"></div>
466
+ <div class="corner-accent"></div>
467
+ </div>
468
+
469
+ <!-- Progress Bar -->
470
+ <div class="progress-bar">
471
+ <div class="progress-fill" id="progress-fill"></div>
472
+ </div>
473
+
474
+ <!-- Quality Indicator -->
475
+ <div class="quality-indicator quality-hd" id="quality-indicator">HD</div>
476
+
477
+ <video id="player" autoplay muted playsinline crossorigin="anonymous"></video>
478
+ <div id="chip" class="chip"></div>
479
+
480
+ <!-- PROFESSIONAL CONTROL PANEL -->
481
+ <div class="control-panel" id="control-panel">
482
+ <!-- Ultimate Mute Button -->
483
+ <div class="mute-btn" id="mute-btn" title="Mute/Unmute (M)">
484
+ <span class="mute-icon" id="mute-icon">🔊</span>
485
+ </div>
486
+
487
+ <!-- Volume Control -->
488
+ <div class="volume-control">
489
+ <div class="volume-slider" id="volume-slider" title="Volume">
490
+ <div class="volume-fill" id="volume-fill"></div>
491
+ </div>
492
+ </div>
493
+
494
+ <!-- Theater Mode -->
495
+ <div class="control-btn" id="theater-btn" title="Theater Mode (T)">🎭</div>
496
+
497
+ <!-- Fullscreen -->
498
+ <div class="control-btn" id="fullscreen-btn" title="Fullscreen (F)">⛶</div>
499
+
500
+ <!-- Picture-in-Picture -->
501
+ <div class="control-btn" id="pip-btn" title="Picture-in-Picture (P)">📱</div>
502
+
503
+ <!-- Shortcuts Help -->
504
+ <div class="control-btn" id="shortcuts-btn" title="Keyboard Shortcuts (?)">⌨️</div>
505
+ </div>
506
+
507
+ <!-- Audio Visualizer -->
508
+ <div class="audio-visualizer" id="audio-visualizer">
509
+ <div class="audio-bar"></div>
510
+ <div class="audio-bar"></div>
511
+ <div class="audio-bar"></div>
512
+ <div class="audio-bar"></div>
513
+ <div class="audio-bar"></div>
514
+ <div class="audio-bar"></div>
515
+ </div>
516
+
517
+ <div class="emoji-panel" id="emoji-panel">
518
+ <div class="emoji-wrap">
519
+ <button class="emoji-btn" data-type="heart" aria-label="Heart">❤️</button>
520
+ <div class="emoji-count" id="count-heart">0</div>
521
+ </div>
522
+ <div class="emoji-wrap">
523
+ <button class="emoji-btn" data-type="fire" aria-label="Fire">🔥</button>
524
+ <div class="emoji-count" id="count-fire">0</div>
525
+ </div>
526
+ <div class="emoji-wrap">
527
+ <button class="emoji-btn" data-type="dancer" aria-label="Dancer">💃</button>
528
+ <div class="emoji-count" id="count-dancer">0</div>
529
+ </div>
530
+ <div class="emoji-wrap">
531
+ <button class="emoji-btn" data-type="spark" aria-label="Sparkles">✨</button>
532
+ <div class="emoji-count" id="count-spark">0</div>
533
+ </div>
534
+ </div>
535
+ </section>
536
+
537
+ <section class="info" id="main-info">
538
+ <h2 id="vtitle">—</h2>
539
+ <p id="vmeta">—</p>
540
+ </section>
541
+
542
+ <section class="schedule" id="main-schedule">
543
+ <h3 id="schedule-title">✨ Global Schedule (UTC) — Today</h3>
544
+ <div id="rows"></div>
545
+ </section>
546
+
547
+ <section class="bottom-sheet" id="bottom-sheet">
548
+ <div class="info">
549
+ <h2 id="vtitle2">—</h2>
550
+ <p id="vmeta2">—</p>
551
+ </div>
552
+ <div class="schedule" style="margin-top:10px;">
553
+ <h3>Schedule</h3>
554
+ <div id="rows2"></div>
555
+ </div>
556
+ </section>
557
+
558
+ <div class="auto-hide-indicator" id="auto-hide-indicator">✨ Double-tap to show schedule ✨</div>
559
+
560
+ </main>
561
+
562
+ <footer>✨ Pre-recorded performances looped 24/7 (Global UTC) ✨</footer>
563
+
564
+ <script>
565
+ /* ============= PROFESSIONAL STREAMING INTERFACE ============= */
566
+ const USE_UTC = true;
567
+ let currentDominantColor = '#ff6b6b';
568
+ let audioContext = null;
569
+ let analyser = null;
570
+ let mouseX = 0, mouseY = 0;
571
+ let performanceMode = false;
572
+ let maxFloatingElements = 8;
573
+ let frameCount = 0;
574
+ let isTheaterMode = false;
575
+ let isControlPanelVisible = false;
576
+
577
+ // Professional Controls State
578
+ let isMuted = false;
579
+ let currentVolume = 0.5;
580
+ let isFullscreen = false;
581
+ let isPictureInPicture = false;
582
+
583
+ /* Performance Detection */
584
+ const performanceCheck = {
585
+ fps: 60,
586
+ lastFrameTime: performance.now(),
587
+ frameCount: 0,
588
+
589
+ update() {
590
+ const currentTime = performance.now();
591
+ this.frameCount++;
592
+
593
+ if (this.frameCount % 60 === 0) {
594
+ this.fps = 1000 / (currentTime - this.lastFrameTime) * 60;
595
+
596
+ if (this.fps < 30 && !performanceMode) {
597
+ performanceMode = true;
598
+ document.body.classList.add('low-performance');
599
+ maxFloatingElements = 3;
600
+ console.log('Performance mode activated');
601
+ } else if (this.fps > 50 && performanceMode) {
602
+ performanceMode = false;
603
+ document.body.classList.remove('low-performance');
604
+ maxFloatingElements = 8;
605
+ }
606
+
607
+ this.lastFrameTime = currentTime;
608
+ }
609
+ }
610
+ };
611
+
612
+ /* Schedules */
613
+ const SCHEDULE_A = [
614
+ { 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 },
615
+ { 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 },
616
+ { title:"✨Belly dance ✨ Let my dance and my magic work on you", url:"https://ik.imagekit.io/plerqlkuh/%E2%9C%A8Belly%20dance%E2%9C%A8%20Let%20my%20dance%20and%20my%20magic%20work%20on%20you.mp4", duration:281, start:5.333, end:8 },
617
+ { title:"Feast of Hathor", url:"https://ik.imagekit.io/hml9etthq/Feast%20of%20Hathor.mp4", duration:208, start:8, end:10.667 },
618
+ { title:"Belly dance - classic dance", url:"https://ik.imagekit.io/ef7bcvglu/Belly%20dance%20-%20classic%20dance.mp4", duration:252, start:10.667, end:13.333 },
619
+ { title:"Belly dance - christmas gift", url:"https://ia600904.us.archive.org/28/items/belly-dance-christmas-gift/Belly%20dance%20-%20christmas%20gift.mp4", duration:399, start:13.333, end:16 },
620
+ { title:"Freestyle bellydancing by Lisa Walser", url:"https://ik.imagekit.io/vncybr8i6/Freestyle%20bellydancing%20by%20Lisa%20Walser.mp4", duration:399, start:16, end:18.667 },
621
+ { title:"Belly dance - belly waves", url:"https://ik.imagekit.io/ef7bcvglu/Belly%20dance%20-%20belly%20waves.mp4", duration:60, start:18.667, end:21.333 },
622
+ { title:"Belly dance - calm dance", url:"https://ik.imagekit.io/suedm9ysj/Belly%20dance%20-%20calm%20dance.mp4", duration:166, start:21.333, end:24 }
623
+ ];
624
+
625
+ const SCHEDULE_B = [
626
+ { title:"✨ Belly dance ✨ - unholy", url:"https://ik.imagekit.io/wgn4o7zwre/%E2%9C%A8%20Belly%20dance%20%E2%9C%A8%20-%20%20unholy.mp4", duration:155, start:21, end:23.583 },
627
+ { title:"Belly dance - Memories of the year 2023", url:"https://ik.imagekit.io/wgn4o7zwre/Belly%20dance%20-%20Memories%20of%20the%20year%202023.mp4", duration:113, start:23.583, end:1.467 },
628
+ { title:"❄️ Belly dance❄️ - 🎁 surprise🎁 (special part two)", url:"https://ia601701.us.archive.org/31/items/belly-dancee-surprises-christmas-special-part-two/%E2%9D%84%EF%B8%8F%20Belly%20dance%E2%9D%84%EF%B8%8F%20%20-%20%20%F0%9F%8E%81%20surprise%F0%9F%8E%81_%20%20%20%20christmas%20-%20special%20part%20two.mp4", duration:281, start:1.467, end:6.15 },
629
+ { title:"✨Belly dance✨ - Belly dance for Cleopatra⛲🕌🌴", url:"https://ik.imagekit.io/ef7bcvglu/%E2%9C%A8Belly%20dance%E2%9C%A8%20%20-%20%20Belly%20dance%20for%20Cleopatra%E2%9B%B2__.mp4", duration:528, start:6.15, end:15 },
630
+ { title:"Desert wind...", url:"https://ik.imagekit.io/suedm9ysj/Desert%20wind....mp4", duration:252, start:15, end:18 },
631
+ { title:"✨Belly dance ✨ - summer dance 🏝️🏜️🌅", url:"https://ucarecdn.com/c143859d-b2d6-47f7-b7bc-ccfe80a97574/", duration:399, start:18, end:19.1 },
632
+ { title:"Belly dance with ocean wave - dress 🌊", url:"https://ucarecdn.com/7ccd7db7-6956-46d3-aee3-0a4f216ff2b6/", duration:399, start:19.1, end:20.567 },
633
+ { title:"Bellydance at new year✨", url:"https://ik.imagekit.io/b3mprpaei/Bellydance%20at%20new%20year%E2%9C%A8.mp4", duration:60, start:20.567, end:21 },
634
+ { 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 }
635
+ ];
636
+
637
+ /* Utilities */
638
+ function nowHour(){
639
+ const n=new Date();
640
+ return USE_UTC ? n.getUTCHours() + n.getUTCMinutes()/60 + n.getUTCSeconds()/3600
641
+ : n.getHours() + n.getMinutes()/60 + n.getSeconds()/3600;
642
+ }
643
+ function utcDayIndex(){ return (new Date()).getUTCDay(); }
644
+ function secFmt(s){return `${Math.floor(s/60)}:${String(s%60).padStart(2,'0')}`;}
645
+ function clamp(n,min,max){return Math.max(min,Math.min(max,n));}
646
+
647
+ /* ================ PROFESSIONAL CONTROL SYSTEM ================ */
648
+
649
+ // Mute Button Control
650
+ function initMuteControl() {
651
+ const muteBtn = document.getElementById('mute-btn');
652
+ const muteIcon = document.getElementById('mute-icon');
653
+ const player = document.getElementById('player');
654
+
655
+ muteBtn.addEventListener('click', toggleMute);
656
+
657
+ function toggleMute() {
658
+ isMuted = !isMuted;
659
+ player.muted = isMuted;
660
+
661
+ if (isMuted) {
662
+ muteIcon.textContent = '🔇';
663
+ muteBtn.classList.add('muted');
664
+ } else {
665
+ muteIcon.textContent = '🔊';
666
+ muteBtn.classList.remove('muted');
667
+ }
668
+
669
+ // Visual feedback
670
+ muteBtn.animate([
671
+ {transform: 'scale(1)'},
672
+ {transform: 'scale(1.2)'},
673
+ {transform: 'scale(1)'}
674
+ ], {duration: 200});
675
+ }
676
+ }
677
+
678
+ // Volume Control
679
+ function initVolumeControl() {
680
+ const volumeSlider = document.getElementById('volume-slider');
681
+ const volumeFill = document.getElementById('volume-fill');
682
+ const player = document.getElementById('player');
683
+
684
+ volumeSlider.addEventListener('click', (e) => {
685
+ const rect = volumeSlider.getBoundingClientRect();
686
+ const percent = (e.clientX - rect.left) / rect.width;
687
+ currentVolume = clamp(percent, 0, 1);
688
+
689
+ player.volume = currentVolume;
690
+ volumeFill.style.width = (currentVolume * 100) + '%';
691
+
692
+ // Update mute state
693
+ if (currentVolume === 0 && !isMuted) {
694
+ document.getElementById('mute-btn').click();
695
+ } else if (currentVolume > 0 && isMuted) {
696
+ document.getElementById('mute-btn').click();
697
+ }
698
+ });
699
+
700
+ // Initialize volume
701
+ player.volume = currentVolume;
702
+ volumeFill.style.width = (currentVolume * 100) + '%';
703
+ }
704
+
705
+ // Theater Mode
706
+ function initTheaterMode() {
707
+ const theaterBtn = document.getElementById('theater-btn');
708
+
709
+ theaterBtn.addEventListener('click', () => {
710
+ isTheaterMode = !isTheaterMode;
711
+ document.body.classList.toggle('theater-mode', isTheaterMode);
712
+ theaterBtn.classList.toggle('active', isTheaterMode);
713
+
714
+ theaterBtn.animate([
715
+ {transform: 'rotateY(0deg)'},
716
+ {transform: 'rotateY(180deg)'},
717
+ {transform: 'rotateY(0deg)'}
718
+ ], {duration: 400});
719
+ });
720
+ }
721
+
722
+ // Fullscreen Control
723
+ function initFullscreenControl() {
724
+ const fullscreenBtn = document.getElementById('fullscreen-btn');
725
+ const panel = document.getElementById('panel');
726
+
727
+ fullscreenBtn.addEventListener('click', toggleFullscreen);
728
+
729
+ function toggleFullscreen() {
730
+ if (!document.fullscreenElement) {
731
+ panel.requestFullscreen().then(() => {
732
+ isFullscreen = true;
733
+ fullscreenBtn.classList.add('active');
734
+ fullscreenBtn.textContent = '⛶';
735
+ }).catch(console.error);
736
+ } else {
737
+ document.exitFullscreen().then(() => {
738
+ isFullscreen = false;
739
+ fullscreenBtn.classList.remove('active');
740
+ fullscreenBtn.textContent = '⛶';
741
+ }).catch(console.error);
742
+ }
743
+ }
744
+
745
+ // Listen for fullscreen changes
746
+ document.addEventListener('fullscreenchange', () => {
747
+ isFullscreen = !!document.fullscreenElement;
748
+ fullscreenBtn.classList.toggle('active', isFullscreen);
749
+ });
750
+ }
751
+
752
+ // Picture-in-Picture Control
753
+ function initPictureInPictureControl() {
754
+ const pipBtn = document.getElementById('pip-btn');
755
+ const player = document.getElementById('player');
756
+
757
+ pipBtn.addEventListener('click', async () => {
758
+ try {
759
+ if (document.pictureInPictureElement) {
760
+ await document.exitPictureInPicture();
761
+ } else {
762
+ await player.requestPictureInPicture();
763
+ }
764
+ } catch (error) {
765
+ console.log('Picture-in-Picture not supported');
766
+ }
767
+ });
768
+
769
+ player.addEventListener('enterpictureinpicture', () => {
770
+ isPictureInPicture = true;
771
+ pipBtn.classList.add('active');
772
+ });
773
+
774
+ player.addEventListener('leavepictureinpicture', () => {
775
+ isPictureInPicture = false;
776
+ pipBtn.classList.remove('active');
777
+ });
778
+ }
779
+
780
+ // Keyboard Shortcuts
781
+ function initKeyboardShortcuts() {
782
+ const shortcutsBtn = document.getElementById('shortcuts-btn');
783
+ const shortcutsOverlay = document.getElementById('shortcuts-overlay');
784
+
785
+ shortcutsBtn.addEventListener('click', () => {
786
+ shortcutsOverlay.classList.toggle('visible');
787
+ });
788
+
789
+ // Close on click outside
790
+ shortcutsOverlay.addEventListener('click', (e) => {
791
+ if (e.target === shortcutsOverlay) {
792
+ shortcutsOverlay.classList.remove('visible');
793
+ }
794
+ });
795
+
796
+ // Keyboard shortcuts
797
+ document.addEventListener('keydown', (e) => {
798
+ switch(e.key.toLowerCase()) {
799
+ case 'm':
800
+ document.getElementById('mute-btn').click();
801
+ break;
802
+ case 'f':
803
+ document.getElementById('fullscreen-btn').click();
804
+ break;
805
+ case 't':
806
+ document.getElementById('theater-btn').click();
807
+ break;
808
+ case 'p':
809
+ document.getElementById('pip-btn').click();
810
+ break;
811
+ case 'arrowup':
812
+ e.preventDefault();
813
+ currentVolume = clamp(currentVolume + 0.1, 0, 1);
814
+ document.getElementById('player').volume = currentVolume;
815
+ document.getElementById('volume-fill').style.width = (currentVolume * 100) + '%';
816
+ break;
817
+ case 'arrowdown':
818
+ e.preventDefault();
819
+ currentVolume = clamp(currentVolume - 0.1, 0, 1);
820
+ document.getElementById('player').volume = currentVolume;
821
+ document.getElementById('volume-fill').style.width = (currentVolume * 100) + '%';
822
+ break;
823
+ case '?':
824
+ shortcutsOverlay.classList.toggle('visible');
825
+ break;
826
+ }
827
+ });
828
+ }
829
+
830
+ // Control Panel Visibility
831
+ function initControlPanelVisibility() {
832
+ const panel = document.getElementById('panel');
833
+ const controlPanel = document.getElementById('control-panel');
834
+
835
+ let hideTimer = null;
836
+
837
+ function showControls() {
838
+ controlPanel.classList.add('active');
839
+ isControlPanelVisible = true;
840
+
841
+ if (hideTimer) clearTimeout(hideTimer);
842
+ hideTimer = setTimeout(() => {
843
+ if (!controlPanel.matches(':hover')) {
844
+ controlPanel.classList.remove('active');
845
+ isControlPanelVisible = false;
846
+ }
847
+ }, 3000);
848
+ }
849
+
850
+ panel.addEventListener('mousemove', showControls);
851
+ panel.addEventListener('touchstart', showControls);
852
+
853
+ controlPanel.addEventListener('mouseenter', () => {
854
+ if (hideTimer) clearTimeout(hideTimer);
855
+ });
856
+
857
+ controlPanel.addEventListener('mouseleave', () => {
858
+ hideTimer = setTimeout(() => {
859
+ controlPanel.classList.remove('active');
860
+ isControlPanelVisible = false;
861
+ }, 1000);
862
+ });
863
+ }
864
+
865
+ // Progress Bar
866
+ function initProgressBar() {
867
+ const progressFill = document.getElementById('progress-fill');
868
+ const player = document.getElementById('player');
869
+
870
+ function updateProgress() {
871
+ if (player.duration) {
872
+ const progress = (player.currentTime / player.duration) * 100;
873
+ progressFill.style.width = progress + '%';
874
+ }
875
+ }
876
+
877
+ player.addEventListener('timeupdate', updateProgress);
878
+ }
879
+
880
+ // Quality Indicator
881
+ function initQualityIndicator() {
882
+ const qualityIndicator = document.getElementById('quality-indicator');
883
+ const player = document.getElementById('player');
884
+
885
+ player.addEventListener('loadedmetadata', () => {
886
+ const height = player.videoHeight;
887
+
888
+ if (height >= 720) {
889
+ qualityIndicator.textContent = 'HD';
890
+ qualityIndicator.className = 'quality-indicator quality-hd';
891
+ } else if (height >= 480) {
892
+ qualityIndicator.textContent = 'SD';
893
+ qualityIndicator.className = 'quality-indicator quality-sd';
894
+ } else {
895
+ qualityIndicator.textContent = 'LOW';
896
+ qualityIndicator.className = 'quality-indicator quality-low';
897
+ }
898
+ });
899
+ }
900
+
901
+ /* ================ EXISTING OPTIMIZED FUNCTIONS ================ */
902
+ function initOptimizedCursor(){
903
+ const cursor = document.getElementById('cursor');
904
+ let trailCount = 0;
905
+
906
+ document.addEventListener('mousemove', (e) => {
907
+ mouseX = e.clientX;
908
+ mouseY = e.clientY;
909
+
910
+ cursor.style.left = (mouseX - 8) + 'px';
911
+ cursor.style.top = (mouseY - 8) + 'px';
912
+
913
+ if(Math.random() > 0.8 && trailCount < 3) {
914
+ trailCount++;
915
+ const trail = document.createElement('div');
916
+ trail.className = 'cursor-trail';
917
+ trail.style.left = mouseX + 'px';
918
+ trail.style.top = mouseY + 'px';
919
+ document.body.appendChild(trail);
920
+
921
+ setTimeout(() => {
922
+ trail.remove();
923
+ trailCount--;
924
+ }, 600);
925
+ }
926
+ });
927
+ }
928
+
929
+ let activeFloatingElements = 0;
930
+ function createOptimizedFloatingNote(){
931
+ if(performanceMode || activeFloatingElements >= maxFloatingElements) return;
932
+
933
+ const notes = ['♪', '♫', '♬', '♩'];
934
+ const note = document.createElement('div');
935
+ note.className = 'note';
936
+ note.textContent = notes[Math.floor(Math.random() * notes.length)];
937
+ note.style.left = Math.random() * 100 + 'vw';
938
+ note.style.animationDuration = (8 + Math.random() * 4) + 's';
939
+
940
+ activeFloatingElements++;
941
+ document.getElementById('music-notes').appendChild(note);
942
+ setTimeout(() => {
943
+ note.remove();
944
+ activeFloatingElements--;
945
+ }, 12000);
946
+ }
947
+
948
+ function initOptimizedColorSampling(){
949
+ const canvas = document.getElementById('color-canvas');
950
+ const ctx = canvas.getContext('2d');
951
+ const video = document.getElementById('player');
952
+
953
+ function sampleOptimizedColors(){
954
+ if(!video.videoWidth || !video.videoHeight) return;
955
+
956
+ canvas.width = 32;
957
+ canvas.height = 18;
958
+
959
+ try{
960
+ ctx.drawImage(video, 0, 0, 32, 18);
961
+ const imageData = ctx.getImageData(8, 4, 16, 10);
962
+ const data = imageData.data;
963
+
964
+ let r = 0, g = 0, b = 0, count = 0;
965
+
966
+ for(let i = 0; i < data.length; i += 16) {
967
+ r += data[i];
968
+ g += data[i + 1];
969
+ b += data[i + 2];
970
+ count++;
971
+ }
972
+
973
+ if(count > 0){
974
+ r = Math.floor(r / count);
975
+ g = Math.floor(g / count);
976
+ b = Math.floor(b / count);
977
+
978
+ updateOptimizedDynamicColors(r, g, b);
979
+ }
980
+ }catch(e){
981
+ const time = Date.now() / 2000;
982
+ const r = Math.floor(127 + 127 * Math.sin(time * 0.2));
983
+ const g = Math.floor(127 + 127 * Math.sin(time * 0.3));
984
+ const b = Math.floor(127 + 127 * Math.sin(time * 0.4));
985
+ updateOptimizedDynamicColors(r, g, b);
986
+ }
987
+ }
988
+
989
+ setInterval(sampleOptimizedColors, performanceMode ? 800 : 600);
990
+ }
991
+
992
+ function updateOptimizedDynamicColors(r, g, b){
993
+ const root = document.documentElement;
994
+
995
+ const enhancedR = Math.min(255, r + 30);
996
+ const enhancedG = Math.min(255, g + 20);
997
+ const enhancedB = Math.min(255, b + 40);
998
+
999
+ const compR = Math.max(0, 255 - r + 20);
1000
+ const compG = Math.max(0, 255 - g + 15);
1001
+ const compB = Math.max(0, 255 - b + 30);
1002
+
1003
+ root.style.setProperty('--neon-primary', `rgb(${enhancedR}, ${enhancedG}, ${enhancedB})`);
1004
+ root.style.setProperty('--neon-secondary', `rgb(${compR}, ${compG}, ${compB})`);
1005
+
1006
+ currentDominantColor = `rgb(${enhancedR}, ${enhancedG}, ${enhancedB})`;
1007
+ }
1008
+
1009
+ function initOptimizedAudioAnalysis(){
1010
+ const video = document.getElementById('player');
1011
+
1012
+ try{
1013
+ audioContext = new (window.AudioContext || window.webkitAudioContext)();
1014
+ const source = audioContext.createMediaElementSource(video);
1015
+ analyser = audioContext.createAnalyser();
1016
+
1017
+ source.connect(analyser);
1018
+ analyser.connect(audioContext.destination);
1019
+
1020
+ analyser.fftSize = 32;
1021
+ const bufferLength = analyser.frequencyBinCount;
1022
+ const dataArray = new Uint8Array(bufferLength);
1023
+
1024
+ function updateOptimizedVisualizer(){
1025
+ if(frameCount % 3 !== 0) {
1026
+ requestAnimationFrame(updateOptimizedVisualizer);
1027
+ return;
1028
+ }
1029
+
1030
+ analyser.getByteFrequencyData(dataArray);
1031
+
1032
+ const bars = document.querySelectorAll('.audio-bar');
1033
+ bars.forEach((bar, i) => {
1034
+ const value = dataArray[i] || 0;
1035
+ const normalizedValue = value / 255;
1036
+ const height = Math.max(6, normalizedValue * 45);
1037
+
1038
+ bar.style.height = height + 'px';
1039
+ });
1040
+
1041
+ requestAnimationFrame(updateOptimizedVisualizer);
1042
+ }
1043
+
1044
+ updateOptimizedVisualizer();
1045
+
1046
+ }catch(e){
1047
+ const bars = document.querySelectorAll('.audio-bar');
1048
+ bars.forEach((bar, i) => {
1049
+ setInterval(() => {
1050
+ if(performanceMode) return;
1051
+ const randomHeight = 6 + Math.random() * 35;
1052
+ bar.style.height = randomHeight + 'px';
1053
+ }, 150 + Math.random() * 200);
1054
+ });
1055
+ }
1056
+ }
1057
+
1058
+ /* ================ CORE FUNCTIONS (SAME AS BEFORE) ================ */
1059
+ function todaySchedule(){
1060
+ const d = utcDayIndex();
1061
+ if(d===1 || d===2 || d===3) return { which:'A (Mon-Tue-Wed)', list: SCHEDULE_A };
1062
+ return { which:'B (Thu-Fri-Sat-Sun)', list: SCHEDULE_B };
1063
+ }
1064
+
1065
+ const $player = document.getElementById('player');
1066
+ const $vtitle = document.getElementById('vtitle');
1067
+ const $vmeta = document.getElementById('vmeta');
1068
+ const $vtitle2 = document.getElementById('vtitle2');
1069
+ const $vmeta2 = document.getElementById('vmeta2');
1070
+ const $chip = document.getElementById('chip');
1071
+ const $rows = document.getElementById('rows');
1072
+ const $rows2 = document.getElementById('rows2');
1073
+ const $ht = document.getElementById('header-time');
1074
+ const $todayTitle = document.getElementById('schedule-title');
1075
+ const $bottom = document.getElementById('bottom-sheet');
1076
+ const $indicator = document.getElementById('auto-hide-indicator');
1077
+ const $header = document.getElementById('main-header');
1078
+ const $info = document.getElementById('main-info');
1079
+ const $schedule = document.getElementById('main-schedule');
1080
+ const $welcomeNeon = document.getElementById('welcome-neon');
1081
+
1082
+ function initWelcomeText() {
1083
+ if (localStorage.getItem('proWelcomeShown') === 'true') {
1084
+ $welcomeNeon.style.display = 'none';
1085
+ return;
1086
+ }
1087
+
1088
+ setTimeout(() => {
1089
+ $welcomeNeon.style.display = 'none';
1090
+ localStorage.setItem('proWelcomeShown', 'true');
1091
+ }, 4000);
1092
+ }
1093
+
1094
+ let autoHideTimer = null;
1095
+ let isScheduleVisible = false;
1096
+
1097
+ function showSchedule() {
1098
+ if (!isMobilePortrait()) return;
1099
+ $header.classList.add('visible');
1100
+ $info.classList.add('visible');
1101
+ $schedule.classList.add('visible');
1102
+ $bottom.classList.add('visible');
1103
+ isScheduleVisible = true;
1104
+
1105
+ if (autoHideTimer) clearTimeout(autoHideTimer);
1106
+ autoHideTimer = setTimeout(() => hideSchedule(), 5000);
1107
+ }
1108
+
1109
+ function hideSchedule() {
1110
+ if (!isMobilePortrait()) return;
1111
+ $header.classList.remove('visible');
1112
+ $info.classList.remove('visible');
1113
+ $schedule.classList.remove('visible');
1114
+ $bottom.classList.remove('visible');
1115
+ isScheduleVisible = false;
1116
+ if (autoHideTimer) {
1117
+ clearTimeout(autoHideTimer);
1118
+ autoHideTimer = null;
1119
+ }
1120
+ showIndicator();
1121
+ }
1122
+
1123
+ function showIndicator() {
1124
+ if (!isMobilePortrait()) return;
1125
+ $indicator.classList.add('visible');
1126
+ setTimeout(() => $indicator.classList.remove('visible'), 2500);
1127
+ }
1128
+
1129
+ let lastClickTime = 0;
1130
+ const doubleClickDelay = 300;
1131
+
1132
+ document.addEventListener('click', (e) => {
1133
+ if (!isMobilePortrait()) return;
1134
+ if (e.target.closest('.emoji-btn') || e.target.closest('.bottom-sheet') ||
1135
+ e.target.closest('header') || e.target.closest('.info') || e.target.closest('.schedule') ||
1136
+ e.target.closest('.control-panel')) return;
1137
+
1138
+ const currentTime = new Date().getTime();
1139
+ const timeDiff = currentTime - lastClickTime;
1140
+
1141
+ if (timeDiff < doubleClickDelay) {
1142
+ e.preventDefault();
1143
+ if (!isScheduleVisible) showSchedule();
1144
+ }
1145
+ lastClickTime = currentTime;
1146
+ });
1147
+
1148
+ function renderScheduleUI(){
1149
+ const sel = todaySchedule();
1150
+ const list = sel.list;
1151
+ $rows.innerHTML = '';
1152
+ list.forEach((v, idx) => {
1153
+ const div = document.createElement('div');
1154
+ div.className = 'row';
1155
+ div.innerHTML = `<div class="time">${formatHourRange(v.start,v.end)}</div><div class="name">${v.title}</div>`;
1156
+ $rows.appendChild(div);
1157
+ });
1158
+
1159
+ if($rows2) $rows2.innerHTML = $rows.innerHTML;
1160
+ const dayNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
1161
+ const d = utcDayIndex();
1162
+ $todayTitle.textContent = `✨ Global Schedule (UTC) — ${dayNames[d]} — Set ${sel.which}`;
1163
+ }
1164
+
1165
+ function formatHourRange(startH, endH){
1166
+ function hhmm(h){
1167
+ const total = Math.floor(h*3600 + 0.5);
1168
+ const hh = Math.floor(total/3600)%24;
1169
+ const mm = Math.floor((total%3600)/60);
1170
+ return String(hh).padStart(2,'0') + ':' + String(mm).padStart(2,'0');
1171
+ }
1172
+ return `${hhmm(startH)} – ${hhmm(endH)}`;
1173
+ }
1174
+ renderScheduleUI();
1175
+
1176
+ function updateHeader(){
1177
+ const n = new Date();
1178
+ $ht.textContent = `Local: ${n.toLocaleTimeString()} | UTC: ${n.toUTCString().split(' ')[4]}`;
1179
+ if($chip) $chip.textContent = `Local: ${n.toLocaleTimeString()}`;
1180
+ }
1181
+ setInterval(updateHeader,1000);
1182
+ updateHeader();
1183
+
1184
+ function findCurrentItem(list, h){
1185
+ for(let i=0;i<list.length;i++){
1186
+ const s = list[i].start, e = list[i].end;
1187
+ if(s < e){
1188
+ if(h >= s && h < e) return i;
1189
+ }else{
1190
+ if(h >= s || h < e) return i;
1191
+ }
1192
+ }
1193
+ return 0;
1194
+ }
1195
+
1196
+ let playTimer = null;
1197
+ function schedulePlay(){
1198
+ const sel = todaySchedule();
1199
+ const list = sel.list;
1200
+ const h = nowHour();
1201
+ const idx = findCurrentItem(list, h);
1202
+ const v = list[idx];
1203
+
1204
+ const elapsedSec = Math.round(((h - v.start + 24) % 24) * 3600);
1205
+ const pos = elapsedSec % v.duration;
1206
+
1207
+ if($player.src !== v.url){
1208
+ $player.src = v.url;
1209
+ $player.load();
1210
+ }
1211
+ try {
1212
+ $player.currentTime = pos;
1213
+ } catch (e) {}
1214
+ $player.loop = true;
1215
+ $player.play().catch(()=>{ $player.muted = true; $player.play(); });
1216
+
1217
+ $vtitle.textContent = v.title;
1218
+ $vmeta.textContent = `Duration: ${secFmt(v.duration)}`;
1219
+ if($vtitle2) $vtitle2.textContent = v.title;
1220
+ if($vmeta2) $vmeta2.textContent = `Duration: ${secFmt(v.duration)}`;
1221
+
1222
+ const rowNodes = document.querySelectorAll('#rows .row, #rows2 .row');
1223
+ rowNodes.forEach((r,i)=> r.classList.toggle('active', (i%list.length)===idx));
1224
+
1225
+ const nowH = h;
1226
+ const msUntilNext = Math.max(1000, Math.round(((v.end - nowH + 24) % 24) * 3600 * 1000));
1227
+ if(playTimer) clearTimeout(playTimer);
1228
+ playTimer = setTimeout(()=> {
1229
+ renderScheduleUI();
1230
+ schedulePlay();
1231
+ }, msUntilNext + 200);
1232
+ }
1233
+ schedulePlay();
1234
+
1235
+ $player.addEventListener('loadedmetadata', ()=>{
1236
+ const r = $player.videoWidth / $player.videoHeight;
1237
+ if(r < 1){
1238
+ $player.style.objectFit = 'contain';
1239
+ $player.style.background = '#000';
1240
+ } else {
1241
+ $player.style.objectFit = 'cover';
1242
+ }
1243
+
1244
+ setTimeout(() => {
1245
+ initOptimizedColorSampling();
1246
+ initOptimizedAudioAnalysis();
1247
+ }, 1000);
1248
+ });
1249
+
1250
+ function createOptimizedBubble(){
1251
+ if(performanceMode || activeFloatingElements >= maxFloatingElements) return;
1252
+
1253
+ const b = document.createElement('div');
1254
+ b.className = 'bubble';
1255
+ const s = 20 + Math.random() * 60;
1256
+ b.style.width = s + 'px';
1257
+ b.style.height = s + 'px';
1258
+ b.style.left = (Math.random() * 100) + 'vw';
1259
+ b.style.animationDuration = (20 + Math.random() * 20) + 's';
1260
+
1261
+ activeFloatingElements++;
1262
+ document.getElementById('bubbles').appendChild(b);
1263
+ setTimeout(()=> {
1264
+ b.remove();
1265
+ activeFloatingElements--;
1266
+ }, 45000);
1267
+ }
1268
+
1269
+ const $liveCount = document.getElementById('live-count');
1270
+ const BUCKETS = [
1271
+ {start:0,end:6,min:600,max:1800},
1272
+ {start:6,end:12,min:1200,max:3000},
1273
+ {start:12,end:18,min:2500,max:5000},
1274
+ {start:18,end:24,min:3500,max:6500}
1275
+ ];
1276
+ function bucketFor(h){ return BUCKETS.find(b=>h>=b.start && h<b.end) || BUCKETS[0]; }
1277
+ function randStep(){ return (Math.random()<0.5?-1:1)*(15 + Math.floor(Math.random()*46)); }
1278
+ function delay(){ return (4 + Math.random()*6) * 1000; }
1279
+
1280
+ let liveCount, liveBucket, liveTimer;
1281
+ function initLive(){
1282
+ const h = nowHour();
1283
+ liveBucket = bucketFor(h);
1284
+ const span = liveBucket.max - liveBucket.min;
1285
+ liveCount = liveBucket.min + Math.floor(span * (0.3 + Math.random()*0.4));
1286
+ $liveCount.textContent = liveCount.toLocaleString();
1287
+ }
1288
+ function tickLive(){
1289
+ const h = nowHour();
1290
+ const b = bucketFor(h);
1291
+ if(b !== liveBucket){
1292
+ liveBucket = b;
1293
+ liveCount = clamp(liveCount + randStep(), b.min, b.max);
1294
+ } else {
1295
+ liveCount = clamp(liveCount + randStep(), liveBucket.min, liveBucket.max);
1296
+ }
1297
+ $liveCount.textContent = liveCount.toLocaleString();
1298
+ liveTimer = setTimeout(tickLive, delay());
1299
+ }
1300
+ document.addEventListener('visibilitychange', ()=>{
1301
+ if(document.hidden){ if(liveTimer) clearTimeout(liveTimer); liveTimer = null; }
1302
+ else if(!liveTimer) liveTimer = setTimeout(tickLive, delay());
1303
+ });
1304
+ initLive(); liveTimer = setTimeout(tickLive, delay());
1305
+
1306
+ const EMOJIS = [{key:'heart',sym:'❤️'},{key:'fire',sym:'🔥'},{key:'dancer',sym:'💃'},{key:'spark',sym:'✨'}];
1307
+ const STORAGE_PREFIX = 'pro-reactions:';
1308
+ function utcDateKey(){ const d=new Date(); return `${d.getUTCFullYear()}-${String(d.getUTCMonth()+1).padStart(2,'0')}-${String(d.getUTCDate()).padStart(2,'0')}`; }
1309
+ const STORAGE_KEY = STORAGE_PREFIX + utcDateKey();
1310
+
1311
+ function dailySeedBase(){
1312
+ const key = utcDateKey();
1313
+ let h=0; for(let i=0;i<key.length;i++) h = (h*31 + key.charCodeAt(i)) % 100000;
1314
+ return { heart: 400 + (h%500), fire:320 + ((h>>2)%420), dancer:250 + ((h>>3)%350), spark:180 + ((h>>4)%280) };
1315
+ }
1316
+ let reactionCounts = { heart:0, fire:0, dancer:0, spark:0 };
1317
+ function loadReactions(){
1318
+ const base = dailySeedBase();
1319
+ try{
1320
+ const raw = localStorage.getItem(STORAGE_KEY);
1321
+ const local = raw ? JSON.parse(raw) : {};
1322
+ reactionCounts.heart = base.heart + (local.heart||0);
1323
+ reactionCounts.fire = base.fire + (local.fire||0);
1324
+ reactionCounts.dancer= base.dancer+ (local.dancer||0);
1325
+ reactionCounts.spark = base.spark + (local.spark||0);
1326
+ }catch(e){
1327
+ reactionCounts = {...base};
1328
+ }
1329
+ renderReactions();
1330
+ }
1331
+ function saveLocalInc(type){
1332
+ try{
1333
+ const raw = localStorage.getItem(STORAGE_KEY);
1334
+ const obj = raw ? JSON.parse(raw) : { heart:0, fire:0, dancer:0, spark:0 };
1335
+ obj[type] = (obj[type]||0) + 1;
1336
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(obj));
1337
+ }catch(e){}
1338
+ }
1339
+ function renderReactions(){
1340
+ document.getElementById('count-heart').textContent = reactionCounts.heart.toLocaleString();
1341
+ document.getElementById('count-fire').textContent = reactionCounts.fire.toLocaleString();
1342
+ document.getElementById('count-dancer').textContent = reactionCounts.dancer.toLocaleString();
1343
+ document.getElementById('count-spark').textContent = reactionCounts.spark.toLocaleString();
1344
+ document.getElementById('today-reactions').textContent =
1345
+ `Today ❤️${reactionCounts.heart} 🔥${reactionCounts.fire} 💃${reactionCounts.dancer} ✨${reactionCounts.spark}`;
1346
+ }
1347
+
1348
+ let activeParticles = 0;
1349
+ function spawnOptimizedParticles(type, x, y){
1350
+ if(activeParticles > 15) return;
1351
+
1352
+ const pane = document.getElementById('panel').getBoundingClientRect();
1353
+ const burst = document.createElement('div');
1354
+ burst.className='burst';
1355
+ burst.style.left=(x-pane.left-20)+'px';
1356
+ burst.style.top=(y-pane.top-20)+'px';
1357
+ burst.textContent = EMOJIS.find(e=>e.key===type).sym;
1358
+ burst.style.fontSize='30px';
1359
+ burst.style.filter = `drop-shadow(0 0 10px ${currentDominantColor})`;
1360
+ document.getElementById('panel').appendChild(burst);
1361
+ activeParticles++;
1362
+ setTimeout(()=>{
1363
+ burst.remove();
1364
+ activeParticles--;
1365
+ },800);
1366
+
1367
+ const particleCount = performanceMode ? 4 : 8;
1368
+ for(let i=0;i<particleCount;i++){
1369
+ const p = document.createElement('div');
1370
+ p.className='particle';
1371
+ p.textContent = EMOJIS.find(e=>e.key===type).sym;
1372
+ p.style.left = (x - pane.left + (Math.random()*60-30)) + 'px';
1373
+ p.style.top = (y - pane.top + (Math.random()*30-15)) + 'px';
1374
+ p.style.animationDelay = (Math.random()*200) + 'ms';
1375
+ p.style.filter = `drop-shadow(0 0 6px ${currentDominantColor})`;
1376
+ document.getElementById('panel').appendChild(p);
1377
+ activeParticles++;
1378
+ setTimeout(()=>{
1379
+ p.remove();
1380
+ activeParticles--;
1381
+ },1500);
1382
+ }
1383
+ }
1384
+
1385
+ function setupEmojiClicks(){
1386
+ const panel = document.getElementById('emoji-panel');
1387
+ panel.addEventListener('click', (ev)=>{
1388
+ const btn = ev.target.closest('.emoji-btn');
1389
+ if(!btn) return;
1390
+ const type = btn.getAttribute('data-type');
1391
+ const rect = btn.getBoundingClientRect();
1392
+ const x = rect.left + rect.width/2;
1393
+ const y = rect.top + rect.height/2;
1394
+ reactionCounts[type] = (reactionCounts[type]||0) + 1;
1395
+ saveLocalInc(type);
1396
+ renderReactions();
1397
+ spawnOptimizedParticles(type, x, y);
1398
+ btn.animate([
1399
+ {transform:'scale(1)', filter:'brightness(1)'},
1400
+ {transform:'scale(1.1)', filter:'brightness(1.3)'},
1401
+ {transform:'scale(1)', filter:'brightness(1)'}
1402
+ ],{duration:250});
1403
+ });
1404
+ }
1405
+ loadReactions(); setupEmojiClicks();
1406
+
1407
+ function msToNextUtcMidnight(){
1408
+ const now = new Date();
1409
+ const next = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()+1, 0,0,0));
1410
+ return next - now;
1411
+ }
1412
+ setTimeout(()=> location.reload(), msToNextUtcMidnight()+1200);
1413
+
1414
+ function isMobilePortrait(){
1415
+ return window.matchMedia('(max-width:768px) and (orientation:portrait)').matches;
1416
+ }
1417
+
1418
+ function applyMobileLayout(){
1419
+ if(isMobilePortrait()) {
1420
+ setTimeout(() => showSchedule(), 700);
1421
+ } else {
1422
+ $header.classList.add('visible');
1423
+ $info.classList.add('visible');
1424
+ $schedule.classList.add('visible');
1425
+ $bottom.classList.remove('visible');
1426
+ if (autoHideTimer) {
1427
+ clearTimeout(autoHideTimer);
1428
+ autoHideTimer = null;
1429
+ }
1430
+ }
1431
+ }
1432
+
1433
+ // Initialize all features
1434
+ initWelcomeText();
1435
+ initOptimizedCursor();
1436
+ applyMobileLayout();
1437
+ window.addEventListener('resize', applyMobileLayout);
1438
+
1439
+ // Initialize Professional Controls
1440
+ initMuteControl();
1441
+ initVolumeControl();
1442
+ initTheaterMode();
1443
+ initFullscreenControl();
1444
+ initPictureInPictureControl();
1445
+ initKeyboardShortcuts();
1446
+ initControlPanelVisibility();
1447
+ initProgressBar();
1448
+ initQualityIndicator();
1449
+
1450
+ // Floating elements
1451
+ setInterval(() => {
1452
+ if(!performanceMode) createOptimizedFloatingNote();
1453
+ }, performanceMode ? 6000 : 4000);
1454
+
1455
+ setInterval(() => {
1456
+ if(!performanceMode) createOptimizedBubble();
1457
+ }, performanceMode ? 1200 : 800);
1458
+
1459
+ // Performance monitoring
1460
+ function optimizedPerformanceMonitor() {
1461
+ frameCount++;
1462
+ performanceCheck.update();
1463
+ requestAnimationFrame(optimizedPerformanceMonitor);
1464
+ }
1465
+ requestAnimationFrame(optimizedPerformanceMonitor);
1466
+
1467
+ </script>
1468
+ <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>
1469
+ </html>