unified-video-framework 1.4.165 → 1.4.167

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.
@@ -21,7 +21,6 @@ export class WebPlayer extends BasePlayer {
21
21
  this.currentSubtitle = 'off';
22
22
  this.currentPlaybackRate = 1;
23
23
  this.isDragging = false;
24
- this.isSettingsOpen = false;
25
24
  this.settingsConfig = {
26
25
  enabled: true,
27
26
  speed: true,
@@ -3931,404 +3930,260 @@ export class WebPlayer extends BasePlayer {
3931
3930
  }
3932
3931
 
3933
3932
  /* Enhanced Responsive Media Queries with UX Best Practices */
3934
- /* Mobile devices (portrait) - Enhanced UX with Safe Areas */
3933
+ /* Mobile devices (portrait) - Material You Design (25-50-25 Layout) */
3935
3934
  @media screen and (max-width: 767px) and (orientation: portrait) {
3936
3935
  .uvf-responsive-container {
3937
3936
  padding: 0;
3938
3937
  width: 100vw !important;
3939
- height: calc(100vh - var(--uvf-safe-area-top) - var(--uvf-safe-area-bottom));
3938
+ height: 100vh;
3939
+ height: 100dvh;
3940
3940
  margin: 0;
3941
- position: relative;
3941
+ position: fixed;
3942
+ top: 0;
3943
+ left: 0;
3942
3944
  overflow: hidden;
3943
3945
  }
3944
3946
 
3945
- @supports (height: 100dvh) {
3946
- .uvf-responsive-container {
3947
- height: calc(100dvh - var(--uvf-safe-area-top) - var(--uvf-safe-area-bottom));
3948
- }
3949
- }
3950
-
3951
3947
  .uvf-responsive-container .uvf-player-wrapper {
3952
3948
  width: 100vw !important;
3953
- height: 100% !important;
3954
- min-height: calc(100vh - var(--uvf-safe-area-top) - var(--uvf-safe-area-bottom));
3955
- }
3956
-
3957
- @supports (height: 100dvh) {
3958
- .uvf-responsive-container .uvf-player-wrapper {
3959
- min-height: calc(100dvh - var(--uvf-safe-area-top) - var(--uvf-safe-area-bottom));
3960
- }
3949
+ height: 100vh;
3950
+ height: 100dvh;
3951
+ position: fixed;
3952
+ top: 0;
3953
+ left: 0;
3954
+ display: flex;
3955
+ flex-direction: column;
3956
+ background: #000;
3957
+ overflow: hidden;
3961
3958
  }
3962
3959
 
3960
+ /* Video container occupies middle 50% */
3963
3961
  .uvf-responsive-container .uvf-video-container {
3964
- width: 100vw !important;
3965
- height: 100% !important;
3962
+ height: 50vh;
3963
+ height: 50dvh;
3964
+ width: 100vw;
3965
+ position: relative;
3966
+ margin-top: 25vh;
3967
+ margin-top: 25dvh;
3966
3968
  aspect-ratio: unset !important;
3967
- min-height: inherit;
3969
+ background: radial-gradient(ellipse at center, #1a1a2e 0%, #000 100%);
3970
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4),
3971
+ 0 4px 16px rgba(0, 0, 0, 0.3),
3972
+ 0 2px 8px rgba(0, 0, 0, 0.2);
3968
3973
  }
3969
3974
 
3970
- /* Enhanced mobile controls bar with safe area padding - iOS Safari specific fixes */
3971
- .uvf-controls-bar {
3972
- position: absolute !important;
3973
- bottom: 0 !important;
3974
- left: 0 !important;
3975
- right: 0 !important;
3976
- padding: 16px 12px;
3977
- padding-bottom: calc(16px + var(--uvf-safe-area-bottom, 0px));
3978
- padding-left: calc(12px + var(--uvf-safe-area-left, 0px));
3979
- padding-right: calc(12px + var(--uvf-safe-area-right, 0px));
3980
- background: linear-gradient(to top, var(--uvf-overlay-strong) 0%, var(--uvf-overlay-medium) 80%, var(--uvf-overlay-transparent) 100%);
3981
- box-sizing: border-box;
3982
- z-index: 1000 !important;
3983
- /* iOS Safari specific fixes */
3984
- transform: translateZ(0);
3985
- -webkit-transform: translateZ(0);
3986
- will-change: transform;
3987
- /* Ensure proper stacking */
3988
- isolation: isolate;
3989
- }
3990
-
3991
- .uvf-progress-section {
3992
- margin-bottom: 16px;
3993
- }
3994
-
3995
- /* Mobile-first responsive controls layout */
3996
- .uvf-controls-row {
3997
- gap: 8px;
3998
- flex-wrap: nowrap;
3999
- align-items: center;
4000
- justify-content: space-between;
4001
- position: relative;
3975
+ .uvf-video {
4002
3976
  width: 100%;
3977
+ height: 100%;
3978
+ object-fit: contain;
4003
3979
  }
4004
3980
 
4005
- /* Left side controls group */
4006
- .uvf-left-controls {
4007
- display: flex;
4008
- align-items: center;
4009
- gap: 8px;
4010
- flex-shrink: 0;
4011
- }
4012
-
4013
- /* Center controls group */
4014
- .uvf-center-controls {
4015
- display: flex;
4016
- align-items: center;
4017
- gap: 8px;
4018
- flex: 1;
4019
- justify-content: center;
4020
- }
4021
-
4022
- /* Mobile control groups reordering */
4023
- .uvf-controls-row .uvf-control-btn.play-pause,
4024
- .uvf-controls-row #uvf-skip-back,
4025
- .uvf-controls-row #uvf-skip-forward {
4026
- order: 1;
4027
- }
4028
-
4029
- .uvf-controls-row .uvf-volume-control {
4030
- order: 2;
4031
- }
4032
-
4033
- .uvf-controls-row .uvf-time-display:not(.uvf-above-seekbar) {
4034
- order: 3;
4035
- margin-left: auto;
4036
- margin-right: 8px;
4037
- }
4038
-
4039
- .uvf-controls-row .uvf-right-controls {
4040
- order: 4;
4041
- margin-left: 0;
4042
- }
4043
-
4044
- /* Touch-friendly control sizing (minimum 44px touch target) */
4045
- .uvf-control-btn {
4046
- width: 44px;
4047
- height: 44px;
4048
- min-width: 44px;
4049
- min-height: 44px;
4050
- border-radius: 22px;
4051
- background: rgba(255,255,255,0.15);
4052
- backdrop-filter: blur(8px);
4053
- }
4054
-
4055
- .uvf-control-btn.play-pause {
4056
- width: 52px;
4057
- height: 52px;
4058
- min-width: 52px;
4059
- min-height: 52px;
4060
- border-radius: 26px;
4061
- background: linear-gradient(135deg, var(--uvf-accent-1), var(--uvf-accent-2));
4062
- box-shadow: 0 4px 12px rgba(var(--uvf-accent-1), 0.3);
4063
- }
4064
-
4065
- .uvf-control-btn svg {
4066
- width: 20px;
4067
- height: 20px;
4068
- }
4069
-
4070
- .uvf-control-btn.play-pause svg {
4071
- width: 24px;
4072
- height: 24px;
4073
- }
4074
-
4075
- /* Skip buttons with clear visual hierarchy */
4076
- #uvf-skip-back,
4077
- #uvf-skip-forward {
4078
- background: rgba(255,255,255,0.12);
3981
+ /* Top black section (25%) - Tap zone */
3982
+ .uvf-player-wrapper::before {
3983
+ content: '';
3984
+ position: absolute;
3985
+ top: 0;
3986
+ left: 0;
3987
+ width: 100vw;
3988
+ height: 25vh;
3989
+ height: 25dvh;
3990
+ background: #000;
3991
+ z-index: 1;
3992
+ pointer-events: all;
3993
+ touch-action: manipulation;
4079
3994
  }
4080
3995
 
4081
- #uvf-skip-back svg,
4082
- #uvf-skip-forward svg {
4083
- width: 22px;
4084
- height: 22px;
3996
+ /* Bottom black section (25%) - Controls area */
3997
+ .uvf-player-wrapper::after {
3998
+ content: '';
3999
+ position: absolute;
4000
+ bottom: 0;
4001
+ left: 0;
4002
+ width: 100vw;
4003
+ height: 25vh;
4004
+ height: 25dvh;
4005
+ background: linear-gradient(to top,
4006
+ #000 0%,
4007
+ rgba(0, 0, 0, 0.98) 20%,
4008
+ rgba(0, 0, 0, 0.95) 100%);
4009
+ z-index: 1;
4010
+ pointer-events: none;
4085
4011
  }
4086
4012
 
4087
- /* Mobile time display - compact but readable */
4088
- .uvf-time-display:not(.uvf-above-seekbar) {
4089
- font-size: 12px;
4090
- font-weight: 600;
4091
- padding: 0 6px;
4092
- text-align: center;
4093
- background: rgba(0,0,0,0.3);
4094
- border-radius: 12px;
4095
- text-shadow: 0 1px 3px rgba(0,0,0,0.8);
4096
- flex-shrink: 0;
4013
+ /* Material surface container for controls */
4014
+ .uvf-controls-bar {
4015
+ position: absolute;
4016
+ bottom: 0;
4017
+ left: 0;
4018
+ right: 0;
4019
+ height: auto;
4020
+ max-height: 25vh;
4021
+ max-height: 25dvh;
4022
+ padding: 16px 20px;
4023
+ padding-bottom: calc(16px + var(--uvf-safe-area-bottom, 0px));
4024
+ background: transparent;
4025
+ z-index: 2;
4026
+ display: flex;
4027
+ flex-direction: column;
4028
+ justify-content: flex-end;
4029
+ backdrop-filter: blur(24px);
4030
+ -webkit-backdrop-filter: blur(24px);
4097
4031
  }
4098
4032
 
4099
- /* Above-seekbar time display for mobile */
4100
- .uvf-time-display.uvf-above-seekbar {
4101
- font-size: 12px !important;
4102
- font-weight: 500 !important;
4103
- padding: 3px 6px !important;
4104
- background: rgba(0,0,0,0.4) !important;
4105
- border-radius: 10px !important;
4106
- text-shadow: 0 1px 2px rgba(0,0,0,0.8) !important;
4107
- backdrop-filter: blur(4px) !important;
4108
- border: 1px solid rgba(255,255,255,0.1) !important;
4033
+ /* Material surface tint overlay */
4034
+ .uvf-controls-bar::before {
4035
+ content: '';
4036
+ position: absolute;
4037
+ inset: 0;
4038
+ background: var(--uvf-surface-tint, rgba(255, 0, 0, 0.08));
4039
+ border-radius: 28px 28px 0 0;
4040
+ pointer-events: none;
4041
+ z-index: -1;
4109
4042
  }
4110
4043
 
4111
- /* Simplified volume control for mobile */
4112
- .uvf-volume-control {
4113
- order: 3;
4044
+ /* Progress bar with chapter markers */
4045
+ .uvf-progress-section {
4046
+ margin-bottom: 12px;
4114
4047
  position: relative;
4115
4048
  }
4116
4049
 
4117
- /* Hide volume panel on mobile - use device controls */
4118
- .uvf-volume-panel {
4119
- display: none;
4120
- }
4121
-
4122
- /* Mobile volume button as simple mute toggle */
4123
- .uvf-volume-control .uvf-control-btn {
4124
- width: 44px;
4125
- height: 44px;
4126
- }
4127
-
4128
- /* Compact right controls for mobile */
4129
- .uvf-right-controls {
4130
- gap: 6px;
4131
- display: flex;
4132
- align-items: center;
4133
- flex-shrink: 0;
4050
+ .uvf-progress-bar-wrapper {
4051
+ padding: 12px 0;
4134
4052
  position: relative;
4135
- z-index: 10;
4136
4053
  }
4137
4054
 
4138
- /* Ensure settings container is visible */
4139
- .uvf-right-controls > div[style*="position: relative"],
4140
- .uvf-settings-container {
4141
- display: flex !important;
4142
- position: relative !important;
4143
- align-items: center !important;
4144
- justify-content: center !important;
4145
- min-width: 44px !important;
4146
- min-height: 44px !important;
4147
- }
4148
-
4149
- /* Remove quality badge completely - not essential */
4150
- .uvf-quality-badge {
4151
- display: none !important;
4152
- }
4153
-
4154
- /* Settings menu - hidden by default, accessible via menu */
4155
- .uvf-settings-menu {
4156
- min-width: 160px;
4157
- bottom: 60px;
4158
- right: 12px;
4159
- font-size: 14px;
4160
- max-height: 50vh;
4161
- }
4162
-
4163
- .uvf-settings-option {
4164
- padding: 12px 16px;
4165
- font-size: 14px;
4166
- min-height: 44px;
4167
- display: flex;
4168
- align-items: center;
4169
- }
4170
-
4171
- .uvf-settings-option:hover {
4172
- background: rgba(255,255,255,0.15);
4173
- padding-left: 20px;
4055
+ .uvf-progress-bar {
4056
+ height: 4px;
4057
+ background: rgba(255, 255, 255, 0.2);
4058
+ border-radius: 4px;
4059
+ position: relative;
4060
+ overflow: visible;
4061
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
4174
4062
  }
4175
4063
 
4176
- /* Simplified settings - hide complex options */
4177
- .uvf-settings-group:first-child .uvf-settings-option[data-speed="0.5"],
4178
- .uvf-settings-group:first-child .uvf-settings-option[data-speed="0.75"],
4179
- .uvf-settings-group:first-child .uvf-settings-option[data-speed="2"] {
4180
- display: none;
4181
- }
4064
+ .uvf-progress-filled {
4065
+ background: var(--uvf-accent-1, #ff0000);
4066
+ box-shadow: 0 0 8px var(--uvf-accent-1, #ff0000);
4182
4067
  }
4183
4068
 
4184
- /* Enhanced top controls for mobile with safe area support */
4185
- .uvf-top-controls {
4186
- position: absolute;
4187
- top: calc(12px + var(--uvf-safe-area-top));
4188
- right: calc(12px + var(--uvf-safe-area-right));
4189
- display: flex;
4190
- align-items: center;
4191
- gap: 8px;
4192
- z-index: 10;
4193
- }
4194
-
4195
- /* Touch-friendly top buttons */
4196
- .uvf-top-btn {
4197
- width: 44px;
4198
- height: 44px;
4199
- min-width: 44px;
4200
- min-height: 44px;
4201
- background: rgba(0,0,0,0.7);
4202
- backdrop-filter: blur(10px);
4203
- border: 1px solid rgba(255,255,255,0.2);
4204
- }
4205
-
4206
- .uvf-top-btn svg {
4069
+ .uvf-progress-handle {
4207
4070
  width: 20px;
4208
4071
  height: 20px;
4072
+ background: var(--uvf-accent-1, #ff0000);
4073
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3),
4074
+ 0 0 0 0 var(--uvf-accent-1, #ff0000);
4075
+ transition: box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
4209
4076
  }
4210
4077
 
4211
- /* Share button - keep visible on all devices */
4212
- #uvf-share-btn {
4213
- display: flex;
4214
- }
4215
-
4216
- /* Enhanced title bar for mobile with safe area support */
4217
- .uvf-title-bar {
4218
- padding: 12px;
4219
- padding-top: calc(12px + var(--uvf-safe-area-top));
4220
- padding-left: calc(12px + var(--uvf-safe-area-left));
4221
- padding-right: calc(12px + var(--uvf-safe-area-right));
4222
- }
4223
-
4224
- .uvf-video-title {
4225
- font-size: 16px;
4226
- font-weight: 700;
4227
- line-height: 1.2;
4228
- }
4229
-
4230
- .uvf-video-subtitle {
4231
- font-size: 12px;
4232
- margin-top: 4px;
4233
- opacity: 0.8;
4078
+ .uvf-progress-handle:active {
4079
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4),
4080
+ 0 0 0 12px rgba(255, 0, 0, 0.15);
4081
+ transform: translate(-50%, -50%) scale(1.2);
4234
4082
  }
4235
4083
 
4236
- .uvf-video-thumb {
4084
+ /* Material Design control buttons */
4085
+ .uvf-control-btn {
4237
4086
  width: 48px;
4238
4087
  height: 48px;
4239
- border-radius: 6px;
4240
- }
4241
-
4242
- /* Touch-optimized center play button - uses same themed style as desktop */
4243
- .uvf-center-play-btn {
4244
- width: clamp(72px, 18vw, 96px);
4245
- height: clamp(72px, 18vw, 96px);
4246
- background: linear-gradient(135deg, var(--uvf-accent-1), var(--uvf-accent-2));
4247
- border: 0;
4248
- box-shadow: 0 10px 30px var(--uvf-accent-1-20);
4088
+ min-width: 48px;
4089
+ min-height: 48px;
4090
+ background: rgba(255, 255, 255, 0.12);
4091
+ border-radius: 24px;
4092
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12),
4093
+ 0 1px 2px rgba(0, 0, 0, 0.24);
4094
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
4095
+ position: relative;
4096
+ overflow: hidden;
4249
4097
  }
4250
4098
 
4251
- .uvf-center-play-btn:hover {
4252
- transform: scale(1.06);
4253
- filter: saturate(1.08) brightness(1.05);
4254
- box-shadow: 0 14px 36px var(--uvf-accent-1-20);
4099
+ /* Material ripple effect */
4100
+ .uvf-control-btn::before {
4101
+ content: '';
4102
+ position: absolute;
4103
+ inset: 0;
4104
+ background: rgba(255, 255, 255, 0.1);
4105
+ border-radius: inherit;
4106
+ opacity: 0;
4107
+ transition: opacity 0.2s ease;
4255
4108
  }
4256
4109
 
4257
- .uvf-center-play-btn svg {
4258
- width: clamp(28px, 5.2vw, 38px);
4259
- height: clamp(28px, 5.2vw, 38px);
4260
- margin-left: 4px;
4110
+ .uvf-control-btn:active::before {
4111
+ opacity: 1;
4261
4112
  }
4262
4113
 
4263
- /* Enhanced progress bar for touch */
4264
- .uvf-progress-bar {
4265
- height: 3px;
4266
- margin-bottom: 12px;
4267
- border-radius: 4px;
4268
- background: rgba(255,255,255,0.15);
4269
- position: relative;
4114
+ .uvf-control-btn:active {
4115
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16),
4116
+ 0 3px 6px rgba(0, 0, 0, 0.23);
4117
+ transform: scale(0.95);
4270
4118
  }
4271
4119
 
4272
- /* Larger touch target for progress bar */
4273
- .uvf-progress-bar-wrapper::before {
4274
- content: '';
4275
- position: absolute;
4276
- top: -10px;
4277
- left: 0;
4278
- right: 0;
4279
- bottom: -10px;
4280
- z-index: 1;
4120
+ .uvf-control-btn.play-pause {
4121
+ width: 56px;
4122
+ height: 56px;
4123
+ min-width: 56px;
4124
+ min-height: 56px;
4125
+ border-radius: 28px;
4126
+ background: linear-gradient(135deg,
4127
+ var(--uvf-accent-1, #ff0000),
4128
+ var(--uvf-accent-2, #ff4d4f));
4129
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2),
4130
+ 0 2px 4px rgba(0, 0, 0, 0.15),
4131
+ 0 0 0 0 var(--uvf-accent-1, #ff0000);
4281
4132
  }
4282
4133
 
4283
- .uvf-progress-handle {
4284
- width: 18px;
4285
- height: 18px;
4286
- background: #fff;
4287
- box-shadow: 0 2px 8px rgba(0,0,0,0.3);
4134
+ .uvf-control-btn.play-pause:active {
4135
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.25),
4136
+ 0 4px 8px rgba(0, 0, 0, 0.20),
4137
+ 0 0 0 8px rgba(255, 0, 0, 0.12);
4288
4138
  }
4289
4139
 
4290
- .uvf-progress-bar-wrapper:active .uvf-progress-handle {
4291
- transform: translate(-50%, -50%) scale(1.2);
4140
+ .uvf-control-btn svg {
4141
+ width: 20px;
4142
+ height: 20px;
4292
4143
  }
4293
4144
 
4294
- /* Mobile accessibility improvements */
4295
- .uvf-control-btn,
4296
- .uvf-top-btn {
4297
- position: relative;
4298
- overflow: visible;
4145
+ .uvf-control-btn.play-pause svg {
4146
+ width: 24px;
4147
+ height: 24px;
4299
4148
  }
4300
4149
 
4301
- /* Enhanced focus states for mobile */
4302
- .uvf-control-btn:focus,
4303
- .uvf-top-btn:focus {
4304
- outline: 2px solid var(--uvf-accent-1);
4305
- outline-offset: 2px;
4150
+ /* Controls row with Material spacing */
4151
+ .uvf-controls-row {
4152
+ gap: 16px;
4153
+ padding: 0;
4154
+ align-items: center;
4306
4155
  }
4307
4156
 
4308
-
4309
- /* Show PiP on all devices - modern mobile browsers support it well */
4310
- #uvf-pip-btn {
4311
- display: block;
4312
- background: rgba(255,255,255,0.12);
4313
- border: 1px solid rgba(255,255,255,0.1);
4157
+ /* Time display with Material surface */
4158
+ .uvf-time-display {
4159
+ background: rgba(255, 255, 255, 0.1);
4160
+ backdrop-filter: blur(8px);
4161
+ border-radius: 16px;
4162
+ padding: 6px 12px;
4163
+ font-size: 13px;
4164
+ font-weight: 500;
4165
+ font-feature-settings: 'tnum';
4166
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
4314
4167
  }
4315
4168
 
4316
- /* Essential controls in right section - Settings, PiP, and Fullscreen only */
4317
- .uvf-right-controls > *:not(#uvf-settings-btn):not(#uvf-fullscreen-btn):not(#uvf-pip-btn) {
4318
- display: none;
4169
+ /* Hide desktop elements */
4170
+ .uvf-top-controls,
4171
+ .uvf-title-bar,
4172
+ .uvf-volume-control,
4173
+ #uvf-skip-back,
4174
+ #uvf-skip-forward {
4175
+ display: none !important;
4319
4176
  }
4320
4177
 
4321
- /* Ensure settings button is always visible and properly sized on mobile */
4178
+ /* Optimize settings button for Material You */
4322
4179
  #uvf-settings-btn {
4323
- display: flex !important;
4324
- width: 44px !important;
4325
- height: 44px !important;
4326
- min-width: 44px !important;
4327
- min-height: 44px !important;
4328
- backdrop-filter: blur(8px) !important;
4329
- border-radius: 22px !important;
4330
- align-items: center !important;
4331
- justify-content: center !important;
4180
+ width: 48px !important;
4181
+ height: 48px !important;
4182
+ min-width: 48px !important;
4183
+ min-height: 48px !important;
4184
+ border-radius: 24px !important;
4185
+ }
4186
+ }
4332
4187
  }
4333
4188
 
4334
4189
  #uvf-settings-btn svg {
@@ -5750,12 +5605,7 @@ export class WebPlayer extends BasePlayer {
5750
5605
  this.debugLog('Settings menu classes before toggle:', Array.from(settingsMenu?.classList || []).join(' '));
5751
5606
  settingsMenu?.classList.toggle('active');
5752
5607
  if (settingsMenu) {
5753
- const activating = settingsMenu.classList.contains('active');
5754
- if (activating) {
5755
- this.isSettingsOpen = true;
5756
- this.showControls();
5757
- if (this.hideControlsTimeout)
5758
- clearTimeout(this.hideControlsTimeout);
5608
+ if (settingsMenu.classList.contains('active')) {
5759
5609
  settingsMenu.style.display = 'block';
5760
5610
  settingsMenu.style.visibility = 'visible';
5761
5611
  settingsMenu.style.opacity = '1';
@@ -5772,12 +5622,10 @@ export class WebPlayer extends BasePlayer {
5772
5622
  this.debugLog('Applied fallback styles to show menu');
5773
5623
  }
5774
5624
  else {
5775
- this.isSettingsOpen = false;
5776
5625
  settingsMenu.style.display = 'none';
5777
5626
  settingsMenu.style.visibility = 'hidden';
5778
5627
  settingsMenu.style.opacity = '0';
5779
5628
  this.debugLog('Applied fallback styles to hide menu');
5780
- this.scheduleHideControls();
5781
5629
  }
5782
5630
  }
5783
5631
  this.debugLog('Settings menu classes after toggle:', Array.from(settingsMenu?.classList || []).join(' '));
@@ -5805,19 +5653,6 @@ export class WebPlayer extends BasePlayer {
5805
5653
  this.hideSettingsMenu();
5806
5654
  }
5807
5655
  });
5808
- if (settingsMenu) {
5809
- const keepAlive = () => {
5810
- if (!this.isSettingsOpen)
5811
- return;
5812
- this.showControls();
5813
- if (this.hideControlsTimeout)
5814
- clearTimeout(this.hideControlsTimeout);
5815
- };
5816
- settingsMenu.addEventListener('mouseenter', keepAlive);
5817
- settingsMenu.addEventListener('mousemove', keepAlive);
5818
- settingsMenu.addEventListener('touchstart', keepAlive, { passive: true });
5819
- settingsMenu.addEventListener('touchmove', keepAlive, { passive: true });
5820
- }
5821
5656
  document.addEventListener('keydown', (e) => {
5822
5657
  if (e.key === 'Escape' && settingsMenu?.classList.contains('active')) {
5823
5658
  this.hideSettingsMenu();
@@ -6371,8 +6206,6 @@ export class WebPlayer extends BasePlayer {
6371
6206
  hideControls() {
6372
6207
  if (!this.state.isPlaying)
6373
6208
  return;
6374
- if (this.isSettingsOpen)
6375
- return;
6376
6209
  const wrapper = this.container?.querySelector('.uvf-player-wrapper');
6377
6210
  if (wrapper) {
6378
6211
  wrapper.classList.remove('controls-visible');
@@ -6382,13 +6215,11 @@ export class WebPlayer extends BasePlayer {
6382
6215
  scheduleHideControls() {
6383
6216
  if (!this.state.isPlaying)
6384
6217
  return;
6385
- if (this.isSettingsOpen)
6386
- return;
6387
6218
  if (this.hideControlsTimeout)
6388
6219
  clearTimeout(this.hideControlsTimeout);
6389
6220
  const timeout = this.isFullscreen() ? 4000 : 3000;
6390
6221
  this.hideControlsTimeout = setTimeout(() => {
6391
- if (this.state.isPlaying && !this.controlsContainer?.matches(':hover') && !this.isSettingsOpen) {
6222
+ if (this.state.isPlaying && !this.controlsContainer?.matches(':hover')) {
6392
6223
  this.hideControls();
6393
6224
  }
6394
6225
  }, timeout);
@@ -7425,7 +7256,6 @@ export class WebPlayer extends BasePlayer {
7425
7256
  if (!settingsMenu)
7426
7257
  return;
7427
7258
  settingsMenu.classList.remove('active');
7428
- this.isSettingsOpen = false;
7429
7259
  settingsMenu.style.display = 'none';
7430
7260
  settingsMenu.style.visibility = 'hidden';
7431
7261
  settingsMenu.style.opacity = '0';
@@ -7433,7 +7263,6 @@ export class WebPlayer extends BasePlayer {
7433
7263
  item.classList.remove('expanded');
7434
7264
  });
7435
7265
  this.debugLog('Settings menu hidden via hideSettingsMenu()');
7436
- this.scheduleHideControls();
7437
7266
  }
7438
7267
  updateAccordionAfterSelection(section) {
7439
7268
  setTimeout(() => {