myetv-player 1.0.0

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 (50) hide show
  1. package/.github/workflows/npm-publish.yml +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +866 -0
  4. package/build.js +189 -0
  5. package/css/README.md +1 -0
  6. package/css/myetv-player.css +13702 -0
  7. package/css/myetv-player.min.css +1 -0
  8. package/dist/README.md +1 -0
  9. package/dist/myetv-player.js +6408 -0
  10. package/dist/myetv-player.min.js +6183 -0
  11. package/package.json +27 -0
  12. package/plugins/README.md +1 -0
  13. package/plugins/google-analytics/README.md +1 -0
  14. package/plugins/google-analytics/myetv-player-g-analytics-plugin.js +548 -0
  15. package/plugins/youtube/README.md +1 -0
  16. package/plugins/youtube/myetv-player-youtube-plugin.js +418 -0
  17. package/scss/README.md +1 -0
  18. package/scss/_audio-player.scss +21 -0
  19. package/scss/_base.scss +131 -0
  20. package/scss/_controls.scss +30 -0
  21. package/scss/_loading.scss +111 -0
  22. package/scss/_menus.scss +4070 -0
  23. package/scss/_mixins.scss +112 -0
  24. package/scss/_poster.scss +8 -0
  25. package/scss/_progress-bar.scss +2203 -0
  26. package/scss/_resolution.scss +68 -0
  27. package/scss/_responsive.scss +1532 -0
  28. package/scss/_themes.scss +30 -0
  29. package/scss/_title-overlay.scss +2262 -0
  30. package/scss/_tooltips.scss +7 -0
  31. package/scss/_variables.scss +49 -0
  32. package/scss/_video.scss +2401 -0
  33. package/scss/_volume.scss +1981 -0
  34. package/scss/_watermark.scss +8 -0
  35. package/scss/myetv-player.scss +51 -0
  36. package/scss/package.json +16 -0
  37. package/src/README.md +1 -0
  38. package/src/chapters.js +521 -0
  39. package/src/controls.js +1005 -0
  40. package/src/core.js +1650 -0
  41. package/src/events.js +330 -0
  42. package/src/fullscreen.js +82 -0
  43. package/src/i18n.js +348 -0
  44. package/src/playlist.js +177 -0
  45. package/src/plugins.js +384 -0
  46. package/src/quality.js +921 -0
  47. package/src/streaming.js +346 -0
  48. package/src/subtitles.js +426 -0
  49. package/src/utils.js +51 -0
  50. package/src/watermark.js +195 -0
@@ -0,0 +1,1532 @@
1
+ // ===================================
2
+ // RESPONSIVE
3
+ // ===================================
4
+
5
+ @use 'mixins' as *;
6
+
7
+ /* RESPONSIVE DESIGN - PROGRESSIVE DEGRADATION CON MENU A TENDINA */
8
+
9
+ /* Large tablets and small desktops */
10
+ @media (max-width: 768px) {
11
+ .controls-left,
12
+ .controls-right {
13
+ gap: 8px;
14
+ }
15
+
16
+ .volume-slider {
17
+ width: 50px; /* Reduce volume slider width */
18
+ }
19
+
20
+ .time-display {
21
+ font-size: 12px;
22
+ }
23
+
24
+ .icon {
25
+ font-size: 14px;
26
+ }
27
+
28
+ .control-btn {
29
+ padding: 6px;
30
+ }
31
+
32
+ .quality-btn {
33
+ min-height: 32px;
34
+ padding: 4px 6px;
35
+ }
36
+
37
+ .selected-quality {
38
+ font-size: 12px;
39
+ }
40
+
41
+ .current-quality {
42
+ font-size: 9px;
43
+ }
44
+
45
+ .seek-tooltip {
46
+ font-size: 11px;
47
+ padding: 4px 8px;
48
+ }
49
+
50
+ .title-overlay {
51
+ padding: 12px 15px 20px;
52
+ }
53
+
54
+ .title-text {
55
+ font-size: 16px;
56
+ }
57
+
58
+ .video-player::cue {
59
+ font-size: 16px;
60
+ padding: 6px 10px;
61
+ }
62
+
63
+ .controls-right .brand-logo {
64
+ height: 36px;
65
+ max-width: 100px;
66
+ margin-right: 8px;
67
+ }
68
+ }
69
+
70
+ /* Mobile phones */
71
+ @media (max-width: 480px) {
72
+ .controls-left,
73
+ .controls-right {
74
+ gap: 6px;
75
+ }
76
+
77
+ .volume-container {
78
+ /* Reduce volume slider width further instead of hiding */
79
+ flex-shrink: 3;
80
+ }
81
+
82
+ .volume-slider {
83
+ width: 35px; /* Further reduce volume slider */
84
+ }
85
+
86
+ .time-display span:nth-child(2) {
87
+ display: none; /* Hide the separator "/" */
88
+ }
89
+
90
+ .quality-btn {
91
+ min-height: 28px;
92
+ padding: 3px 5px;
93
+ }
94
+
95
+ .selected-quality {
96
+ font-size: 11px;
97
+ }
98
+
99
+ .current-quality {
100
+ font-size: 8px;
101
+ }
102
+
103
+ .seek-tooltip {
104
+ font-size: 10px;
105
+ padding: 3px 6px;
106
+ }
107
+
108
+ .title-overlay {
109
+ padding: 10px 12px 18px;
110
+ }
111
+
112
+ .title-text {
113
+ font-size: 14px;
114
+ }
115
+
116
+ .video-player::cue {
117
+ font-size: 14px;
118
+ padding: 4px 8px;
119
+ }
120
+
121
+ .controls-right .brand-logo {
122
+ height: 28px;
123
+ max-width: 80px;
124
+ margin-right: 5px;
125
+ }
126
+ }
127
+
128
+ /* SCHERMI MOLTO PICCOLI - ATTIVA MENU SETTINGS DROPDOWN */
129
+ @media (max-width: 350px) {
130
+ /* Mostra il menu Settings solo su schermi molto piccoli */
131
+ .settings-control {
132
+ display: block !important;
133
+ }
134
+
135
+ /* Nascondi i controlli individuali e spostali nel menu */
136
+ .pip-btn,
137
+ .speed-control,
138
+ .subtitles-control {
139
+ display: none !important;
140
+ }
141
+
142
+ /* Riduci ulteriormente gli spazi */
143
+ .controls-left,
144
+ .controls-right {
145
+ gap: 4px;
146
+ }
147
+
148
+ .control-btn {
149
+ padding: 4px;
150
+ }
151
+
152
+ .icon {
153
+ font-size: 12px;
154
+ }
155
+
156
+ .quality-btn {
157
+ min-height: 24px;
158
+ padding: 2px 4px;
159
+ }
160
+
161
+ .selected-quality {
162
+ font-size: 10px;
163
+ }
164
+
165
+ .current-quality {
166
+ font-size: 7px;
167
+ }
168
+
169
+ .controls-right .brand-logo {
170
+ height: 22px;
171
+ max-width: 50px;
172
+ margin-right: 3px;
173
+ }
174
+
175
+ .volume-slider {
176
+ width: 30px; /* Volume slider ancora più piccolo */
177
+ }
178
+
179
+ /* Riduci il menu settings per schermi ultra-piccoli */
180
+ .settings-menu {
181
+ min-width: 160px;
182
+ font-size: 12px;
183
+ }
184
+
185
+ .settings-option {
186
+ padding: 6px 12px;
187
+ font-size: 12px;
188
+ }
189
+
190
+ .settings-submenu {
191
+ min-width: 130px;
192
+ }
193
+
194
+ .settings-suboption {
195
+ padding: 6px 12px;
196
+ font-size: 11px;
197
+ }
198
+ }
199
+
200
+ /* Very small screens - ultra mobile */
201
+ @media (max-width: 280px) {
202
+ .controls-left,
203
+ .controls-right {
204
+ gap: 3px;
205
+ }
206
+
207
+ .control-btn {
208
+ padding: 3px;
209
+ }
210
+
211
+ .icon {
212
+ font-size: 10px;
213
+ }
214
+
215
+ .quality-btn {
216
+ min-height: 20px;
217
+ padding: 1px 3px;
218
+ }
219
+
220
+ .selected-quality {
221
+ font-size: 9px;
222
+ }
223
+
224
+ .current-quality {
225
+ font-size: 6px;
226
+ }
227
+
228
+ .controls-right .brand-logo {
229
+ height: 18px;
230
+ max-width: 40px;
231
+ margin-right: 2px;
232
+ }
233
+
234
+ .volume-slider {
235
+ width: 25px;
236
+ }
237
+
238
+ /* Menu settings ultra-compatto */
239
+ .settings-menu {
240
+ min-width: 140px;
241
+ font-size: 11px;
242
+ }
243
+
244
+ .settings-option {
245
+ padding: 5px 10px;
246
+ font-size: 11px;
247
+ }
248
+
249
+ .settings-submenu {
250
+ min-width: 120px;
251
+ }
252
+
253
+ .settings-suboption {
254
+ padding: 5px 10px;
255
+ font-size: 10px;
256
+ }
257
+ }
258
+
259
+ /* OVERFLOW HANDLING - CRITICAL FIX */
260
+ @media (max-width: 600px) {
261
+ .controls-main {
262
+ /* Allow horizontal scrolling if absolutely necessary */
263
+ overflow-x: auto;
264
+ scrollbar-width: none; /* Firefox */
265
+ -ms-overflow-style: none; /* Internet Explorer 10+ */
266
+ }
267
+
268
+ .controls-main::-webkit-scrollbar {
269
+ display: none; /* Safari and Chrome */
270
+ }
271
+
272
+ .controls-left,
273
+ .controls-right {
274
+ /* Ensure buttons stay in a single line */
275
+ flex-wrap: nowrap;
276
+ white-space: nowrap;
277
+ /* Allow further shrinking */
278
+ flex-shrink: 1;
279
+ min-width: fit-content;
280
+ }
281
+ }
282
+
283
+ /* PLAYLIST CONTROLS */
284
+ .controls-right .playlist-prev-btn,
285
+ .controls-right .playlist-next-btn {
286
+ display: none; /* Hidden by default, shown only when playlist is detected */
287
+ }
288
+
289
+ .controls-right .playlist-prev-btn.playlist-active,
290
+ .controls-right .playlist-next-btn.playlist-active {
291
+ display: flex;
292
+ }
293
+
294
+ /* Playlist button styles */
295
+ .playlist-prev-btn .icon::before {
296
+ content: '⏮';
297
+ }
298
+
299
+ .playlist-next-btn .icon::before {
300
+ content: '⏭';
301
+ }
302
+
303
+ /* Disabled state for playlist buttons */
304
+ .playlist-prev-btn:disabled,
305
+ .playlist-next-btn:disabled {
306
+ opacity: 0.4;
307
+ cursor: not-allowed;
308
+ pointer-events: none;
309
+ }
310
+
311
+ .playlist-prev-btn:disabled .icon,
312
+ .playlist-next-btn:disabled .icon {
313
+ opacity: 0.5;
314
+ }
315
+
316
+ /* Responsive playlist buttons */
317
+ @media (max-width: 768px) {
318
+ .playlist-prev-btn .icon::before,
319
+ .playlist-next-btn .icon::before {
320
+ font-size: 16px;
321
+ }
322
+ }
323
+
324
+ @media (max-width: 480px) {
325
+ .playlist-prev-btn .icon::before,
326
+ .playlist-next-btn .icon::before {
327
+ font-size: 14px;
328
+ }
329
+ }
330
+
331
+ /* FULLSCREEN */
332
+ .video-container:fullscreen,
333
+ .video-container:-webkit-full-screen,
334
+ .video-container:-moz-full-screen {
335
+ width: 100vw;
336
+ height: 100vh;
337
+ border-radius: 0;
338
+ }
339
+
340
+ /* ANIMATIONS */
341
+ @keyframes qualityChange {
342
+ 0% {
343
+ opacity: 0.7;
344
+ }
345
+
346
+ 50% {
347
+ opacity: 0.3;
348
+ }
349
+
350
+ 100% {
351
+ opacity: 1;
352
+ }
353
+ }
354
+
355
+ .quality-changing {
356
+ animation: qualityChange 0.5s ease-in-out;
357
+ }
358
+
359
+ /* FOCUS ACCESSIBILITY */
360
+ .control-btn:focus {
361
+ outline: 2px solid var(--player-primary-color);
362
+ outline-offset: 2px;
363
+ }
364
+
365
+ .volume-slider:focus {
366
+ outline: 2px solid var(--player-primary-color);
367
+ outline-offset: 2px;
368
+ }
369
+
370
+ /* THEME UTILITIES */
371
+ .player-large-controls {
372
+ --player-icon-size: 24px;
373
+ --player-button-padding: 12px;
374
+ --player-progress-height: 8px;
375
+ --player-progress-handle-size: 20px;
376
+ --player-title-overlay-padding: 18px 24px 30px;
377
+ }
378
+
379
+ .player-compact-controls {
380
+ --player-icon-size: 16px;
381
+ --player-button-padding: 4px;
382
+ --player-controls-padding: 15px 10px 10px;
383
+ --player-title-overlay-padding: 12px 16px 20px;
384
+ }
385
+
386
+ /* FIREFOX-SPECIFIC VOLUME SLIDER FIX */
387
+ @-moz-document url-prefix() {
388
+ .volume-slider::-moz-range-thumb {
389
+ /* Additional Firefox alignment correction */
390
+ transform: translateY(calc((var(--player-volume-height) - var(--player-volume-handle-size)) / 2 - 2px));
391
+ }
392
+
393
+ .volume-slider::-moz-range-thumb:hover {
394
+ transform: translateY(calc((var(--player-volume-height) - var(--player-volume-handle-size)) / 2 - 2px)) scale(1.1);
395
+ }
396
+ /* Ensure the track alignment is also correct */
397
+ .volume-slider::-moz-range-track {
398
+ height: var(--player-volume-height);
399
+ background: linear-gradient(to right, var(--player-primary-dark) 0%, var(--player-primary-dark) var(--player-volume-fill), var(--player-volume-bg) var(--player-volume-fill), var(--player-volume-bg) 100%);
400
+ border-radius: calc(var(--player-volume-height) / 2);
401
+ border: none;
402
+ transition: background var(--player-transition-fast);
403
+ margin: 0;
404
+ }
405
+ }
406
+
407
+ /* Alternative approach - using Firefox-specific selector */
408
+ @supports (-moz-appearance: none) {
409
+ .volume-slider {
410
+ /* Slight vertical adjustment for Firefox only */
411
+ margin-top: -1px;
412
+ }
413
+
414
+ .volume-slider::-moz-range-thumb {
415
+ transform: translateY(calc((var(--player-volume-height) - var(--player-volume-handle-size)) / 2 - 1.5px));
416
+ }
417
+
418
+ .volume-slider::-moz-range-thumb:hover {
419
+ transform: translateY(calc((var(--player-volume-height) - var(--player-volume-handle-size)) / 2 - 1.5px)) scale(1.1);
420
+ }
421
+ }
422
+
423
+ /* FIREFOX VOLUME CONTAINER POSITION FIX */
424
+ @-moz-document url-prefix() {
425
+ .volume-container {
426
+ position: relative;
427
+ top: 2px !important;
428
+ }
429
+
430
+ .volume-slider::-moz-range-thumb {
431
+ margin-top: -6px !important;
432
+ transform: translateY(-2px) !important;
433
+ }
434
+
435
+ .volume-slider::-moz-range-thumb:hover {
436
+ transform: translateY(-2px) scale(1.1) !important;
437
+ }
438
+ }
439
+
440
+ /* RESOLUTION CONTROL SYSTEM - Video resolution modes management */
441
+
442
+ /* Base styles for resolution control */
443
+ .video-player {
444
+ object-position: center center;
445
+ }
446
+
447
+ /* Normal (default) - maintain original aspect ratio */
448
+ .resolution-normal .video-player {
449
+ object-fit: contain;
450
+ object-position: center center;
451
+ }
452
+
453
+ /* 4:3 - Force 4:3 format */
454
+ .resolution-4-3 .video-player {
455
+ object-fit: fill;
456
+ aspect-ratio: 4/3;
457
+ }
458
+
459
+ .resolution-4-3 .video-wrapper {
460
+ aspect-ratio: 4/3;
461
+ }
462
+
463
+ /* 16:9 - Force 16:9 format */
464
+ .resolution-16-9 .video-player {
465
+ object-fit: fill;
466
+ aspect-ratio: 16/9;
467
+ }
468
+
469
+ .resolution-16-9 .video-wrapper {
470
+ aspect-ratio: 16/9;
471
+ }
472
+
473
+ /* Stretched - Stretch video to fill container completely */
474
+ .resolution-stretched .video-player {
475
+ object-fit: fill;
476
+ width: 100%;
477
+ height: 100%;
478
+ }
479
+
480
+ .resolution-stretched .video-wrapper {
481
+ height: auto;
482
+ min-height: 300px;
483
+ }
484
+
485
+ /* Fit to Screen - Adapt to screen without deforming, may crop parts */
486
+ .resolution-fit-to-screen .video-player {
487
+ object-fit: cover;
488
+ object-position: center center;
489
+ width: 100%;
490
+ height: 100%;
491
+ }
492
+
493
+ .resolution-fit-to-screen .video-wrapper {
494
+ height: 100vh;
495
+ max-height: 100vh;
496
+ }
497
+
498
+ /* Scale to Fit - PERFECT for smartphone videos! Scales to maximum size without distortion or cropping */
499
+ .resolution-scale-to-fit .video-player {
500
+ object-fit: contain;
501
+ object-position: center center;
502
+ width: 100%;
503
+ height: 100%;
504
+ max-width: 100vw;
505
+ max-height: 100vh;
506
+ }
507
+
508
+ .resolution-scale-to-fit .video-wrapper {
509
+ display: flex;
510
+ align-items: center;
511
+ justify-content: center;
512
+ height: 70vh;
513
+ min-height: 400px;
514
+ background: var(--player-bg-primary, #000);
515
+ }
516
+
517
+ /* Enhanced scale-to-fit for different viewport orientations */
518
+ @media (orientation: portrait) {
519
+ .resolution-scale-to-fit .video-wrapper {
520
+ height: 50vh;
521
+ min-height: 350px;
522
+ }
523
+ }
524
+
525
+ @media (orientation: landscape) {
526
+ .resolution-scale-to-fit .video-wrapper {
527
+ height: 80vh;
528
+ min-height: 450px;
529
+ }
530
+ }
531
+
532
+ /* Responsive adjustments for resolution modes */
533
+ @media (max-width: 768px) {
534
+ /* On mobile, some modes might need adjustments */
535
+ .resolution-fit-to-screen .video-wrapper {
536
+ height: 50vh;
537
+ min-height: 250px;
538
+ }
539
+
540
+ .resolution-4-3 .video-wrapper,
541
+ .resolution-16-9 .video-wrapper {
542
+ min-height: 200px;
543
+ }
544
+
545
+ .resolution-scale-to-fit .video-wrapper {
546
+ height: 45vh;
547
+ min-height: 300px;
548
+ }
549
+ }
550
+
551
+ @media (max-width: 480px) {
552
+ .resolution-fit-to-screen .video-wrapper {
553
+ height: 40vh;
554
+ min-height: 200px;
555
+ }
556
+
557
+ .resolution-4-3 .video-wrapper,
558
+ .resolution-16-9 .video-wrapper {
559
+ min-height: 180px;
560
+ }
561
+
562
+ .resolution-scale-to-fit .video-wrapper {
563
+ height: 40vh;
564
+ min-height: 250px;
565
+ }
566
+ }
567
+
568
+ /* Transitions for smooth changes */
569
+ .video-player {
570
+ transition: object-fit 0.3s ease, aspect-ratio 0.3s ease;
571
+ }
572
+
573
+ .video-wrapper {
574
+ transition: aspect-ratio 0.3s ease, height 0.3s ease;
575
+ }
576
+
577
+ /* Fallback for browsers that don't support aspect-ratio */
578
+ @supports not (aspect-ratio: 1) {
579
+ .resolution-4-3 .video-wrapper {
580
+ padding-bottom: 75%; /* 4:3 ratio fallback */
581
+ height: 0;
582
+ position: relative;
583
+ }
584
+
585
+ .resolution-4-3 .video-player {
586
+ position: absolute;
587
+ top: 0;
588
+ left: 0;
589
+ width: 100%;
590
+ height: 100%;
591
+ }
592
+
593
+ .resolution-16-9 .video-wrapper {
594
+ padding-bottom: 56.25%; /* 16:9 ratio fallback */
595
+ height: 0;
596
+ position: relative;
597
+ }
598
+
599
+ .resolution-16-9 .video-player {
600
+ position: absolute;
601
+ top: 0;
602
+ left: 0;
603
+ width: 100%;
604
+ height: 100%;
605
+ }
606
+ }
607
+
608
+ /* Quality changing state - show loading during quality change */
609
+ .quality-changing .video-player {
610
+ filter: brightness(0.7);
611
+ }
612
+
613
+ /* Utility classes for debugging */
614
+ .resolution-debug .video-wrapper::before {
615
+ content: 'Resolution: ' attr(data-resolution);
616
+ position: absolute;
617
+ top: 10px;
618
+ left: 10px;
619
+ background: rgba(0, 0, 0, 0.7);
620
+ color: white;
621
+ padding: 5px 10px;
622
+ border-radius: 4px;
623
+ font-size: 12px;
624
+ z-index: 1000;
625
+ pointer-events: none;
626
+ }
627
+
628
+ /* CRITICAL: Ensure all control containers can handle overflow gracefully */
629
+ .controls,
630
+ .controls-main,
631
+ .controls-left,
632
+ .controls-right {
633
+ overflow: visible !important;
634
+ }
635
+
636
+ /* Force buttons to stay in one line and allow flexible sizing */
637
+ .controls-left,
638
+ .controls-right {
639
+ flex-wrap: nowrap !important;
640
+ white-space: nowrap !important;
641
+ }
642
+
643
+ /* Allow buttons to shrink below their natural content size when absolutely necessary */
644
+ .control-btn {
645
+ min-width: 0 !important;
646
+ white-space: nowrap !important;
647
+ }
648
+ /* CSS for subtitles SRT */
649
+ video::cue {
650
+ background-color: rgba(0, 0, 0, 0.8);
651
+ color: white;
652
+ font-family: Arial, Helvetica, sans-serif;
653
+ font-size: 18px;
654
+ font-weight: normal;
655
+ line-height: 1.2;
656
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
657
+ padding: 4px 8px;
658
+ border-radius: 4px;
659
+ white-space: pre-line;
660
+ }
661
+
662
+ /* Fix for browser WebKit (Chrome, Safari, Edge) */
663
+ video::-webkit-media-text-track-display {
664
+ color: white;
665
+ font-family: Arial, Helvetica, sans-serif;
666
+ background-color: rgba(0, 0, 0, 0.8);
667
+ border-radius: 4px;
668
+ padding: 4px 8px;
669
+ font-size: 18px;
670
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
671
+ }
672
+ /* Custom subtitle overlay responsive styles */
673
+ .custom-subtitle-overlay {
674
+ font-size: clamp(12px, 4vw, 18px);
675
+ }
676
+
677
+ /* Tablet responsiveness */
678
+ @media (max-width: 768px) {
679
+ .custom-subtitle-overlay {
680
+ font-size: 16px !important;
681
+ bottom: 70px !important;
682
+ max-width: 85% !important;
683
+ padding: 6px 12px !important;
684
+ line-height: 1.2 !important;
685
+ }
686
+ }
687
+
688
+ /* Mobile phone responsiveness */
689
+ @media (max-width: 480px) {
690
+ .custom-subtitle-overlay {
691
+ font-size: 14px !important;
692
+ bottom: 60px !important;
693
+ max-width: 90% !important;
694
+ padding: 5px 10px !important;
695
+ line-height: 1.15 !important;
696
+ }
697
+ }
698
+
699
+ /* Very small screens */
700
+ @media (max-width: 360px) {
701
+ .custom-subtitle-overlay {
702
+ font-size: 12px !important;
703
+ bottom: 50px !important;
704
+ max-width: 95% !important;
705
+ padding: 4px 8px !important;
706
+ }
707
+ }
708
+
709
+ /* Landscape mobile optimization */
710
+ @media (max-height: 500px) and (orientation: landscape) {
711
+ .custom-subtitle-overlay {
712
+ font-size: 13px !important;
713
+ bottom: 45px !important;
714
+ max-width: 85% !important;
715
+ padding: 4px 10px !important;
716
+ }
717
+ }
718
+
719
+ /* Scrollable dropdown menus for small player heights */
720
+ .speed-menu,
721
+ .quality-menu,
722
+ .subtitles-menu {
723
+ max-height: 200px;
724
+ overflow-y: auto;
725
+ scrollbar-width: thin;
726
+ scrollbar-color: var(--player-primary-color) rgba(255, 255, 255, 0.1);
727
+ }
728
+
729
+ /* Custom scrollbar for WebKit browsers */
730
+ .speed-menu::-webkit-scrollbar,
731
+ .quality-menu::-webkit-scrollbar,
732
+ .subtitles-menu::-webkit-scrollbar {
733
+ width: 6px;
734
+ }
735
+
736
+ .speed-menu::-webkit-scrollbar-track,
737
+ .quality-menu::-webkit-scrollbar-track,
738
+ .subtitles-menu::-webkit-scrollbar-track {
739
+ background: rgba(255, 255, 255, 0.1);
740
+ border-radius: 3px;
741
+ }
742
+
743
+ .speed-menu::-webkit-scrollbar-thumb,
744
+ .quality-menu::-webkit-scrollbar-thumb,
745
+ .subtitles-menu::-webkit-scrollbar-thumb {
746
+ background: var(--player-primary-color);
747
+ border-radius: 3px;
748
+ }
749
+
750
+ .speed-menu::-webkit-scrollbar-thumb:hover,
751
+ .quality-menu::-webkit-scrollbar-thumb:hover,
752
+ .subtitles-menu::-webkit-scrollbar-thumb:hover {
753
+ background: var(--player-primary-hover);
754
+ }
755
+
756
+ /* Responsive max-height for very small players */
757
+ @media (max-height: 400px) {
758
+ .speed-menu,
759
+ .quality-menu,
760
+ .subtitles-menu {
761
+ max-height: 150px;
762
+ }
763
+ }
764
+
765
+ @media (max-height: 300px) {
766
+ .speed-menu,
767
+ .quality-menu,
768
+ .subtitles-menu {
769
+ max-height: 120px;
770
+ }
771
+ }
772
+
773
+ /* Scrollbar for settings submenus on small screens */
774
+ .settings-submenu {
775
+ max-height: 180px;
776
+ overflow-y: auto;
777
+ scrollbar-width: thin;
778
+ scrollbar-color: var(--player-primary-color) rgba(255, 255, 255, 0.1);
779
+ }
780
+
781
+ /* Custom scrollbar for settings submenu in WebKit browsers */
782
+ .settings-submenu::-webkit-scrollbar {
783
+ width: 6px;
784
+ }
785
+
786
+ .settings-submenu::-webkit-scrollbar-track {
787
+ background: rgba(255, 255, 255, 0.1);
788
+ border-radius: 3px;
789
+ }
790
+
791
+ .settings-submenu::-webkit-scrollbar-thumb {
792
+ background: var(--player-primary-color);
793
+ border-radius: 3px;
794
+ }
795
+
796
+ .settings-submenu::-webkit-scrollbar-thumb:hover {
797
+ background: var(--player-primary-hover);
798
+ }
799
+
800
+ /* Responsive adjustments for settings submenu on very small screens */
801
+ @media (max-width: 350px) {
802
+ .settings-submenu {
803
+ max-height: 140px;
804
+ }
805
+ }
806
+
807
+ @media (max-height: 400px) {
808
+ .settings-submenu {
809
+ max-height: 120px;
810
+ }
811
+ }
812
+
813
+ /* Volume Slider Configuration - Base styles */
814
+ .volume-container {
815
+ position: relative;
816
+ display: flex;
817
+ align-items: center;
818
+ gap: var(--player-controls-gap);
819
+ }
820
+
821
+ /* Horizontal Volume Slider (default) - Base width reduced */
822
+ .volume-container[data-orientation="horizontal"] .volume-slider {
823
+ width: 80px; /* Ridotto da var(--player-volume-width) a 80px fissi */
824
+ height: var(--player-volume-height);
825
+ background: var(--player-volume-bg);
826
+ border-radius: calc(var(--player-volume-height) / 2);
827
+ transition: all 0.3s ease;
828
+ }
829
+
830
+ /* Responsive width reduction for horizontal slider */
831
+ @media (max-width: 1200px) {
832
+ .volume-container[data-orientation="horizontal"] .volume-slider {
833
+ width: 70px;
834
+ }
835
+ }
836
+
837
+ @media (max-width: 900px) {
838
+ .volume-container[data-orientation="horizontal"] .volume-slider {
839
+ width: 60px;
840
+ }
841
+ }
842
+
843
+ @media (max-width: 768px) {
844
+ .volume-container[data-orientation="horizontal"] .volume-slider {
845
+ width: 50px;
846
+ }
847
+ }
848
+
849
+ @media (max-width: 600px) {
850
+ .volume-container[data-orientation="horizontal"] .volume-slider {
851
+ width: 40px;
852
+ }
853
+ }
854
+
855
+ /* Vertical Volume Slider (always visible) */
856
+ .volume-container[data-orientation="vertical"] {
857
+ flex-direction: column;
858
+ height: 80px;
859
+ justify-content: center;
860
+ }
861
+
862
+ .volume-container[data-orientation="vertical"] .volume-slider {
863
+ width: 4px;
864
+ height: 60px;
865
+ writing-mode: bt-lr; /* IE */
866
+ -webkit-appearance: slider-vertical; /* WebKit */
867
+ background: var(--player-volume-bg);
868
+ border-radius: 2px;
869
+ transform: rotate(0deg);
870
+ transition: all 0.3s ease;
871
+ }
872
+
873
+ /* Responsive: Force vertical behavior for horizontal sliders under 550px */
874
+ @media (max-width: 550px) {
875
+ /* Hide horizontal slider by default on mobile */
876
+ .volume-container[data-orientation="horizontal"] .volume-slider {
877
+ position: absolute;
878
+ opacity: 0;
879
+ visibility: hidden;
880
+ pointer-events: none;
881
+ width: 0;
882
+ height: 0;
883
+ transform: translateX(-50%) rotate(-90deg);
884
+ transform-origin: center center;
885
+ transition: opacity 0.1s ease, visibility 0.1s ease;
886
+ }
887
+
888
+ /* Show vertical slider on hover for horizontal mode */
889
+ .mute-btn:hover + .volume-container[data-orientation="horizontal"] .volume-slider,
890
+ .volume-container[data-orientation="horizontal"]:hover .volume-slider {
891
+ position: absolute;
892
+ opacity: 1;
893
+ visibility: visible;
894
+ pointer-events: auto;
895
+ width: 60px;
896
+ height: 4px;
897
+ bottom: 45px;
898
+ left: -20px;
899
+ transform: translateX(-50%) translateY(0%) rotate(-90deg);
900
+ transform-origin: center center;
901
+ z-index: 1000;
902
+ background: rgba(0, 0, 0, 0.9);
903
+ border: 1px solid rgba(255, 255, 255, 0.2);
904
+ border-radius: 6px;
905
+ padding: 4px;
906
+ backdrop-filter: blur(10px);
907
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
908
+ transition: all 0.4s cubic-bezier(0.4, 0.0, 0.2, 1);
909
+ }
910
+
911
+ /* Extend hover area of mute button for horizontal mode */
912
+ .volume-container[data-orientation="horizontal"] + .mute-btn,
913
+ .mute-btn + .volume-container[data-orientation="horizontal"] .mute-btn {
914
+ padding: 15px;
915
+ margin: -7px;
916
+ position: relative;
917
+ z-index: 1001;
918
+ }
919
+
920
+ /* Keep hover active when moving from button to slider */
921
+ .mute-btn:hover + .volume-container[data-orientation="horizontal"]::before,
922
+ .volume-container[data-orientation="horizontal"]::before {
923
+ content: '';
924
+ position: absolute;
925
+ top: -50px;
926
+ left: -40px;
927
+ right: -20px;
928
+ bottom: -10px;
929
+ background: transparent;
930
+ z-index: 999;
931
+ }
932
+
933
+ /* Hide thumb by default for horizontal mode on mobile */
934
+ .volume-container[data-orientation="horizontal"] .volume-slider::-webkit-slider-thumb {
935
+ opacity: 0;
936
+ visibility: hidden;
937
+ transition: none !important;
938
+ }
939
+
940
+ .volume-container[data-orientation="horizontal"] .volume-slider::-moz-range-thumb {
941
+ opacity: 0;
942
+ visibility: hidden;
943
+ transition: none !important;
944
+ }
945
+
946
+ /* Show thumb only when in hover for horizontal mode */
947
+ .volume-container[data-orientation="horizontal"]:hover .volume-slider::-webkit-slider-thumb,
948
+ .mute-btn:hover + .volume-container[data-orientation="horizontal"] .volume-slider::-webkit-slider-thumb {
949
+ opacity: 1;
950
+ visibility: visible;
951
+ -webkit-appearance: none;
952
+ width: var(--player-volume-handle-size);
953
+ height: var(--player-volume-handle-size);
954
+ border-radius: 50%;
955
+ background: var(--player-primary-color);
956
+ cursor: pointer;
957
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
958
+ transition: none !important;
959
+ }
960
+
961
+ .volume-container[data-orientation="horizontal"]:hover .volume-slider::-moz-range-thumb,
962
+ .mute-btn:hover + .volume-container[data-orientation="horizontal"] .volume-slider::-moz-range-thumb {
963
+ opacity: 1;
964
+ visibility: visible;
965
+ width: var(--player-volume-handle-size);
966
+ height: var(--player-volume-handle-size);
967
+ border-radius: 50%;
968
+ background: var(--player-primary-color);
969
+ cursor: pointer;
970
+ border: none;
971
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
972
+ transition: none !important;
973
+ }
974
+
975
+ /* Vertical sliders remain unchanged on mobile */
976
+ .volume-container[data-orientation="vertical"] {
977
+ /* Keep original vertical styling */
978
+ }
979
+ }
980
+
981
+ /* CHAPTER MARKERS SYSTEM */
982
+
983
+ /* Container for all chapter markers */
984
+ .chapter-markers-container {
985
+ position: absolute;
986
+ top: 0;
987
+ left: 0;
988
+ width: 100%;
989
+ height: 100%;
990
+ pointer-events: none;
991
+ z-index: 3;
992
+ }
993
+
994
+ /* Individual chapter marker */
995
+ .chapter-marker {
996
+ position: absolute;
997
+ top: 0;
998
+ height: 100%;
999
+ width: 3px;
1000
+ background: var(--player-primary-color);
1001
+ opacity: 0.7;
1002
+ cursor: pointer;
1003
+ pointer-events: auto;
1004
+ transition: all var(--player-transition-fast);
1005
+ border-radius: 2px;
1006
+ transform: translateX(-50%);
1007
+ }
1008
+
1009
+ /* Hover state for chapter marker */
1010
+ .chapter-marker:hover {
1011
+ opacity: 1;
1012
+ width: 4px;
1013
+ height: 120%;
1014
+ top: -10%;
1015
+ box-shadow: 0 0 8px var(--player-primary-color);
1016
+ }
1017
+
1018
+ /* Active chapter marker (currently playing) */
1019
+ .chapter-marker.active {
1020
+ background: var(--player-primary-hover);
1021
+ opacity: 1;
1022
+ width: 4px;
1023
+ }
1024
+
1025
+ /* Chapter tooltip */
1026
+ .chapter-tooltip {
1027
+ position: absolute;
1028
+ bottom: 100%;
1029
+ left: 0;
1030
+ background: rgba(0, 0, 0, 0.95);
1031
+ backdrop-filter: blur(10px);
1032
+ border-radius: 8px;
1033
+ padding: 0;
1034
+ margin-bottom: 12px;
1035
+ opacity: 0;
1036
+ visibility: hidden;
1037
+ transition: all 0.2s ease;
1038
+ transform: translateX(-50%) translateY(-8px);
1039
+ z-index: 1000;
1040
+ box-shadow: var(--player-shadow-tooltip);
1041
+ border: 1px solid rgba(255, 255, 255, 0.15);
1042
+ min-width: 200px;
1043
+ max-width: 300px;
1044
+ overflow: hidden;
1045
+ pointer-events: none;
1046
+ }
1047
+
1048
+ /* Tooltip arrow */
1049
+ .chapter-tooltip::after {
1050
+ content: '';
1051
+ position: absolute;
1052
+ top: 100%;
1053
+ left: 50%;
1054
+ transform: translateX(-50%);
1055
+ width: 0;
1056
+ height: 0;
1057
+ border-left: 6px solid transparent;
1058
+ border-right: 6px solid transparent;
1059
+ border-top: 6px solid rgba(0, 0, 0, 0.95);
1060
+ }
1061
+
1062
+ /* Chapter tooltip image */
1063
+ .chapter-tooltip-image {
1064
+ width: 100%;
1065
+ height: 150px;
1066
+ background-size: cover;
1067
+ background-position: center;
1068
+ background-repeat: no-repeat;
1069
+ display: none;
1070
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1071
+ }
1072
+
1073
+ /* Chapter tooltip title */
1074
+ .chapter-tooltip-title {
1075
+ padding: 10px 12px 6px;
1076
+ color: var(--player-text-color);
1077
+ font-size: 14px;
1078
+ font-weight: 600;
1079
+ line-height: 1.3;
1080
+ word-wrap: break-word;
1081
+ }
1082
+
1083
+ /* Chapter tooltip time */
1084
+ .chapter-tooltip-time {
1085
+ padding: 0 12px 10px;
1086
+ color: var(--player-text-secondary);
1087
+ font-size: 12px;
1088
+ font-weight: 400;
1089
+ font-variant-numeric: tabular-nums;
1090
+ }
1091
+
1092
+ /* RESPONSIVE ADJUSTMENTS FOR CHAPTERS */
1093
+ @media (max-width: 480px) {
1094
+ .chapter-marker {
1095
+ width: 2px;
1096
+ }
1097
+
1098
+ .chapter-marker:hover {
1099
+ width: 3px;
1100
+ }
1101
+
1102
+ .chapter-tooltip {
1103
+ min-width: 160px;
1104
+ max-width: 250px;
1105
+ }
1106
+
1107
+ .chapter-tooltip-image {
1108
+ height: 100px;
1109
+ }
1110
+ }
1111
+ /* VIDEO POSTER OVERLAY - THEMED VERSION */
1112
+
1113
+ /* Custom poster overlay to prevent disappearing */
1114
+ .video-poster-overlay {
1115
+ position: absolute;
1116
+ top: 0;
1117
+ left: 0;
1118
+ width: 100%;
1119
+ height: 100%;
1120
+ background-size: cover;
1121
+ background-position: center;
1122
+ background-repeat: no-repeat;
1123
+ z-index: 1;
1124
+ cursor: pointer;
1125
+ opacity: 0;
1126
+ visibility: hidden;
1127
+ transition: opacity 0.3s ease, visibility 0.3s ease;
1128
+ pointer-events: none;
1129
+ }
1130
+
1131
+ /* Visible state */
1132
+ .video-poster-overlay.visible {
1133
+ opacity: 1;
1134
+ visibility: visible;
1135
+ pointer-events: auto;
1136
+ }
1137
+
1138
+ /* Hidden state */
1139
+ .video-poster-overlay.hidden {
1140
+ opacity: 0;
1141
+ visibility: hidden;
1142
+ pointer-events: none;
1143
+ }
1144
+
1145
+ /* Hover effect on poster */
1146
+ .video-poster-overlay.visible:hover {
1147
+ opacity: 0.95;
1148
+ }
1149
+
1150
+ /* Play button overlay on poster - THEMED COLORS 🎨 */
1151
+ .video-poster-overlay::after {
1152
+ content: '';
1153
+ position: absolute;
1154
+ top: 50%;
1155
+ left: 50%;
1156
+ transform: translate(-50%, -50%);
1157
+ width: 80px;
1158
+ height: 80px;
1159
+ background: rgba(0, 0, 0, 0.7);
1160
+ border-radius: 50%;
1161
+ border: 3px solid var(--player-primary-color); /* THEMED BORDER ✨ */
1162
+ opacity: 0;
1163
+ transition: opacity 0.3s ease, transform 0.3s ease, border-color 0.3s ease;
1164
+ pointer-events: none;
1165
+ }
1166
+
1167
+ /* Show play button on hover with animation and themed glow */
1168
+ .video-poster-overlay.visible:hover::after {
1169
+ opacity: 1;
1170
+ transform: translate(-50%, -50%) scale(1.1);
1171
+ border-color: var(--player-primary-hover); /* THEMED HOVER COLOR 🌟 */
1172
+ box-shadow: 0 0 20px var(--player-primary-color); /* THEMED GLOW 💫 */
1173
+ }
1174
+
1175
+ /* Play icon triangle - THEMED COLOR 🎨 */
1176
+ .video-poster-overlay::before {
1177
+ content: '';
1178
+ position: absolute;
1179
+ top: 50%;
1180
+ left: 50%;
1181
+ transform: translate(-40%, -50%);
1182
+ width: 0;
1183
+ height: 0;
1184
+ border-style: solid;
1185
+ border-width: 15px 0 15px 25px;
1186
+ border-color: transparent transparent transparent var(--player-primary-color); /* THEMED TRIANGLE ✨ */
1187
+ z-index: 2;
1188
+ opacity: 0;
1189
+ transition: opacity 0.3s ease, border-color 0.3s ease;
1190
+ pointer-events: none;
1191
+ }
1192
+
1193
+ /* Show play icon on hover with themed color */
1194
+ .video-poster-overlay.visible:hover::before {
1195
+ opacity: 1;
1196
+ border-color: transparent transparent transparent var(--player-primary-hover); /* THEMED HOVER 🌟 */
1197
+ }
1198
+
1199
+ /* Responsive adjustments */
1200
+ @media (max-width: 768px) {
1201
+ .video-poster-overlay::after {
1202
+ width: 60px;
1203
+ height: 60px;
1204
+ }
1205
+
1206
+ .video-poster-overlay::before {
1207
+ border-width: 12px 0 12px 20px;
1208
+ }
1209
+ }
1210
+
1211
+ @media (max-width: 480px) {
1212
+ .video-poster-overlay::after {
1213
+ width: 50px;
1214
+ height: 50px;
1215
+ }
1216
+
1217
+ .video-poster-overlay::before {
1218
+ border-width: 10px 0 10px 16px;
1219
+ }
1220
+ }
1221
+
1222
+ /* Ensure smooth transition when poster hides */
1223
+ .video-poster-overlay.hidden {
1224
+ transition: opacity 0.5s ease, visibility 0s ease 0.5s;
1225
+ }
1226
+
1227
+ /* THEME-SPECIFIC OVERRIDES (optional fine-tuning) */
1228
+
1229
+ /* Blue theme 💙 */
1230
+ .player-theme-blue .video-poster-overlay::after {
1231
+ border-color: #2196F3;
1232
+ }
1233
+
1234
+ .player-theme-blue .video-poster-overlay.visible:hover::after {
1235
+ border-color: #1976D2;
1236
+ box-shadow: 0 0 20px #2196F3;
1237
+ }
1238
+
1239
+ .player-theme-blue .video-poster-overlay::before {
1240
+ border-color: transparent transparent transparent #2196F3;
1241
+ }
1242
+
1243
+ .player-theme-blue .video-poster-overlay.visible:hover::before {
1244
+ border-color: transparent transparent transparent #1976D2;
1245
+ }
1246
+
1247
+ /* Green theme 💚 */
1248
+ .player-theme-green .video-poster-overlay::after {
1249
+ border-color: #4CAF50;
1250
+ }
1251
+
1252
+ .player-theme-green .video-poster-overlay.visible:hover::after {
1253
+ border-color: #45a049;
1254
+ box-shadow: 0 0 20px #4CAF50;
1255
+ }
1256
+
1257
+ .player-theme-green .video-poster-overlay::before {
1258
+ border-color: transparent transparent transparent #4CAF50;
1259
+ }
1260
+
1261
+ .player-theme-green .video-poster-overlay.visible:hover::before {
1262
+ border-color: transparent transparent transparent #45a049;
1263
+ }
1264
+
1265
+ /* Red theme ❤️ */
1266
+ .player-theme-red .video-poster-overlay::after {
1267
+ border-color: #f44336;
1268
+ }
1269
+
1270
+ .player-theme-red .video-poster-overlay.visible:hover::after {
1271
+ border-color: #d32f2f;
1272
+ box-shadow: 0 0 20px #f44336;
1273
+ }
1274
+
1275
+ .player-theme-red .video-poster-overlay::before {
1276
+ border-color: transparent transparent transparent #f44336;
1277
+ }
1278
+
1279
+ .player-theme-red .video-poster-overlay.visible:hover::before {
1280
+ border-color: transparent transparent transparent #d32f2f;
1281
+ }
1282
+
1283
+ /* Dark theme 🖤 (uses default goldenrod) */
1284
+ .player-theme-dark .video-poster-overlay::after {
1285
+ background: rgba(0, 0, 0, 0.85); /* Slightly darker background for dark theme */
1286
+ }
1287
+
1288
+ /* screen height adjust */
1289
+ @media (max-height: 400px) {
1290
+ .video-player {
1291
+ min-height: 200px;
1292
+ }
1293
+
1294
+ .controls {
1295
+ min-height: 50px !important;
1296
+ padding: 10px 10px 8px !important;
1297
+ }
1298
+
1299
+ .progress-container {
1300
+ margin-bottom: 8px;
1301
+ }
1302
+
1303
+ .controls-main {
1304
+ min-height: 32px !important;
1305
+ }
1306
+ }
1307
+
1308
+ @media (max-height: 330px) {
1309
+ .video-player {
1310
+ min-height: 150px;
1311
+ }
1312
+
1313
+ .controls {
1314
+ min-height: 45px !important;
1315
+ padding: 8px 8px 6px !important;
1316
+ }
1317
+
1318
+ .progress-container {
1319
+ margin-bottom: 6px;
1320
+ height: 4px;
1321
+ }
1322
+
1323
+ .controls-main {
1324
+ min-height: 28px !important;
1325
+ }
1326
+
1327
+ .control-btn {
1328
+ padding: 4px !important;
1329
+ }
1330
+
1331
+ .icon {
1332
+ font-size: 14px !important;
1333
+ }
1334
+
1335
+ .time-display {
1336
+ font-size: 11px !important;
1337
+ }
1338
+ }
1339
+
1340
+ @media (max-height: 250px) {
1341
+ .video-player {
1342
+ min-height: 120px;
1343
+ }
1344
+
1345
+ .controls {
1346
+ min-height: 40px !important;
1347
+ padding: 6px 8px 5px !important;
1348
+ }
1349
+
1350
+ .progress-container {
1351
+ margin-bottom: 4px;
1352
+ height: 3px;
1353
+ }
1354
+
1355
+ .controls-main {
1356
+ min-height: 24px !important;
1357
+ }
1358
+
1359
+ .control-btn {
1360
+ padding: 2px !important;
1361
+ }
1362
+
1363
+ .icon {
1364
+ font-size: 12px !important;
1365
+ }
1366
+
1367
+ .time-display {
1368
+ font-size: 10px !important;
1369
+ }
1370
+
1371
+ .quality-btn {
1372
+ min-height: 20px !important;
1373
+ padding: 2px 4px !important;
1374
+ }
1375
+
1376
+ .selected-quality {
1377
+ font-size: 9px !important;
1378
+ }
1379
+
1380
+ .current-quality {
1381
+ display: none;
1382
+ }
1383
+
1384
+ .volume-slider {
1385
+ width: 40px !important;
1386
+ }
1387
+ }
1388
+
1389
+ .video-container,
1390
+ .video-wrapper {
1391
+ overflow: visible !important;
1392
+ }
1393
+
1394
+ .controls.show {
1395
+ position: absolute !important;
1396
+ bottom: 0 !important;
1397
+ overflow: visible !important;
1398
+ }
1399
+
1400
+ /* ===================================
1401
+ WATERMARK OVERLAY
1402
+ =================================== */
1403
+
1404
+ .video-watermark {
1405
+ position: absolute;
1406
+ z-index: 15; /* Above video (10), below controls (100) */
1407
+ pointer-events: auto;
1408
+ opacity: 0.7;
1409
+ transition: opacity 0.3s ease, visibility 0.3s ease, bottom 0.3s ease;
1410
+ }
1411
+
1412
+ /* Watermark visible by default */
1413
+ .video-watermark {
1414
+ visibility: visible;
1415
+ opacity: 0.7;
1416
+ }
1417
+
1418
+ /* Hide watermark when it has hide-on-autohide class AND controls are hidden */
1419
+ .video-wrapper:not(.has-controls) .video-watermark.hide-on-autohide {
1420
+ visibility: hidden;
1421
+ opacity: 0;
1422
+ }
1423
+
1424
+ /* Show watermark when controls are shown */
1425
+ .video-wrapper.has-controls .video-watermark {
1426
+ visibility: visible;
1427
+ opacity: 0.7;
1428
+ }
1429
+
1430
+ .video-watermark:hover {
1431
+ opacity: 1;
1432
+ }
1433
+
1434
+ .video-watermark img {
1435
+ display: block;
1436
+ max-width: 150px;
1437
+ max-height: 80px;
1438
+ width: auto;
1439
+ height: auto;
1440
+ object-fit: contain;
1441
+ }
1442
+
1443
+ /* Watermark positions - Top positions unchanged */
1444
+ .video-watermark.watermark-topleft {
1445
+ top: 15px;
1446
+ left: 15px;
1447
+ }
1448
+
1449
+ .video-watermark.watermark-topright {
1450
+ top: 15px;
1451
+ right: 15px;
1452
+ }
1453
+
1454
+ /* Bottom positions - Increased spacing from controlbar (was 70px, now 90px) */
1455
+ .video-watermark.watermark-bottomleft {
1456
+ bottom: 90px; /* Increased spacing */
1457
+ left: 15px;
1458
+ }
1459
+
1460
+ .video-watermark.watermark-bottomright {
1461
+ bottom: 90px; /* Increased spacing */
1462
+ right: 15px;
1463
+ }
1464
+
1465
+ /* DYNAMIC POSITIONING: Always visible watermark moves down when controls are hidden */
1466
+ /* This applies ONLY to watermarks without hide-on-autohide class (always visible) */
1467
+ .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomleft:not(.hide-on-autohide) {
1468
+ bottom: 15px; /* Move to bottom corner when controls hidden */
1469
+ }
1470
+
1471
+ .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomright:not(.hide-on-autohide) {
1472
+ bottom: 15px; /* Move to bottom corner when controls hidden */
1473
+ }
1474
+
1475
+ /* When controls are shown, bottom watermark stays above controlbar */
1476
+ .video-wrapper.has-controls .video-watermark.watermark-bottomleft,
1477
+ .video-wrapper.has-controls .video-watermark.watermark-bottomright {
1478
+ bottom: 90px; /* Stay above controlbar */
1479
+ }
1480
+
1481
+ /* Responsive adjustments for mobile */
1482
+ @media (max-width: 768px) {
1483
+ .video-watermark img {
1484
+ max-width: 100px;
1485
+ max-height: 50px;
1486
+ }
1487
+
1488
+ .video-watermark.watermark-topleft,
1489
+ .video-watermark.watermark-topright {
1490
+ top: 10px;
1491
+ }
1492
+
1493
+ .video-watermark.watermark-topleft,
1494
+ .video-watermark.watermark-bottomleft {
1495
+ left: 10px;
1496
+ }
1497
+
1498
+ .video-watermark.watermark-topright,
1499
+ .video-watermark.watermark-bottomright {
1500
+ right: 10px;
1501
+ }
1502
+
1503
+ /* Bottom spacing adjusted for mobile */
1504
+ .video-watermark.watermark-bottomleft,
1505
+ .video-watermark.watermark-bottomright {
1506
+ bottom: 75px; /* Above controlbar on mobile */
1507
+ }
1508
+
1509
+ /* Always visible watermark on mobile - moves down when controls hidden */
1510
+ .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomleft:not(.hide-on-autohide),
1511
+ .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomright:not(.hide-on-autohide) {
1512
+ bottom: 10px; /* Move to corner on mobile */
1513
+ }
1514
+ }
1515
+
1516
+ /* Extra small screens */
1517
+ @media (max-width: 480px) {
1518
+ .video-watermark.watermark-bottomleft,
1519
+ .video-watermark.watermark-bottomright {
1520
+ bottom: 65px;
1521
+ }
1522
+
1523
+ .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomleft:not(.hide-on-autohide),
1524
+ .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomright:not(.hide-on-autohide) {
1525
+ bottom: 8px;
1526
+ }
1527
+ }
1528
+
1529
+ /* Clickable watermark cursor */
1530
+ .video-watermark[style*="cursor: pointer"] {
1531
+ cursor: pointer !important;
1532
+ }