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) -
|
|
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:
|
|
3938
|
+
height: 100vh;
|
|
3939
|
+
height: 100dvh;
|
|
3940
3940
|
margin: 0;
|
|
3941
|
-
position:
|
|
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:
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
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
|
-
|
|
3965
|
-
height:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
/*
|
|
4006
|
-
.uvf-
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
|
|
4010
|
-
|
|
4011
|
-
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
|
|
4015
|
-
|
|
4016
|
-
|
|
4017
|
-
|
|
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
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
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
|
-
/*
|
|
4088
|
-
.uvf-
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
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
|
-
/*
|
|
4100
|
-
.uvf-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
background: rgba(
|
|
4105
|
-
border-radius:
|
|
4106
|
-
|
|
4107
|
-
|
|
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
|
-
/*
|
|
4112
|
-
.uvf-
|
|
4113
|
-
|
|
4044
|
+
/* Progress bar with chapter markers */
|
|
4045
|
+
.uvf-progress-section {
|
|
4046
|
+
margin-bottom: 12px;
|
|
4114
4047
|
position: relative;
|
|
4115
4048
|
}
|
|
4116
4049
|
|
|
4117
|
-
|
|
4118
|
-
|
|
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
|
-
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
position: relative
|
|
4143
|
-
|
|
4144
|
-
|
|
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
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
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
|
-
|
|
4084
|
+
/* Material Design control buttons */
|
|
4085
|
+
.uvf-control-btn {
|
|
4237
4086
|
width: 48px;
|
|
4238
4087
|
height: 48px;
|
|
4239
|
-
|
|
4240
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
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
|
-
|
|
4252
|
-
|
|
4253
|
-
|
|
4254
|
-
|
|
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-
|
|
4258
|
-
|
|
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
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
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
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
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-
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
|
|
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-
|
|
4291
|
-
|
|
4140
|
+
.uvf-control-btn svg {
|
|
4141
|
+
width: 20px;
|
|
4142
|
+
height: 20px;
|
|
4292
4143
|
}
|
|
4293
4144
|
|
|
4294
|
-
|
|
4295
|
-
|
|
4296
|
-
|
|
4297
|
-
position: relative;
|
|
4298
|
-
overflow: visible;
|
|
4145
|
+
.uvf-control-btn.play-pause svg {
|
|
4146
|
+
width: 24px;
|
|
4147
|
+
height: 24px;
|
|
4299
4148
|
}
|
|
4300
4149
|
|
|
4301
|
-
/*
|
|
4302
|
-
.uvf-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
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
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4312
|
-
|
|
4313
|
-
|
|
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
|
-
/*
|
|
4317
|
-
.uvf-
|
|
4318
|
-
|
|
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
|
-
/*
|
|
4178
|
+
/* Optimize settings button for Material You */
|
|
4322
4179
|
#uvf-settings-btn {
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
min-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
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
|
-
|
|
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')
|
|
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(() => {
|