myetv-player 1.0.0 → 1.0.8

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 (38) hide show
  1. package/.github/workflows/codeql.yml +100 -0
  2. package/README.md +49 -58
  3. package/SECURITY.md +50 -0
  4. package/css/myetv-player.css +424 -219
  5. package/css/myetv-player.min.css +1 -1
  6. package/dist/myetv-player.js +1759 -1502
  7. package/dist/myetv-player.min.js +1705 -1469
  8. package/package.json +7 -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/_controls.scss +184 -30
  30. package/scss/_menus.scss +840 -672
  31. package/scss/_responsive.scss +67 -105
  32. package/scss/_volume.scss +67 -105
  33. package/src/README.md +559 -0
  34. package/src/controls.js +17 -5
  35. package/src/core.js +1237 -1060
  36. package/src/i18n.js +27 -1
  37. package/src/quality.js +478 -436
  38. package/src/subtitles.js +2 -2
@@ -4591,7 +4591,128 @@ video::-webkit-media-text-track-display {
4591
4591
  cursor: pointer !important;
4592
4592
  }
4593
4593
 
4594
- /* CONTROLS - IMPROVED RESPONSIVE DESIGN */
4594
+ .progress-container {
4595
+ position: relative;
4596
+ overflow: visible !important;
4597
+ padding: 0;
4598
+ margin-bottom: 10px;
4599
+ display: flex;
4600
+ align-items: center;
4601
+ cursor: pointer;
4602
+ }
4603
+
4604
+ .progress-bar {
4605
+ position: relative;
4606
+ width: 100%;
4607
+ height: 4px;
4608
+ background: rgba(255, 255, 255, 0.3);
4609
+ border-radius: 2px;
4610
+ overflow: visible !important;
4611
+ cursor: pointer;
4612
+ }
4613
+
4614
+ .progress-buffer {
4615
+ position: absolute;
4616
+ left: 0;
4617
+ top: 0;
4618
+ height: 100%;
4619
+ background: rgba(255, 255, 255, 0.5);
4620
+ border-radius: 2px;
4621
+ pointer-events: none;
4622
+ z-index: 1;
4623
+ }
4624
+
4625
+ .progress-filled {
4626
+ position: absolute;
4627
+ left: 0;
4628
+ top: 0;
4629
+ height: 100%;
4630
+ background: var(--player-accent, #ff0000);
4631
+ border-radius: 2px;
4632
+ pointer-events: none;
4633
+ z-index: 2;
4634
+ }
4635
+
4636
+ .progress-handle {
4637
+ position: absolute;
4638
+ top: 50%;
4639
+ left: 0%;
4640
+ transform: translate(-50%, -50%);
4641
+ width: 14px;
4642
+ height: 14px;
4643
+ background: var(--player-accent, #ff0000);
4644
+ cursor: grab;
4645
+ transition: opacity 0.2s ease;
4646
+ z-index: 10;
4647
+ pointer-events: auto;
4648
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
4649
+ }
4650
+
4651
+ .progress-handle:active {
4652
+ cursor: grabbing;
4653
+ }
4654
+
4655
+ .progress-handle-circle {
4656
+ border-radius: 50%;
4657
+ }
4658
+
4659
+ .progress-handle-square {
4660
+ border-radius: 3px;
4661
+ }
4662
+
4663
+ .progress-handle-diamond {
4664
+ border-radius: 2px;
4665
+ transform: translate(-50%, -50%) rotate(45deg);
4666
+ }
4667
+
4668
+ .progress-handle-arrow {
4669
+ background: transparent;
4670
+ width: 0 !important;
4671
+ height: 0 !important;
4672
+ border-left: 7px solid transparent;
4673
+ border-right: 7px solid transparent;
4674
+ border-bottom: 14px solid var(--player-accent, #ff0000);
4675
+ border-radius: 0;
4676
+ box-shadow: none;
4677
+ }
4678
+
4679
+ .progress-handle-triangle {
4680
+ background: transparent;
4681
+ width: 0 !important;
4682
+ height: 0 !important;
4683
+ border-left: 8px solid transparent;
4684
+ border-right: 8px solid transparent;
4685
+ border-bottom: 14px solid var(--player-accent, #ff0000);
4686
+ border-radius: 0;
4687
+ box-shadow: none;
4688
+ }
4689
+
4690
+ .progress-handle-heart {
4691
+ width: 16px !important;
4692
+ height: 16px !important;
4693
+ clip-path: polygon(50% 15%, 65% 0%, 80% 0%, 95% 15%, 95% 30%, 50% 85%, 5% 30%, 5% 15%, 20% 0%, 35% 0%);
4694
+ }
4695
+
4696
+ .progress-handle-star {
4697
+ width: 16px !important;
4698
+ height: 16px !important;
4699
+ clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
4700
+ }
4701
+
4702
+ .progress-handle-none {
4703
+ opacity: 0 !important;
4704
+ pointer-events: none !important;
4705
+ }
4706
+
4707
+ .progress-handle {
4708
+ opacity: 1 !important;
4709
+ }
4710
+
4711
+ .progress-container .progress-handle {
4712
+ opacity: 1 !important;
4713
+ }
4714
+
4715
+ /* Main controls container */
4595
4716
  .controls {
4596
4717
  position: absolute;
4597
4718
  bottom: 0;
@@ -4607,6 +4728,7 @@ video::-webkit-media-text-track-display {
4607
4728
  box-sizing: border-box;
4608
4729
  }
4609
4730
 
4731
+ /* Controls visible state */
4610
4732
  .controls.show {
4611
4733
  opacity: 1;
4612
4734
  transform: translateY(0);
@@ -7843,8 +7965,8 @@ video::-webkit-media-text-track-display {
7843
7965
  }
7844
7966
 
7845
7967
  /* 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 */
7968
+ .volume-container[data-mobile-slider=show] .volume-slider {
7969
+ width: 80px;
7848
7970
  height: var(--player-volume-height);
7849
7971
  background: var(--player-volume-bg);
7850
7972
  border-radius: calc(var(--player-volume-height) / 2);
@@ -7853,140 +7975,103 @@ video::-webkit-media-text-track-display {
7853
7975
 
7854
7976
  /* Responsive width reduction for horizontal slider */
7855
7977
  @media (max-width: 1200px) {
7856
- .volume-container[data-orientation=horizontal] .volume-slider {
7978
+ .volume-container[data-mobile-slider=show] .volume-slider {
7857
7979
  width: 70px;
7858
7980
  }
7859
7981
  }
7860
7982
  @media (max-width: 900px) {
7861
- .volume-container[data-orientation=horizontal] .volume-slider {
7983
+ .volume-container[data-mobile-slider=show] .volume-slider {
7862
7984
  width: 60px;
7863
7985
  }
7864
7986
  }
7865
7987
  @media (max-width: 768px) {
7866
- .volume-container[data-orientation=horizontal] .volume-slider {
7988
+ .volume-container[data-mobile-slider=show] .volume-slider {
7867
7989
  width: 50px;
7868
7990
  }
7869
7991
  }
7870
7992
  @media (max-width: 600px) {
7871
- .volume-container[data-orientation=horizontal] .volume-slider {
7993
+ .volume-container[data-mobile-slider=show] .volume-slider {
7872
7994
  width: 40px;
7873
7995
  }
7874
7996
  }
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
7997
  @media (max-width: 550px) {
7895
- /* Hide horizontal slider by default on mobile */
7896
- .volume-container[data-orientation=horizontal] .volume-slider {
7998
+ /* Hide tooltip on mobile */
7999
+ .volume-container[data-mobile-slider=show] .volume-tooltip {
8000
+ display: none !important;
8001
+ }
8002
+ /* Volume container */
8003
+ .volume-container[data-mobile-slider=show] {
8004
+ pointer-events: auto !important;
8005
+ position: relative;
8006
+ }
8007
+ /* Mute button */
8008
+ .mute-btn {
8009
+ position: relative;
8010
+ z-index: 100;
8011
+ pointer-events: auto !important;
8012
+ }
8013
+ /* Hide slider by default - stay open for 2 seconds */
8014
+ .volume-container[data-mobile-slider=show] .volume-slider {
7897
8015
  position: absolute;
7898
8016
  opacity: 0;
7899
8017
  visibility: hidden;
7900
8018
  pointer-events: none;
7901
8019
  width: 0;
7902
8020
  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 {
8021
+ transform: translateX(-100%);
8022
+ transition: opacity 0s ease, visibility 0s ease 2s, width 0s ease 2s;
8023
+ }
8024
+ /* Show slider on hover */
8025
+ .controls-left:hover .volume-container[data-mobile-slider=show] .volume-slider,
8026
+ .mute-btn:hover ~ .volume-container[data-mobile-slider=show] .volume-slider,
8027
+ .volume-container[data-mobile-slider=show]:hover .volume-slider,
8028
+ .volume-slider:hover {
7910
8029
  position: absolute;
7911
8030
  opacity: 1;
7912
8031
  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;
8032
+ pointer-events: auto !important;
8033
+ width: 90px !important;
8034
+ height: auto;
8035
+ bottom: auto;
8036
+ top: 50%;
8037
+ left: 5px;
8038
+ transform: translateY(-50%);
8039
+ z-index: 19;
8040
+ background: rgba(0, 0, 0, 0.92) !important;
8041
+ border: 1px solid rgba(255, 255, 255, 0.15);
8042
+ border-radius: 8px;
8043
+ padding: 10px 14px;
8044
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6);
7925
8045
  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;
8046
+ transition: opacity 0.2s ease, visibility 0s ease, width 0.2s ease;
7936
8047
  }
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;
8048
+ /* Keep slider open when hovering controls-left */
8049
+ .controls-left:has(.volume-container[data-mobile-slider=show]):hover {
8050
+ pointer-events: auto !important;
7948
8051
  }
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;
7954
- }
7955
- .volume-container[data-orientation=horizontal] .volume-slider::-moz-range-thumb {
7956
- opacity: 0;
7957
- visibility: hidden;
7958
- transition: none !important;
7959
- }
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;
8052
+ /* Track styling */
8053
+ .controls-left:hover .volume-slider::-webkit-slider-runnable-track,
8054
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-runnable-track,
8055
+ .volume-slider:hover::-webkit-slider-runnable-track {
8056
+ width: 60px;
8057
+ height: 4px !important;
8058
+ 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;
8059
+ border-radius: 2px;
8060
+ }
8061
+ /* Thumb styling */
8062
+ .controls-left:hover .volume-slider::-webkit-slider-thumb,
8063
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-thumb,
8064
+ .volume-slider:hover::-webkit-slider-thumb {
8065
+ opacity: 1 !important;
8066
+ visibility: visible !important;
7965
8067
  -webkit-appearance: none;
7966
- width: var(--player-volume-handle-size);
7967
- height: var(--player-volume-handle-size);
7968
- border-radius: 50%;
7969
- background: var(--player-primary-color);
7970
- 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);
8068
+ width: 14px;
8069
+ height: 14px;
7980
8070
  border-radius: 50%;
7981
- background: var(--player-primary-color);
8071
+ background: white;
7982
8072
  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 */
8073
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
8074
+ margin-top: -5px;
7990
8075
  }
7991
8076
  }
7992
8077
  /* CHAPTER MARKERS SYSTEM */
@@ -8501,6 +8586,163 @@ video::-webkit-media-text-track-display {
8501
8586
  cursor: pointer !important;
8502
8587
  }
8503
8588
 
8589
+ /* ===================================
8590
+ ALL SUBMENUS - ULTRA-COMPACT FIX
8591
+ =================================== */
8592
+ /* Apply to ALL submenus */
8593
+ .settings-submenu,
8594
+ .subtitles-menu,
8595
+ .quality-submenu,
8596
+ .speed-submenu,
8597
+ .yt-subtitles-submenu,
8598
+ .yt-quality-submenu {
8599
+ /* Ultra-compact: fit to content */
8600
+ width: fit-content !important;
8601
+ min-width: auto !important;
8602
+ max-width: 180px !important;
8603
+ /* Always open to the LEFT */
8604
+ right: 100% !important;
8605
+ left: auto !important;
8606
+ margin-right: 5px !important;
8607
+ margin-left: 0 !important;
8608
+ /* Scrollbar for long lists */
8609
+ max-height: 250px !important;
8610
+ overflow-y: auto !important;
8611
+ overflow-x: hidden !important;
8612
+ /* Text handling */
8613
+ white-space: nowrap !important;
8614
+ }
8615
+
8616
+ /* All submenu options (inside submenus) */
8617
+ .settings-submenu .settings-suboption,
8618
+ .subtitles-menu .subtitle-option,
8619
+ .quality-submenu .quality-option,
8620
+ .speed-submenu .speed-option,
8621
+ .yt-subtitles-submenu .quality-option {
8622
+ padding: 8px 10px !important;
8623
+ font-size: 12px !important;
8624
+ white-space: nowrap !important;
8625
+ overflow: hidden !important;
8626
+ text-overflow: ellipsis !important;
8627
+ }
8628
+
8629
+ /* ===================================
8630
+ SETTINGS MENU - FONT CONSISTENCY
8631
+ =================================== */
8632
+ /* Main settings menu options (not in submenus) - keep consistent size */
8633
+ .settings-menu > .settings-option,
8634
+ .settings-menu > .subtitles-option {
8635
+ font-size: 13px !important;
8636
+ }
8637
+
8638
+ .settings-menu > .settings-option span,
8639
+ .settings-menu > .subtitles-option span {
8640
+ font-size: 13px !important;
8641
+ }
8642
+
8643
+ /* Override any existing .subtitles-option font-size */
8644
+ .subtitles-btn,
8645
+ .subtitles-control {
8646
+ font-size: 13px !important;
8647
+ }
8648
+
8649
+ /* ===================================
8650
+ RESPONSIVE - PROGRESSIVE REDUCTION
8651
+ =================================== */
8652
+ /* Tablets and larger phones */
8653
+ @media (max-width: 768px) {
8654
+ /* Main menu options stay readable */
8655
+ .settings-menu > .settings-option,
8656
+ .settings-menu > .subtitles-option {
8657
+ font-size: 12px !important;
8658
+ }
8659
+ /* Submenus get smaller */
8660
+ .settings-submenu,
8661
+ .subtitles-menu,
8662
+ .quality-submenu,
8663
+ .speed-submenu,
8664
+ .yt-subtitles-submenu,
8665
+ .yt-quality-submenu {
8666
+ max-width: min(140px, 100vw - 180px) !important;
8667
+ }
8668
+ .settings-submenu .settings-suboption,
8669
+ .subtitles-menu .subtitle-option,
8670
+ .quality-submenu .quality-option,
8671
+ .speed-submenu .speed-option,
8672
+ .yt-subtitles-submenu .quality-option {
8673
+ padding: 7px 8px !important;
8674
+ font-size: 11px !important;
8675
+ }
8676
+ }
8677
+ /* Small phones */
8678
+ @media (max-width: 600px) {
8679
+ .settings-menu > .settings-option,
8680
+ .settings-menu > .subtitles-option {
8681
+ font-size: 11px !important;
8682
+ }
8683
+ .settings-submenu,
8684
+ .subtitles-menu,
8685
+ .quality-submenu,
8686
+ .speed-submenu,
8687
+ .yt-subtitles-submenu,
8688
+ .yt-quality-submenu {
8689
+ max-width: min(120px, 100vw - 160px) !important;
8690
+ }
8691
+ .settings-submenu .settings-suboption,
8692
+ .subtitles-menu .subtitle-option,
8693
+ .quality-submenu .quality-option,
8694
+ .speed-submenu .speed-option,
8695
+ .yt-subtitles-submenu .quality-option {
8696
+ padding: 6px 7px !important;
8697
+ font-size: 10px !important;
8698
+ }
8699
+ }
8700
+ /* Very small phones */
8701
+ @media (max-width: 450px) {
8702
+ .settings-menu > .settings-option,
8703
+ .settings-menu > .subtitles-option {
8704
+ font-size: 10px !important;
8705
+ }
8706
+ .settings-submenu,
8707
+ .subtitles-menu,
8708
+ .quality-submenu,
8709
+ .speed-submenu,
8710
+ .yt-subtitles-submenu,
8711
+ .yt-quality-submenu {
8712
+ max-width: min(100px, 100vw - 140px) !important;
8713
+ }
8714
+ .settings-submenu .settings-suboption,
8715
+ .subtitles-menu .subtitle-option,
8716
+ .quality-submenu .quality-option,
8717
+ .speed-submenu .speed-option,
8718
+ .yt-subtitles-submenu .quality-option {
8719
+ padding: 5px 6px !important;
8720
+ font-size: 9px !important;
8721
+ }
8722
+ }
8723
+ /* Ultra small phones */
8724
+ @media (max-width: 350px) {
8725
+ .settings-menu > .settings-option,
8726
+ .settings-menu > .subtitles-option {
8727
+ font-size: 9px !important;
8728
+ }
8729
+ .settings-submenu,
8730
+ .subtitles-menu,
8731
+ .quality-submenu,
8732
+ .speed-submenu,
8733
+ .yt-subtitles-submenu,
8734
+ .yt-quality-submenu {
8735
+ max-width: min(90px, 100vw - 120px) !important;
8736
+ }
8737
+ .settings-submenu .settings-suboption,
8738
+ .subtitles-menu .subtitle-option,
8739
+ .quality-submenu .quality-option,
8740
+ .speed-submenu .speed-option,
8741
+ .yt-subtitles-submenu .quality-option {
8742
+ padding: 4px 5px !important;
8743
+ font-size: 8px !important;
8744
+ }
8745
+ }
8504
8746
  /* QUALITY BUTTON WITH DUAL DISPLAY */
8505
8747
  .quality-btn {
8506
8748
  min-height: 36px;
@@ -10889,7 +11131,7 @@ video::-webkit-media-text-track-display {
10889
11131
  color: var(--player-primary-color);
10890
11132
  }
10891
11133
 
10892
- /* RESPONSIVE DESIGN - PROGRESSIVE DEGRADATION CON MENU A TENDINA */
11134
+ /* RESPONSIVE DESIGN - PROGRESSIVE DEGRADATION WITH DROP-DOWN MENU */
10893
11135
  /* Large tablets and small desktops */
10894
11136
  @media (max-width: 768px) {
10895
11137
  .controls-left,
@@ -10984,19 +11226,19 @@ video::-webkit-media-text-track-display {
10984
11226
  margin-right: 5px;
10985
11227
  }
10986
11228
  }
10987
- /* SCHERMI MOLTO PICCOLI - ATTIVA MENU SETTINGS DROPDOWN */
11229
+ /* VERY SMALL SCREENS - ENABLE MENU SETTINGS DROPDOWN */
10988
11230
  @media (max-width: 350px) {
10989
- /* Mostra il menu Settings solo su schermi molto piccoli */
11231
+ /* Show the Settings menu only on very small screens */
10990
11232
  .settings-control {
10991
11233
  display: block !important;
10992
11234
  }
10993
- /* Nascondi i controlli individuali e spostali nel menu */
11235
+ /* Hide individual controls and move them to the menu */
10994
11236
  .pip-btn,
10995
11237
  .speed-control,
10996
11238
  .subtitles-control {
10997
11239
  display: none !important;
10998
11240
  }
10999
- /* Riduci ulteriormente gli spazi */
11241
+ /* Reduce the spaces further */
11000
11242
  .controls-left,
11001
11243
  .controls-right {
11002
11244
  gap: 4px;
@@ -11023,9 +11265,9 @@ video::-webkit-media-text-track-display {
11023
11265
  margin-right: 3px;
11024
11266
  }
11025
11267
  .volume-slider {
11026
- width: 30px; /* Volume slider ancora più piccolo */
11268
+ width: 30px; /* Even smaller volume slider */
11027
11269
  }
11028
- /* Riduci il menu settings per schermi ultra-piccoli */
11270
+ /* Reduce the settings menu for ultra-small screens */
11029
11271
  .settings-menu {
11030
11272
  min-width: 160px;
11031
11273
  font-size: 12px;
@@ -11072,7 +11314,7 @@ video::-webkit-media-text-track-display {
11072
11314
  .volume-slider {
11073
11315
  width: 25px;
11074
11316
  }
11075
- /* Menu settings ultra-compatto */
11317
+ /* Menu settings ultra-compact */
11076
11318
  .settings-menu {
11077
11319
  min-width: 140px;
11078
11320
  font-size: 11px;
@@ -13043,8 +13285,8 @@ video::-webkit-media-text-track-display {
13043
13285
  }
13044
13286
 
13045
13287
  /* 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 */
13288
+ .volume-container[data-mobile-slider=show] .volume-slider {
13289
+ width: 80px;
13048
13290
  height: var(--player-volume-height);
13049
13291
  background: var(--player-volume-bg);
13050
13292
  border-radius: calc(var(--player-volume-height) / 2);
@@ -13053,140 +13295,103 @@ video::-webkit-media-text-track-display {
13053
13295
 
13054
13296
  /* Responsive width reduction for horizontal slider */
13055
13297
  @media (max-width: 1200px) {
13056
- .volume-container[data-orientation=horizontal] .volume-slider {
13298
+ .volume-container[data-mobile-slider=show] .volume-slider {
13057
13299
  width: 70px;
13058
13300
  }
13059
13301
  }
13060
13302
  @media (max-width: 900px) {
13061
- .volume-container[data-orientation=horizontal] .volume-slider {
13303
+ .volume-container[data-mobile-slider=show] .volume-slider {
13062
13304
  width: 60px;
13063
13305
  }
13064
13306
  }
13065
13307
  @media (max-width: 768px) {
13066
- .volume-container[data-orientation=horizontal] .volume-slider {
13308
+ .volume-container[data-mobile-slider=show] .volume-slider {
13067
13309
  width: 50px;
13068
13310
  }
13069
13311
  }
13070
13312
  @media (max-width: 600px) {
13071
- .volume-container[data-orientation=horizontal] .volume-slider {
13313
+ .volume-container[data-mobile-slider=show] .volume-slider {
13072
13314
  width: 40px;
13073
13315
  }
13074
13316
  }
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
13317
  @media (max-width: 550px) {
13095
- /* Hide horizontal slider by default on mobile */
13096
- .volume-container[data-orientation=horizontal] .volume-slider {
13318
+ /* Hide tooltip on mobile */
13319
+ .volume-container[data-mobile-slider=show] .volume-tooltip {
13320
+ display: none !important;
13321
+ }
13322
+ /* Volume container */
13323
+ .volume-container[data-mobile-slider=show] {
13324
+ pointer-events: auto !important;
13325
+ position: relative;
13326
+ }
13327
+ /* Mute button */
13328
+ .mute-btn {
13329
+ position: relative;
13330
+ z-index: 100;
13331
+ pointer-events: auto !important;
13332
+ }
13333
+ /* Hide slider by default - stay open for 2 seconds */
13334
+ .volume-container[data-mobile-slider=show] .volume-slider {
13097
13335
  position: absolute;
13098
13336
  opacity: 0;
13099
13337
  visibility: hidden;
13100
13338
  pointer-events: none;
13101
13339
  width: 0;
13102
13340
  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 {
13341
+ transform: translateX(-100%);
13342
+ transition: opacity 0s ease, visibility 0s ease 2s, width 0s ease 2s;
13343
+ }
13344
+ /* Show slider on hover */
13345
+ .controls-left:hover .volume-container[data-mobile-slider=show] .volume-slider,
13346
+ .mute-btn:hover ~ .volume-container[data-mobile-slider=show] .volume-slider,
13347
+ .volume-container[data-mobile-slider=show]:hover .volume-slider,
13348
+ .volume-slider:hover {
13110
13349
  position: absolute;
13111
13350
  opacity: 1;
13112
13351
  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;
13352
+ pointer-events: auto !important;
13353
+ width: 90px !important;
13354
+ height: auto;
13355
+ bottom: auto;
13356
+ top: 50%;
13357
+ left: 5px;
13358
+ transform: translateY(-50%);
13359
+ z-index: 19;
13360
+ background: rgba(0, 0, 0, 0.92) !important;
13361
+ border: 1px solid rgba(255, 255, 255, 0.15);
13362
+ border-radius: 8px;
13363
+ padding: 10px 14px;
13364
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6);
13125
13365
  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;
13366
+ transition: opacity 0.2s ease, visibility 0s ease, width 0.2s ease;
13148
13367
  }
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;
13368
+ /* Keep slider open when hovering controls-left */
13369
+ .controls-left:has(.volume-container[data-mobile-slider=show]):hover {
13370
+ pointer-events: auto !important;
13154
13371
  }
13155
- .volume-container[data-orientation=horizontal] .volume-slider::-moz-range-thumb {
13156
- opacity: 0;
13157
- visibility: hidden;
13158
- transition: none !important;
13159
- }
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;
13372
+ /* Track styling */
13373
+ .controls-left:hover .volume-slider::-webkit-slider-runnable-track,
13374
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-runnable-track,
13375
+ .volume-slider:hover::-webkit-slider-runnable-track {
13376
+ width: 60px;
13377
+ height: 4px !important;
13378
+ 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;
13379
+ border-radius: 2px;
13380
+ }
13381
+ /* Thumb styling */
13382
+ .controls-left:hover .volume-slider::-webkit-slider-thumb,
13383
+ .volume-container[data-mobile-slider=show]:hover .volume-slider::-webkit-slider-thumb,
13384
+ .volume-slider:hover::-webkit-slider-thumb {
13385
+ opacity: 1 !important;
13386
+ visibility: visible !important;
13165
13387
  -webkit-appearance: none;
13166
- width: var(--player-volume-handle-size);
13167
- height: var(--player-volume-handle-size);
13168
- border-radius: 50%;
13169
- background: var(--player-primary-color);
13170
- 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);
13388
+ width: 14px;
13389
+ height: 14px;
13180
13390
  border-radius: 50%;
13181
- background: var(--player-primary-color);
13391
+ background: white;
13182
13392
  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 */
13393
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
13394
+ margin-top: -5px;
13190
13395
  }
13191
13396
  }
13192
13397
  /* CHAPTER MARKERS SYSTEM */