VibeCodingStudio commited on
Commit
6893eda
·
verified ·
1 Parent(s): d1fea92

🐳 28/03 - 06:27 - Can you change the video to a screen recording of different tasks happening in a dashboard by ai agents in a businness format like github.com/paperclipai/paperclip

Browse files
Files changed (1) hide show
  1. index.html +242 -84
index.html CHANGED
@@ -414,68 +414,123 @@
414
  </section>
415
 
416
  <!-- Video Demo Section -->
417
- <section id="video" class="py-24 bg-white">
418
  <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
419
  <div class="text-center mb-12">
420
- <h2 class="text-3xl md:text-4xl font-bold mb-4">See FlowSync in Action</h2>
421
- <p class="text-slate-600 text-lg max-w-2xl mx-auto">Watch how teams automate complex workflows and save 10+ hours every week</p>
422
  </div>
423
 
424
- <div class="video-container shadow-2xl aspect-video relative group">
425
- <!-- Video Player -->
426
- <video id="demo-video" class="w-full h-full object-cover" poster="http://static.photos/technology/1200x630/42">
427
- <source src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4">
428
- Your browser does not support the video tag.
429
- </video>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
430
 
431
- <!-- Custom Controls -->
432
- <div id="video-overlay" class="absolute inset-0 bg-black/40 flex items-center justify-center group-hover:bg-black/30 transition-all cursor-pointer" onclick="toggleVideo()">
433
- <div class="play-button">
434
- <i data-lucide="play" class="w-8 h-8 text-sky-600 ml-1"></i>
435
  </div>
436
  </div>
437
 
438
- <!-- Video Controls Bar -->
439
- <div class="absolute bottom-0 left-0 right-0 p-4 bg-gradient-to-t from-black/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity">
440
  <div class="flex items-center space-x-4 text-white">
441
- <button onclick="toggleVideo()" class="hover:text-sky-400 transition-colors">
442
- <i data-lucide="play" id="play-icon" class="w-6 h-6"></i>
443
  </button>
444
- <div class="flex-1 h-1 bg-white/30 rounded-full overflow-hidden cursor-pointer" onclick="seekVideo(event)">
445
- <div id="progress-bar" class="h-full bg-sky-500 w-0 transition-all"></div>
446
  </div>
447
- <span id="time-display" class="text-sm font-medium">0:00 / 0:00</span>
448
- <button onclick="toggleMute()" class="hover:text-sky-400 transition-colors">
449
- <i data-lucide="volume-2" id="volume-icon" class="w-5 h-5"></i>
450
- </button>
451
- <button onclick="fullscreen()" class="hover:text-sky-400 transition-colors">
452
- <i data-lucide="maximize" class="w-5 h-5"></i>
453
  </button>
454
  </div>
455
  </div>
456
  </div>
457
 
458
  <div class="grid md:grid-cols-3 gap-6 mt-12">
459
- <div class="neo-card p-6 text-center">
460
- <div class="w-12 h-12 bg-sky-100 rounded-xl flex items-center justify-center mx-auto mb-4">
461
- <i data-lucide="clock" class="w-6 h-6 text-sky-600"></i>
462
  </div>
463
- <h3 class="font-semibold text-lg mb-2">Save 10+ Hours/Week</h3>
464
- <p class="text-slate-600 text-sm">Automate repetitive tasks and focus on what matters</p>
465
  </div>
466
- <div class="neo-card p-6 text-center">
467
- <div class="w-12 h-12 bg-violet-100 rounded-xl flex items-center justify-center mx-auto mb-4">
468
- <i data-lucide="zap" class="w-6 h-6 text-violet-600"></i>
469
  </div>
470
- <h3 class="font-semibold text-lg mb-2">10x Faster Execution</h3>
471
- <p class="text-slate-600 text-sm">Processes that took hours now complete in seconds</p>
472
  </div>
473
- <div class="neo-card p-6 text-center">
474
- <div class="w-12 h-12 bg-emerald-100 rounded-xl flex items-center justify-center mx-auto mb-4">
475
- <i data-lucide="shield-check" class="w-6 h-6 text-emerald-600"></i>
476
  </div>
477
- <h3 class="font-semibold text-lg mb-2">99.9% Uptime</h3>
478
- <p class="text-slate-600 text-sm">Enterprise-grade reliability for mission-critical workflows</p>
479
  </div>
480
  </div>
481
  </div>
@@ -753,68 +808,171 @@
753
  return new Promise(resolve => setTimeout(resolve, ms));
754
  }
755
 
756
- // Video Player Logic
757
- const video = document.getElementById('demo-video');
758
- const overlay = document.getElementById('video-overlay');
759
- const playIcon = document.getElementById('play-icon');
760
- const progressBar = document.getElementById('progress-bar');
761
- const timeDisplay = document.getElementById('time-display');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
762
 
763
- function toggleVideo() {
764
- if (video.paused) {
765
- video.play();
766
- overlay.classList.add('hidden');
767
- playIcon.setAttribute('data-lucide', 'pause');
768
  } else {
769
- video.pause();
770
- overlay.classList.remove('hidden');
771
- playIcon.setAttribute('data-lucide', 'play');
772
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
773
  lucide.createIcons();
774
  }
775
 
776
- function toggleMute() {
777
- video.muted = !video.muted;
778
- const icon = document.getElementById('volume-icon');
779
- if (video.muted) {
780
- icon.setAttribute('data-lucide', 'volume-x');
781
- } else {
782
- icon.setAttribute('data-lucide', 'volume-2');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
783
  }
 
784
  lucide.createIcons();
785
  }
786
 
787
- function fullscreen() {
788
- if (video.requestFullscreen) {
789
- video.requestFullscreen();
 
 
 
 
 
 
 
790
  }
791
  }
792
 
793
- function seekVideo(e) {
 
794
  const rect = e.currentTarget.getBoundingClientRect();
795
  const pos = (e.clientX - rect.left) / rect.width;
796
- video.currentTime = pos * video.duration;
797
  }
798
 
799
- video.addEventListener('timeupdate', () => {
800
- const progress = (video.currentTime / video.duration) * 100;
801
- progressBar.style.width = `${progress}%`;
802
-
803
- const current = formatTime(video.currentTime);
804
- const total = formatTime(video.duration || 0);
805
- timeDisplay.textContent = `${current} / ${total}`;
806
- });
807
-
808
- video.addEventListener('ended', () => {
809
- overlay.classList.remove('hidden');
810
- playIcon.setAttribute('data-lucide', 'play');
811
  lucide.createIcons();
812
- });
813
-
814
- function formatTime(seconds) {
815
- const mins = Math.floor(seconds / 60);
816
- const secs = Math.floor(seconds % 60);
817
- return `${mins}:${secs.toString().padStart(2, '0')}`;
818
  }
819
 
820
  // Feature Tabs
 
414
  </section>
415
 
416
  <!-- Video Demo Section -->
417
+ <section id="video" class="py-24 bg-slate-900">
418
  <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
419
  <div class="text-center mb-12">
420
+ <h2 class="text-3xl md:text-4xl font-bold mb-4 text-white">AI Agents at Work</h2>
421
+ <p class="text-slate-400 text-lg max-w-2xl mx-auto">Watch AI agents autonomously handle tasks across your business dashboard—processing emails, updating CRMs, and coordinating with your team in real-time.</p>
422
  </div>
423
 
424
+ <div class="video-container shadow-2xl aspect-video relative group bg-slate-800 rounded-2xl overflow-hidden border border-slate-700">
425
+ <!-- Dashboard Screen Recording Mock -->
426
+ <div id="dashboard-demo" class="w-full h-full bg-slate-900 relative overflow-hidden">
427
+ <!-- Dashboard Header -->
428
+ <div class="absolute top-0 left-0 right-0 h-14 bg-slate-800 border-b border-slate-700 flex items-center px-6 z-20">
429
+ <div class="flex items-center space-x-3">
430
+ <div class="w-8 h-8 bg-gradient-to-br from-violet-500 to-fuchsia-500 rounded-lg flex items-center justify-center">
431
+ <i data-lucide="bot" class="w-4 h-4 text-white"></i>
432
+ </div>
433
+ <span class="text-white font-semibold">FlowSync AI Dashboard</span>
434
+ </div>
435
+ <div class="ml-auto flex items-center space-x-4">
436
+ <div class="flex items-center space-x-2 px-3 py-1.5 bg-emerald-500/20 rounded-full border border-emerald-500/30">
437
+ <span class="w-2 h-2 rounded-full bg-emerald-400 animate-pulse"></span>
438
+ <span class="text-emerald-400 text-xs font-medium">4 Agents Active</span>
439
+ </div>
440
+ <div class="w-8 h-8 rounded-full bg-slate-700"></div>
441
+ </div>
442
+ </div>
443
+
444
+ <!-- Dashboard Content -->
445
+ <div class="absolute top-14 left-0 right-0 bottom-0 flex">
446
+ <!-- Sidebar -->
447
+ <div class="w-64 bg-slate-800/50 border-r border-slate-700 p-4 hidden md:block">
448
+ <div class="space-y-2">
449
+ <div class="flex items-center space-x-3 px-3 py-2 bg-sky-500/20 rounded-lg border border-sky-500/30">
450
+ <i data-lucide="layout-dashboard" class="w-4 h-4 text-sky-400"></i>
451
+ <span class="text-sky-400 text-sm font-medium">Active Tasks</span>
452
+ </div>
453
+ <div class="flex items-center space-x-3 px-3 py-2 text-slate-400 hover:text-white cursor-pointer">
454
+ <i data-lucide="users" class="w-4 h-4"></i>
455
+ <span class="text-sm">Team</span>
456
+ </div>
457
+ <div class="flex items-center space-x-3 px-3 py-2 text-slate-400 hover:text-white cursor-pointer">
458
+ <i data-lucide="git-branch" class="w-4 h-4"></i>
459
+ <span class="text-sm">Workflows</span>
460
+ </div>
461
+ <div class="flex items-center space-x-3 px-3 py-2 text-slate-400 hover:text-white cursor-pointer">
462
+ <i data-lucide="bar-chart-3" class="w-4 h-4"></i>
463
+ <span class="text-sm">Analytics</span>
464
+ </div>
465
+ </div>
466
+ </div>
467
+
468
+ <!-- Main Content Area -->
469
+ <div class="flex-1 p-6 overflow-hidden">
470
+ <!-- Task Feed -->
471
+ <div class="max-w-3xl mx-auto space-y-3" id="agent-task-feed">
472
+ <!-- Tasks will be animated here -->
473
+ </div>
474
+ </div>
475
+ </div>
476
+
477
+ <!-- AI Agent Activity Overlay -->
478
+ <div class="absolute bottom-4 right-4 bg-slate-800/90 backdrop-blur border border-slate-700 rounded-xl p-4 shadow-2xl max-w-xs z-30">
479
+ <div class="flex items-center space-x-3 mb-3">
480
+ <div class="w-2 h-2 rounded-full bg-violet-400 animate-pulse"></div>
481
+ <span class="text-white text-sm font-medium">AI Agent Activity</span>
482
+ </div>
483
+ <div id="agent-status-text" class="text-slate-400 text-xs leading-relaxed">
484
+ Monitoring incoming tasks...
485
+ </div>
486
+ </div>
487
+ </div>
488
 
489
+ <!-- Play Overlay (shown when paused) -->
490
+ <div id="video-overlay" class="absolute inset-0 bg-black/60 flex items-center justify-center cursor-pointer z-40" onclick="toggleDashboardDemo()">
491
+ <div class="play-button bg-white/95 hover:bg-white hover:scale-110 transition-all">
492
+ <i data-lucide="play" class="w-8 h-8 text-slate-900 ml-1"></i>
493
  </div>
494
  </div>
495
 
496
+ <!-- Dashboard Controls -->
497
+ <div class="absolute bottom-0 left-0 right-0 p-4 bg-gradient-to-t from-black/90 to-transparent z-30">
498
  <div class="flex items-center space-x-4 text-white">
499
+ <button onclick="toggleDashboardDemo()" class="hover:text-sky-400 transition-colors">
500
+ <i data-lucide="play" id="dashboard-play-icon" class="w-6 h-6"></i>
501
  </button>
502
+ <div class="flex-1 h-1 bg-white/20 rounded-full overflow-hidden cursor-pointer" onclick="seekDashboardDemo(event)">
503
+ <div id="dashboard-progress" class="h-full bg-violet-500 w-0 transition-all duration-300"></div>
504
  </div>
505
+ <span id="dashboard-time" class="text-sm font-medium text-slate-300">0:00 / 0:45</span>
506
+ <button onclick="toggleDashboardMute()" class="hover:text-sky-400 transition-colors">
507
+ <i data-lucide="volume-2" id="dashboard-volume-icon" class="w-5 h-5"></i>
 
 
 
508
  </button>
509
  </div>
510
  </div>
511
  </div>
512
 
513
  <div class="grid md:grid-cols-3 gap-6 mt-12">
514
+ <div class="bg-slate-800/50 border border-slate-700 p-6 rounded-2xl text-center hover:border-sky-500/50 transition-colors">
515
+ <div class="w-12 h-12 bg-sky-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
516
+ <i data-lucide="bot" class="w-6 h-6 text-sky-400"></i>
517
  </div>
518
+ <h3 class="font-semibold text-lg mb-2 text-white">AI Agents Work 24/7</h3>
519
+ <p class="text-slate-400 text-sm">Autonomous agents handle tasks round-the-clock without supervision</p>
520
  </div>
521
+ <div class="bg-slate-800/50 border border-slate-700 p-6 rounded-2xl text-center hover:border-violet-500/50 transition-colors">
522
+ <div class="w-12 h-12 bg-violet-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
523
+ <i data-lucide="workflow" class="w-6 h-6 text-violet-400"></i>
524
  </div>
525
+ <h3 class="font-semibold text-lg mb-2 text-white">Multi-Step Reasoning</h3>
526
+ <p class="text-slate-400 text-sm">Agents break down complex tasks and execute across multiple tools</p>
527
  </div>
528
+ <div class="bg-slate-800/50 border border-slate-700 p-6 rounded-2xl text-center hover:border-emerald-500/50 transition-colors">
529
+ <div class="w-12 h-12 bg-emerald-500/20 rounded-xl flex items-center justify-center mx-auto mb-4">
530
+ <i data-lucide="shield-check" class="w-6 h-6 text-emerald-400"></i>
531
  </div>
532
+ <h3 class="font-semibold text-lg mb-2 text-white">Human-in-the-Loop</h3>
533
+ <p class="text-slate-400 text-sm">Smart escalation to humans when critical decisions are needed</p>
534
  </div>
535
  </div>
536
  </div>
 
808
  return new Promise(resolve => setTimeout(resolve, ms));
809
  }
810
 
811
+ // AI Dashboard Demo Logic
812
+ let demoRunning = false;
813
+ let demoInterval;
814
+ let currentTask = 0;
815
+ const totalDemoTime = 45000; // 45 seconds
816
+
817
+ const agentTasks = [
818
+ { agent: 'Email Agent', action: 'Received new inquiry from client@acme.com', icon: 'mail', color: 'sky', time: 0 },
819
+ { agent: 'Classifier AI', action: 'Categorized as "High-Priority Lead"', icon: 'sparkles', color: 'violet', time: 2000 },
820
+ { agent: 'CRM Agent', action: 'Created lead in Salesforce with extracted details', icon: 'database', color: 'blue', time: 4000 },
821
+ { agent: 'Slack Agent', action: 'Notified sales team in #new-leads channel', icon: 'message-square', color: 'emerald', time: 6000 },
822
+ { agent: 'Calendar Agent', action: 'Checked availability and scheduled follow-up', icon: 'calendar', color: 'orange', time: 8000 },
823
+ { agent: 'Email Agent', action: 'Sent personalized response to client', icon: 'send', color: 'sky', time: 10000 },
824
+ { agent: 'Analytics Agent', action: 'Updated conversion tracking dashboard', icon: 'bar-chart-2', color: 'fuchsia', time: 12000 },
825
+ { agent: 'Email Agent', action: 'Received support ticket #2847', icon: 'ticket', color: 'sky', time: 15000 },
826
+ { agent: 'Classifier AI', action: 'Identified as "Technical Issue - Escalate"', icon: 'alert-triangle', color: 'violet', time: 17000 },
827
+ { agent: 'Support Agent', action: 'Assigned to senior engineer Sarah Chen', icon: 'user-check', color: 'rose', time: 19000 },
828
+ { agent: 'GitHub Agent', action: 'Created issue with logs and reproduction steps', icon: 'github', color: 'slate', time: 21000 },
829
+ { agent: 'Slack Agent', action: 'Alerted engineering team with priority flag', icon: 'bell', color: 'emerald', time: 23000 },
830
+ { agent: 'Docs Agent', action: 'Searched knowledge base for similar issues', icon: 'search', color: 'amber', time: 25000 },
831
+ { agent: 'Email Agent', action: 'Sent acknowledgment to customer with ETA', icon: 'clock', color: 'sky', time: 27000 },
832
+ { agent: 'Invoice Agent', action: 'Processed monthly subscription renewals (47)', icon: 'credit-card', color: 'cyan', time: 30000 },
833
+ { agent: 'Finance AI', action: 'Flagged 3 accounts for payment retry', icon: 'alert-circle', color: 'yellow', time: 32000 },
834
+ { agent: 'Stripe Agent', action: 'Updated payment methods for expired cards', icon: 'refresh-cw', color: 'indigo', time: 34000 },
835
+ { agent: 'Slack Agent', action: 'Reported revenue metrics to #finance', icon: 'trending-up', color: 'emerald', time: 36000 },
836
+ { agent: 'Sync Agent', action: 'Reconciled data across 12 connected platforms', icon: 'sync', color: 'teal', time: 38000 },
837
+ { agent: 'Maintenance', action: 'Optimizing workflows... Demo complete', icon: 'check-circle', color: 'emerald', time: 42000 }
838
+ ];
839
 
840
+ function toggleDashboardDemo() {
841
+ if (demoRunning) {
842
+ pauseDashboardDemo();
 
 
843
  } else {
844
+ playDashboardDemo();
 
 
845
  }
846
+ }
847
+
848
+ function playDashboardDemo() {
849
+ demoRunning = true;
850
+ document.getElementById('video-overlay').classList.add('hidden');
851
+ document.getElementById('dashboard-play-icon').setAttribute('data-lucide', 'pause');
852
+ lucide.createIcons();
853
+
854
+ const startTime = Date.now();
855
+
856
+ demoInterval = setInterval(() => {
857
+ const elapsed = Date.now() - startTime;
858
+ const progress = Math.min((elapsed / totalDemoTime) * 100, 100);
859
+ document.getElementById('dashboard-progress').style.width = `${progress}%`;
860
+
861
+ // Update time display
862
+ const currentSecs = Math.floor(elapsed / 1000);
863
+ const totalSecs = Math.floor(totalDemoTime / 1000);
864
+ document.getElementById('dashboard-time').textContent =
865
+ `${Math.floor(currentSecs/60)}:${(currentSecs%60).toString().padStart(2,'0')} / ${Math.floor(totalSecs/60)}:${(totalSecs%60).toString().padStart(2,'0')}`;
866
+
867
+ // Check for tasks to show
868
+ agentTasks.forEach((task, index) => {
869
+ if (elapsed >= task.time && !task.shown) {
870
+ task.shown = true;
871
+ showAgentTask(task, index);
872
+ updateAgentStatus(task);
873
+ }
874
+ });
875
+
876
+ if (elapsed >= totalDemoTime) {
877
+ pauseDashboardDemo();
878
+ // Reset for replay
879
+ setTimeout(() => {
880
+ agentTasks.forEach(t => t.shown = false);
881
+ document.getElementById('agent-task-feed').innerHTML = '';
882
+ currentTask = 0;
883
+ }, 2000);
884
+ }
885
+ }, 100);
886
+ }
887
+
888
+ function pauseDashboardDemo() {
889
+ demoRunning = false;
890
+ clearInterval(demoInterval);
891
+ document.getElementById('video-overlay').classList.remove('hidden');
892
+ document.getElementById('dashboard-play-icon').setAttribute('data-lucide', 'play');
893
  lucide.createIcons();
894
  }
895
 
896
+ function showAgentTask(task, index) {
897
+ const feed = document.getElementById('agent-task-feed');
898
+ const taskEl = document.createElement('div');
899
+
900
+ const colorMap = {
901
+ sky: 'bg-sky-500/20 border-sky-500/30 text-sky-400',
902
+ violet: 'bg-violet-500/20 border-violet-500/30 text-violet-400',
903
+ blue: 'bg-blue-500/20 border-blue-500/30 text-blue-400',
904
+ emerald: 'bg-emerald-500/20 border-emerald-500/30 text-emerald-400',
905
+ orange: 'bg-orange-500/20 border-orange-500/30 text-orange-400',
906
+ fuchsia: 'bg-fuchsia-500/20 border-fuchsia-500/30 text-fuchsia-400',
907
+ rose: 'bg-rose-500/20 border-rose-500/30 text-rose-400',
908
+ slate: 'bg-slate-500/20 border-slate-500/30 text-slate-400',
909
+ amber: 'bg-amber-500/20 border-amber-500/30 text-amber-400',
910
+ cyan: 'bg-cyan-500/20 border-cyan-500/30 text-cyan-400',
911
+ yellow: 'bg-yellow-500/20 border-yellow-500/30 text-yellow-400',
912
+ indigo: 'bg-indigo-500/20 border-indigo-500/30 text-indigo-400',
913
+ teal: 'bg-teal-500/20 border-teal-500/30 text-teal-400'
914
+ };
915
+
916
+ const colorClass = colorMap[task.color] || colorMap.sky;
917
+
918
+ taskEl.className = `flex items-center space-x-4 p-4 rounded-xl border ${colorClass} transform translate-y-4 opacity-0 transition-all duration-500 animate-slide-up`;
919
+ taskEl.innerHTML = `
920
+ <div class="w-10 h-10 rounded-lg bg-white/10 flex items-center justify-center flex-shrink-0">
921
+ <i data-lucide="${task.icon}" class="w-5 h-5"></i>
922
+ </div>
923
+ <div class="flex-1 min-w-0">
924
+ <div class="flex items-center space-x-2 mb-1">
925
+ <span class="font-semibold text-sm">${task.agent}</span>
926
+ <span class="text-xs opacity-60">• Just now</span>
927
+ </div>
928
+ <p class="text-sm opacity-90 truncate">${task.action}</p>
929
+ </div>
930
+ <div class="w-2 h-2 rounded-full bg-current animate-pulse"></div>
931
+ `;
932
+
933
+ feed.insertBefore(taskEl, feed.firstChild);
934
+
935
+ // Animate in
936
+ setTimeout(() => {
937
+ taskEl.classList.remove('translate-y-4', 'opacity-0');
938
+ }, 50);
939
+
940
+ // Keep only last 5 tasks visible
941
+ while (feed.children.length > 5) {
942
+ feed.removeChild(feed.lastChild);
943
  }
944
+
945
  lucide.createIcons();
946
  }
947
 
948
+ function updateAgentStatus(task) {
949
+ const statusText = document.getElementById('agent-status-text');
950
+ statusText.textContent = `${task.agent} is ${task.action.toLowerCase()}...`;
951
+
952
+ // Flash the activity indicator
953
+ const indicator = document.querySelector('.bg-violet-400');
954
+ if (indicator) {
955
+ indicator.classList.remove('animate-pulse');
956
+ void indicator.offsetWidth; // Trigger reflow
957
+ indicator.classList.add('animate-pulse');
958
  }
959
  }
960
 
961
+ function seekDashboardDemo(e) {
962
+ // Visual feedback only - in real implementation would seek to position
963
  const rect = e.currentTarget.getBoundingClientRect();
964
  const pos = (e.clientX - rect.left) / rect.width;
965
+ document.getElementById('dashboard-progress').style.width = `${pos * 100}%`;
966
  }
967
 
968
+ function toggleDashboardMute() {
969
+ const icon = document.getElementById('dashboard-volume-icon');
970
+ if (icon.getAttribute('data-lucide') === 'volume-2') {
971
+ icon.setAttribute('data-lucide', 'volume-x');
972
+ } else {
973
+ icon.setAttribute('data-lucide', 'volume-2');
974
+ }
 
 
 
 
 
975
  lucide.createIcons();
 
 
 
 
 
 
976
  }
977
 
978
  // Feature Tabs