myetv-player 1.0.0 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.github/workflows/codeql.yml +100 -0
  2. package/README.md +36 -58
  3. package/SECURITY.md +50 -0
  4. package/css/myetv-player.css +301 -218
  5. package/css/myetv-player.min.css +1 -1
  6. package/dist/myetv-player.js +1713 -1503
  7. package/dist/myetv-player.min.js +1670 -1471
  8. package/package.json +6 -1
  9. package/plugins/README.md +1016 -0
  10. package/plugins/cloudflare/README.md +1068 -0
  11. package/plugins/cloudflare/myetv-player-cloudflare-stream-plugin.js +556 -0
  12. package/plugins/facebook/README.md +1024 -0
  13. package/plugins/facebook/myetv-player-facebook-plugin.js +437 -0
  14. package/plugins/gamepad-remote-controller/README.md +816 -0
  15. package/plugins/gamepad-remote-controller/myetv-player-gamepad-remote-plugin.js +678 -0
  16. package/plugins/google-adsense-ads/README.md +1 -0
  17. package/plugins/google-adsense-ads/g-adsense-ads-plugin.js +158 -0
  18. package/plugins/google-ima-ads/README.md +1 -0
  19. package/plugins/google-ima-ads/g-ima-ads-plugin.js +355 -0
  20. package/plugins/twitch/README.md +1185 -0
  21. package/plugins/twitch/myetv-player-twitch-plugin.js +569 -0
  22. package/plugins/vast-vpaid-ads/README.md +1 -0
  23. package/plugins/vast-vpaid-ads/vast-vpaid-ads-plugin.js +346 -0
  24. package/plugins/vimeo/README.md +1416 -0
  25. package/plugins/vimeo/myetv-player-vimeo.js +640 -0
  26. package/plugins/youtube/README.md +851 -0
  27. package/plugins/youtube/myetv-player-youtube-plugin.js +1714 -210
  28. package/scss/README.md +160 -0
  29. package/scss/_menus.scss +840 -672
  30. package/scss/_responsive.scss +67 -105
  31. package/scss/_volume.scss +67 -105
  32. package/src/README.md +559 -0
  33. package/src/controls.js +16 -4
  34. package/src/core.js +1192 -1062
  35. package/src/i18n.js +27 -1
  36. package/src/quality.js +478 -436
  37. package/src/subtitles.js +2 -2
@@ -7843,8 +7843,8 @@ video::-webkit-media-text-track-display {
7843
7843
  }
7844
7844
 
7845
7845
  /* Horizontal Volume Slider (default) - Base width reduced */
7846
- .volume-container[data-orientation=horizontal] .volume-slider {
7847
- width: 80px; /* Ridotto da var(--player-volume-width) a 80px fissi */
7846
+ .volume-container[data-mobile-slider=show] .volume-slider {
7847
+ width: 80px;
7848
7848
  height: var(--player-volume-height);
7849
7849
  background: var(--player-volume-bg);
7850
7850
  border-radius: calc(var(--player-volume-height) / 2);
@@ -7853,140 +7853,103 @@ video::-webkit-media-text-track-display {
7853
7853
 
7854
7854
  /* Responsive width reduction for horizontal slider */
7855
7855
  @media (max-width: 1200px) {
7856
- .volume-container[data-orientation=horizontal] .volume-slider {
7856
+ .volume-container[data-mobile-slider=show] .volume-slider {
7857
7857
  width: 70px;
7858
7858
  }
7859
7859
  }
7860
7860
  @media (max-width: 900px) {
7861
- .volume-container[data-orientation=horizontal] .volume-slider {
7861
+ .volume-container[data-mobile-slider=show] .volume-slider {
7862
7862
  width: 60px;
7863
7863
  }
7864
7864
  }
7865
7865
  @media (max-width: 768px) {
7866
- .volume-container[data-orientation=horizontal] .volume-slider {
7866
+ .volume-container[data-mobile-slider=show] .volume-slider {
7867
7867
  width: 50px;
7868
7868
  }
7869
7869
  }
7870
7870
  @media (max-width: 600px) {
7871
- .volume-container[data-orientation=horizontal] .volume-slider {
7871
+ .volume-container[data-mobile-slider=show] .volume-slider {
7872
7872
  width: 40px;
7873
7873
  }
7874
7874
  }
7875
- /* Vertical Volume Slider (always visible) */
7876
- .volume-container[data-orientation=vertical] {
7877
- flex-direction: column;
7878
- height: 80px;
7879
- justify-content: center;
7880
- }
7881
-
7882
- .volume-container[data-orientation=vertical] .volume-slider {
7883
- width: 4px;
7884
- height: 60px;
7885
- writing-mode: bt-lr; /* IE */
7886
- -webkit-appearance: slider-vertical; /* WebKit */
7887
- background: var(--player-volume-bg);
7888
- border-radius: 2px;
7889
- transform: rotate(0deg);
7890
- transition: all 0.3s ease;
7891
- }
7892
-
7893
- /* Responsive: Force vertical behavior for horizontal sliders under 550px */
7894
7875
  @media (max-width: 550px) {
7895
- /* Hide horizontal slider by default on mobile */
7896
- .volume-container[data-orientation=horizontal] .volume-slider {
7876
+ /* Hide tooltip on mobile */
7877
+ .volume-container[data-mobile-slider=show] .volume-tooltip {
7878
+ display: none !important;
7879
+ }
7880
+ /* Volume container */
7881
+ .volume-container[data-mobile-slider=show] {
7882
+ pointer-events: auto !important;
7883
+ position: relative;
7884
+ }
7885
+ /* Mute button */
7886
+ .mute-btn {
7887
+ position: relative;
7888
+ z-index: 100;
7889
+ pointer-events: auto !important;
7890
+ }
7891
+ /* Hide slider by default - stay open for 2 seconds */
7892
+ .volume-container[data-mobile-slider=show] .volume-slider {
7897
7893
  position: absolute;
7898
7894
  opacity: 0;
7899
7895
  visibility: hidden;
7900
7896
  pointer-events: none;
7901
7897
  width: 0;
7902
7898
  height: 0;
7903
- transform: translateX(-50%) rotate(-90deg);
7904
- transform-origin: center center;
7905
- transition: opacity 0.1s ease, visibility 0.1s ease;
7906
- }
7907
- /* Show vertical slider on hover for horizontal mode */
7908
- .mute-btn:hover + .volume-container[data-orientation=horizontal] .volume-slider,
7909
- .volume-container[data-orientation=horizontal]:hover .volume-slider {
7899
+ transform: translateX(-100%);
7900
+ transition: opacity 0s ease, visibility 0s ease 2s, width 0s ease 2s;
7901
+ }
7902
+ /* Show slider on hover */
7903
+ .controls-left:hover .volume-container[data-mobile-slider=show] .volume-slider,
7904
+ .mute-btn:hover ~ .volume-container[data-mobile-slider=show] .volume-slider,
7905
+ .volume-container[data-mobile-slider=show]:hover .volume-slider,
7906
+ .volume-slider:hover {
7910
7907
  position: absolute;
7911
7908
  opacity: 1;
7912
7909
  visibility: visible;
7913
- pointer-events: auto;
7914
- width: 60px;
7915
- height: 4px;
7916
- bottom: 45px;
7917
- left: -20px;
7918
- transform: translateX(-50%) translateY(0%) rotate(-90deg);
7919
- transform-origin: center center;
7920
- z-index: 1000;
7921
- background: rgba(0, 0, 0, 0.9);
7922
- border: 1px solid rgba(255, 255, 255, 0.2);
7923
- border-radius: 6px;
7924
- padding: 4px;
7910
+ pointer-events: auto !important;
7911
+ width: 90px !important;
7912
+ height: auto;
7913
+ bottom: auto;
7914
+ top: 50%;
7915
+ left: 5px;
7916
+ transform: translateY(-50%);
7917
+ z-index: 19;
7918
+ background: rgba(0, 0, 0, 0.92) !important;
7919
+ border: 1px solid rgba(255, 255, 255, 0.15);
7920
+ border-radius: 8px;
7921
+ padding: 10px 14px;
7922
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6);
7925
7923
  backdrop-filter: blur(10px);
7926
- box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
7927
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
7928
- }
7929
- /* Extend hover area of mute button for horizontal mode */
7930
- .volume-container[data-orientation=horizontal] + .mute-btn,
7931
- .mute-btn + .volume-container[data-orientation=horizontal] .mute-btn {
7932
- padding: 15px;
7933
- margin: -7px;
7934
- position: relative;
7935
- z-index: 1001;
7936
- }
7937
- /* Keep hover active when moving from button to slider */
7938
- .mute-btn:hover + .volume-container[data-orientation=horizontal]::before,
7939
- .volume-container[data-orientation=horizontal]::before {
7940
- content: "";
7941
- position: absolute;
7942
- top: -50px;
7943
- left: -40px;
7944
- right: -20px;
7945
- bottom: -10px;
7946
- background: transparent;
7947
- z-index: 999;
7948
- }
7949
- /* Hide thumb by default for horizontal mode on mobile */
7950
- .volume-container[data-orientation=horizontal] .volume-slider::-webkit-slider-thumb {
7951
- opacity: 0;
7952
- visibility: hidden;
7953
- transition: none !important;
7924
+ transition: opacity 0.2s ease, visibility 0s ease, width 0.2s ease;
7954
7925
  }
7955
- .volume-container[data-orientation=horizontal] .volume-slider::-moz-range-thumb {
7956
- opacity: 0;
7957
- visibility: hidden;
7958
- transition: none !important;
7926
+ /* Keep slider open when hovering controls-left */
7927
+ .controls-left:has(.volume-container[data-mobile-slider=show]):hover {
7928
+ pointer-events: auto !important;
7959
7929
  }
7960
- /* Show thumb only when in hover for horizontal mode */
7961
- .volume-container[data-orientation=horizontal]:hover .volume-slider::-webkit-slider-thumb,
7962
- .mute-btn:hover + .volume-container[data-orientation=horizontal] .volume-slider::-webkit-slider-thumb {
7963
- opacity: 1;
7964
- visibility: visible;
7930
+ /* Track styling */
7931
+ .controls-left:hover .volume-slider::-webkit-slider-runnable-track,
7932
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-runnable-track,
7933
+ .volume-slider:hover::-webkit-slider-runnable-track {
7934
+ width: 60px;
7935
+ height: 4px !important;
7936
+ background: linear-gradient(to right, var(--player-primary-color) 0%, var(--player-primary-color) var(--player-volume-fill, 50%), rgba(255, 255, 255, 0.4) var(--player-volume-fill, 50%), rgba(255, 255, 255, 0.4) 100%) !important;
7937
+ border-radius: 2px;
7938
+ }
7939
+ /* Thumb styling */
7940
+ .controls-left:hover .volume-slider::-webkit-slider-thumb,
7941
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-thumb,
7942
+ .volume-slider:hover::-webkit-slider-thumb {
7943
+ opacity: 1 !important;
7944
+ visibility: visible !important;
7965
7945
  -webkit-appearance: none;
7966
- width: var(--player-volume-handle-size);
7967
- height: var(--player-volume-handle-size);
7946
+ width: 14px;
7947
+ height: 14px;
7968
7948
  border-radius: 50%;
7969
- background: var(--player-primary-color);
7949
+ background: white;
7970
7950
  cursor: pointer;
7971
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
7972
- transition: none !important;
7973
- }
7974
- .volume-container[data-orientation=horizontal]:hover .volume-slider::-moz-range-thumb,
7975
- .mute-btn:hover + .volume-container[data-orientation=horizontal] .volume-slider::-moz-range-thumb {
7976
- opacity: 1;
7977
- visibility: visible;
7978
- width: var(--player-volume-handle-size);
7979
- height: var(--player-volume-handle-size);
7980
- border-radius: 50%;
7981
- background: var(--player-primary-color);
7982
- cursor: pointer;
7983
- border: none;
7984
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
7985
- transition: none !important;
7986
- }
7987
- /* Vertical sliders remain unchanged on mobile */
7988
- .volume-container[data-orientation=vertical] {
7989
- /* Keep original vertical styling */
7951
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
7952
+ margin-top: -5px;
7990
7953
  }
7991
7954
  }
7992
7955
  /* CHAPTER MARKERS SYSTEM */
@@ -8501,6 +8464,163 @@ video::-webkit-media-text-track-display {
8501
8464
  cursor: pointer !important;
8502
8465
  }
8503
8466
 
8467
+ /* ===================================
8468
+ ALL SUBMENUS - ULTRA-COMPACT FIX
8469
+ =================================== */
8470
+ /* Apply to ALL submenus */
8471
+ .settings-submenu,
8472
+ .subtitles-menu,
8473
+ .quality-submenu,
8474
+ .speed-submenu,
8475
+ .yt-subtitles-submenu,
8476
+ .yt-quality-submenu {
8477
+ /* Ultra-compact: fit to content */
8478
+ width: fit-content !important;
8479
+ min-width: auto !important;
8480
+ max-width: 180px !important;
8481
+ /* Always open to the LEFT */
8482
+ right: 100% !important;
8483
+ left: auto !important;
8484
+ margin-right: 5px !important;
8485
+ margin-left: 0 !important;
8486
+ /* Scrollbar for long lists */
8487
+ max-height: 250px !important;
8488
+ overflow-y: auto !important;
8489
+ overflow-x: hidden !important;
8490
+ /* Text handling */
8491
+ white-space: nowrap !important;
8492
+ }
8493
+
8494
+ /* All submenu options (inside submenus) */
8495
+ .settings-submenu .settings-suboption,
8496
+ .subtitles-menu .subtitle-option,
8497
+ .quality-submenu .quality-option,
8498
+ .speed-submenu .speed-option,
8499
+ .yt-subtitles-submenu .quality-option {
8500
+ padding: 8px 10px !important;
8501
+ font-size: 12px !important;
8502
+ white-space: nowrap !important;
8503
+ overflow: hidden !important;
8504
+ text-overflow: ellipsis !important;
8505
+ }
8506
+
8507
+ /* ===================================
8508
+ SETTINGS MENU - FONT CONSISTENCY
8509
+ =================================== */
8510
+ /* Main settings menu options (not in submenus) - keep consistent size */
8511
+ .settings-menu > .settings-option,
8512
+ .settings-menu > .subtitles-option {
8513
+ font-size: 13px !important;
8514
+ }
8515
+
8516
+ .settings-menu > .settings-option span,
8517
+ .settings-menu > .subtitles-option span {
8518
+ font-size: 13px !important;
8519
+ }
8520
+
8521
+ /* Override any existing .subtitles-option font-size */
8522
+ .subtitles-btn,
8523
+ .subtitles-control {
8524
+ font-size: 13px !important;
8525
+ }
8526
+
8527
+ /* ===================================
8528
+ RESPONSIVE - PROGRESSIVE REDUCTION
8529
+ =================================== */
8530
+ /* Tablets and larger phones */
8531
+ @media (max-width: 768px) {
8532
+ /* Main menu options stay readable */
8533
+ .settings-menu > .settings-option,
8534
+ .settings-menu > .subtitles-option {
8535
+ font-size: 12px !important;
8536
+ }
8537
+ /* Submenus get smaller */
8538
+ .settings-submenu,
8539
+ .subtitles-menu,
8540
+ .quality-submenu,
8541
+ .speed-submenu,
8542
+ .yt-subtitles-submenu,
8543
+ .yt-quality-submenu {
8544
+ max-width: min(140px, 100vw - 180px) !important;
8545
+ }
8546
+ .settings-submenu .settings-suboption,
8547
+ .subtitles-menu .subtitle-option,
8548
+ .quality-submenu .quality-option,
8549
+ .speed-submenu .speed-option,
8550
+ .yt-subtitles-submenu .quality-option {
8551
+ padding: 7px 8px !important;
8552
+ font-size: 11px !important;
8553
+ }
8554
+ }
8555
+ /* Small phones */
8556
+ @media (max-width: 600px) {
8557
+ .settings-menu > .settings-option,
8558
+ .settings-menu > .subtitles-option {
8559
+ font-size: 11px !important;
8560
+ }
8561
+ .settings-submenu,
8562
+ .subtitles-menu,
8563
+ .quality-submenu,
8564
+ .speed-submenu,
8565
+ .yt-subtitles-submenu,
8566
+ .yt-quality-submenu {
8567
+ max-width: min(120px, 100vw - 160px) !important;
8568
+ }
8569
+ .settings-submenu .settings-suboption,
8570
+ .subtitles-menu .subtitle-option,
8571
+ .quality-submenu .quality-option,
8572
+ .speed-submenu .speed-option,
8573
+ .yt-subtitles-submenu .quality-option {
8574
+ padding: 6px 7px !important;
8575
+ font-size: 10px !important;
8576
+ }
8577
+ }
8578
+ /* Very small phones */
8579
+ @media (max-width: 450px) {
8580
+ .settings-menu > .settings-option,
8581
+ .settings-menu > .subtitles-option {
8582
+ font-size: 10px !important;
8583
+ }
8584
+ .settings-submenu,
8585
+ .subtitles-menu,
8586
+ .quality-submenu,
8587
+ .speed-submenu,
8588
+ .yt-subtitles-submenu,
8589
+ .yt-quality-submenu {
8590
+ max-width: min(100px, 100vw - 140px) !important;
8591
+ }
8592
+ .settings-submenu .settings-suboption,
8593
+ .subtitles-menu .subtitle-option,
8594
+ .quality-submenu .quality-option,
8595
+ .speed-submenu .speed-option,
8596
+ .yt-subtitles-submenu .quality-option {
8597
+ padding: 5px 6px !important;
8598
+ font-size: 9px !important;
8599
+ }
8600
+ }
8601
+ /* Ultra small phones */
8602
+ @media (max-width: 350px) {
8603
+ .settings-menu > .settings-option,
8604
+ .settings-menu > .subtitles-option {
8605
+ font-size: 9px !important;
8606
+ }
8607
+ .settings-submenu,
8608
+ .subtitles-menu,
8609
+ .quality-submenu,
8610
+ .speed-submenu,
8611
+ .yt-subtitles-submenu,
8612
+ .yt-quality-submenu {
8613
+ max-width: min(90px, 100vw - 120px) !important;
8614
+ }
8615
+ .settings-submenu .settings-suboption,
8616
+ .subtitles-menu .subtitle-option,
8617
+ .quality-submenu .quality-option,
8618
+ .speed-submenu .speed-option,
8619
+ .yt-subtitles-submenu .quality-option {
8620
+ padding: 4px 5px !important;
8621
+ font-size: 8px !important;
8622
+ }
8623
+ }
8504
8624
  /* QUALITY BUTTON WITH DUAL DISPLAY */
8505
8625
  .quality-btn {
8506
8626
  min-height: 36px;
@@ -10889,7 +11009,7 @@ video::-webkit-media-text-track-display {
10889
11009
  color: var(--player-primary-color);
10890
11010
  }
10891
11011
 
10892
- /* RESPONSIVE DESIGN - PROGRESSIVE DEGRADATION CON MENU A TENDINA */
11012
+ /* RESPONSIVE DESIGN - PROGRESSIVE DEGRADATION WITH DROP-DOWN MENU */
10893
11013
  /* Large tablets and small desktops */
10894
11014
  @media (max-width: 768px) {
10895
11015
  .controls-left,
@@ -10984,19 +11104,19 @@ video::-webkit-media-text-track-display {
10984
11104
  margin-right: 5px;
10985
11105
  }
10986
11106
  }
10987
- /* SCHERMI MOLTO PICCOLI - ATTIVA MENU SETTINGS DROPDOWN */
11107
+ /* VERY SMALL SCREENS - ENABLE MENU SETTINGS DROPDOWN */
10988
11108
  @media (max-width: 350px) {
10989
- /* Mostra il menu Settings solo su schermi molto piccoli */
11109
+ /* Show the Settings menu only on very small screens */
10990
11110
  .settings-control {
10991
11111
  display: block !important;
10992
11112
  }
10993
- /* Nascondi i controlli individuali e spostali nel menu */
11113
+ /* Hide individual controls and move them to the menu */
10994
11114
  .pip-btn,
10995
11115
  .speed-control,
10996
11116
  .subtitles-control {
10997
11117
  display: none !important;
10998
11118
  }
10999
- /* Riduci ulteriormente gli spazi */
11119
+ /* Reduce the spaces further */
11000
11120
  .controls-left,
11001
11121
  .controls-right {
11002
11122
  gap: 4px;
@@ -11023,9 +11143,9 @@ video::-webkit-media-text-track-display {
11023
11143
  margin-right: 3px;
11024
11144
  }
11025
11145
  .volume-slider {
11026
- width: 30px; /* Volume slider ancora più piccolo */
11146
+ width: 30px; /* Even smaller volume slider */
11027
11147
  }
11028
- /* Riduci il menu settings per schermi ultra-piccoli */
11148
+ /* Reduce the settings menu for ultra-small screens */
11029
11149
  .settings-menu {
11030
11150
  min-width: 160px;
11031
11151
  font-size: 12px;
@@ -11072,7 +11192,7 @@ video::-webkit-media-text-track-display {
11072
11192
  .volume-slider {
11073
11193
  width: 25px;
11074
11194
  }
11075
- /* Menu settings ultra-compatto */
11195
+ /* Menu settings ultra-compact */
11076
11196
  .settings-menu {
11077
11197
  min-width: 140px;
11078
11198
  font-size: 11px;
@@ -13043,8 +13163,8 @@ video::-webkit-media-text-track-display {
13043
13163
  }
13044
13164
 
13045
13165
  /* Horizontal Volume Slider (default) - Base width reduced */
13046
- .volume-container[data-orientation=horizontal] .volume-slider {
13047
- width: 80px; /* Ridotto da var(--player-volume-width) a 80px fissi */
13166
+ .volume-container[data-mobile-slider=show] .volume-slider {
13167
+ width: 80px;
13048
13168
  height: var(--player-volume-height);
13049
13169
  background: var(--player-volume-bg);
13050
13170
  border-radius: calc(var(--player-volume-height) / 2);
@@ -13053,140 +13173,103 @@ video::-webkit-media-text-track-display {
13053
13173
 
13054
13174
  /* Responsive width reduction for horizontal slider */
13055
13175
  @media (max-width: 1200px) {
13056
- .volume-container[data-orientation=horizontal] .volume-slider {
13176
+ .volume-container[data-mobile-slider=show] .volume-slider {
13057
13177
  width: 70px;
13058
13178
  }
13059
13179
  }
13060
13180
  @media (max-width: 900px) {
13061
- .volume-container[data-orientation=horizontal] .volume-slider {
13181
+ .volume-container[data-mobile-slider=show] .volume-slider {
13062
13182
  width: 60px;
13063
13183
  }
13064
13184
  }
13065
13185
  @media (max-width: 768px) {
13066
- .volume-container[data-orientation=horizontal] .volume-slider {
13186
+ .volume-container[data-mobile-slider=show] .volume-slider {
13067
13187
  width: 50px;
13068
13188
  }
13069
13189
  }
13070
13190
  @media (max-width: 600px) {
13071
- .volume-container[data-orientation=horizontal] .volume-slider {
13191
+ .volume-container[data-mobile-slider=show] .volume-slider {
13072
13192
  width: 40px;
13073
13193
  }
13074
13194
  }
13075
- /* Vertical Volume Slider (always visible) */
13076
- .volume-container[data-orientation=vertical] {
13077
- flex-direction: column;
13078
- height: 80px;
13079
- justify-content: center;
13080
- }
13081
-
13082
- .volume-container[data-orientation=vertical] .volume-slider {
13083
- width: 4px;
13084
- height: 60px;
13085
- writing-mode: bt-lr; /* IE */
13086
- -webkit-appearance: slider-vertical; /* WebKit */
13087
- background: var(--player-volume-bg);
13088
- border-radius: 2px;
13089
- transform: rotate(0deg);
13090
- transition: all 0.3s ease;
13091
- }
13092
-
13093
- /* Responsive: Force vertical behavior for horizontal sliders under 550px */
13094
13195
  @media (max-width: 550px) {
13095
- /* Hide horizontal slider by default on mobile */
13096
- .volume-container[data-orientation=horizontal] .volume-slider {
13196
+ /* Hide tooltip on mobile */
13197
+ .volume-container[data-mobile-slider=show] .volume-tooltip {
13198
+ display: none !important;
13199
+ }
13200
+ /* Volume container */
13201
+ .volume-container[data-mobile-slider=show] {
13202
+ pointer-events: auto !important;
13203
+ position: relative;
13204
+ }
13205
+ /* Mute button */
13206
+ .mute-btn {
13207
+ position: relative;
13208
+ z-index: 100;
13209
+ pointer-events: auto !important;
13210
+ }
13211
+ /* Hide slider by default - stay open for 2 seconds */
13212
+ .volume-container[data-mobile-slider=show] .volume-slider {
13097
13213
  position: absolute;
13098
13214
  opacity: 0;
13099
13215
  visibility: hidden;
13100
13216
  pointer-events: none;
13101
13217
  width: 0;
13102
13218
  height: 0;
13103
- transform: translateX(-50%) rotate(-90deg);
13104
- transform-origin: center center;
13105
- transition: opacity 0.1s ease, visibility 0.1s ease;
13106
- }
13107
- /* Show vertical slider on hover for horizontal mode */
13108
- .mute-btn:hover + .volume-container[data-orientation=horizontal] .volume-slider,
13109
- .volume-container[data-orientation=horizontal]:hover .volume-slider {
13219
+ transform: translateX(-100%);
13220
+ transition: opacity 0s ease, visibility 0s ease 2s, width 0s ease 2s;
13221
+ }
13222
+ /* Show slider on hover */
13223
+ .controls-left:hover .volume-container[data-mobile-slider=show] .volume-slider,
13224
+ .mute-btn:hover ~ .volume-container[data-mobile-slider=show] .volume-slider,
13225
+ .volume-container[data-mobile-slider=show]:hover .volume-slider,
13226
+ .volume-slider:hover {
13110
13227
  position: absolute;
13111
13228
  opacity: 1;
13112
13229
  visibility: visible;
13113
- pointer-events: auto;
13114
- width: 60px;
13115
- height: 4px;
13116
- bottom: 45px;
13117
- left: -20px;
13118
- transform: translateX(-50%) translateY(0%) rotate(-90deg);
13119
- transform-origin: center center;
13120
- z-index: 1000;
13121
- background: rgba(0, 0, 0, 0.9);
13122
- border: 1px solid rgba(255, 255, 255, 0.2);
13123
- border-radius: 6px;
13124
- padding: 4px;
13230
+ pointer-events: auto !important;
13231
+ width: 90px !important;
13232
+ height: auto;
13233
+ bottom: auto;
13234
+ top: 50%;
13235
+ left: 5px;
13236
+ transform: translateY(-50%);
13237
+ z-index: 19;
13238
+ background: rgba(0, 0, 0, 0.92) !important;
13239
+ border: 1px solid rgba(255, 255, 255, 0.15);
13240
+ border-radius: 8px;
13241
+ padding: 10px 14px;
13242
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6);
13125
13243
  backdrop-filter: blur(10px);
13126
- box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
13127
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
13128
- }
13129
- /* Extend hover area of mute button for horizontal mode */
13130
- .volume-container[data-orientation=horizontal] + .mute-btn,
13131
- .mute-btn + .volume-container[data-orientation=horizontal] .mute-btn {
13132
- padding: 15px;
13133
- margin: -7px;
13134
- position: relative;
13135
- z-index: 1001;
13136
- }
13137
- /* Keep hover active when moving from button to slider */
13138
- .mute-btn:hover + .volume-container[data-orientation=horizontal]::before,
13139
- .volume-container[data-orientation=horizontal]::before {
13140
- content: "";
13141
- position: absolute;
13142
- top: -50px;
13143
- left: -40px;
13144
- right: -20px;
13145
- bottom: -10px;
13146
- background: transparent;
13147
- z-index: 999;
13148
- }
13149
- /* Hide thumb by default for horizontal mode on mobile */
13150
- .volume-container[data-orientation=horizontal] .volume-slider::-webkit-slider-thumb {
13151
- opacity: 0;
13152
- visibility: hidden;
13153
- transition: none !important;
13244
+ transition: opacity 0.2s ease, visibility 0s ease, width 0.2s ease;
13154
13245
  }
13155
- .volume-container[data-orientation=horizontal] .volume-slider::-moz-range-thumb {
13156
- opacity: 0;
13157
- visibility: hidden;
13158
- transition: none !important;
13246
+ /* Keep slider open when hovering controls-left */
13247
+ .controls-left:has(.volume-container[data-mobile-slider=show]):hover {
13248
+ pointer-events: auto !important;
13159
13249
  }
13160
- /* Show thumb only when in hover for horizontal mode */
13161
- .volume-container[data-orientation=horizontal]:hover .volume-slider::-webkit-slider-thumb,
13162
- .mute-btn:hover + .volume-container[data-orientation=horizontal] .volume-slider::-webkit-slider-thumb {
13163
- opacity: 1;
13164
- visibility: visible;
13250
+ /* Track styling */
13251
+ .controls-left:hover .volume-slider::-webkit-slider-runnable-track,
13252
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-runnable-track,
13253
+ .volume-slider:hover::-webkit-slider-runnable-track {
13254
+ width: 60px;
13255
+ height: 4px !important;
13256
+ background: linear-gradient(to right, var(--player-primary-color) 0%, var(--player-primary-color) var(--player-volume-fill, 50%), rgba(255, 255, 255, 0.4) var(--player-volume-fill, 50%), rgba(255, 255, 255, 0.4) 100%) !important;
13257
+ border-radius: 2px;
13258
+ }
13259
+ /* Thumb styling */
13260
+ .controls-left:hover .volume-slider::-webkit-slider-thumb,
13261
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-thumb,
13262
+ .volume-slider:hover::-webkit-slider-thumb {
13263
+ opacity: 1 !important;
13264
+ visibility: visible !important;
13165
13265
  -webkit-appearance: none;
13166
- width: var(--player-volume-handle-size);
13167
- height: var(--player-volume-handle-size);
13266
+ width: 14px;
13267
+ height: 14px;
13168
13268
  border-radius: 50%;
13169
- background: var(--player-primary-color);
13269
+ background: white;
13170
13270
  cursor: pointer;
13171
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
13172
- transition: none !important;
13173
- }
13174
- .volume-container[data-orientation=horizontal]:hover .volume-slider::-moz-range-thumb,
13175
- .mute-btn:hover + .volume-container[data-orientation=horizontal] .volume-slider::-moz-range-thumb {
13176
- opacity: 1;
13177
- visibility: visible;
13178
- width: var(--player-volume-handle-size);
13179
- height: var(--player-volume-handle-size);
13180
- border-radius: 50%;
13181
- background: var(--player-primary-color);
13182
- cursor: pointer;
13183
- border: none;
13184
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
13185
- transition: none !important;
13186
- }
13187
- /* Vertical sliders remain unchanged on mobile */
13188
- .volume-container[data-orientation=vertical] {
13189
- /* Keep original vertical styling */
13271
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
13272
+ margin-top: -5px;
13190
13273
  }
13191
13274
  }
13192
13275
  /* CHAPTER MARKERS SYSTEM */