button { cursor: pointer; } .playlist-items a { text-decoration: none !important; } .video-js, .video-js[tabindex], .vjs-button:focus, .video-js video:focus, .video-js video:focus-visible { outline: none !important; } /* Show time control in all screen sizes */ .video-js .vjs-time-control { display: block !important; } .video-js .vjs-time-control.vjs-time-divider { display: none !important; } /* Hide time tooltip, mouse display, and sprite preview for audio files */ .video-js.vjs-audio-type .vjs-time-tooltip, .video-js.vjs-audio-type .vjs-mouse-display, .video-js.vjs-audio-type .vjs-sprite-preview-tooltip, .video-js.vjs-audio-type .chapter-image-sprite { display: none !important; opacity: 0 !important; visibility: hidden !important; } /* iOS Native Text Tracks - Position captions above control bar */ /* Using ::cue which is the only way to style native tracks on iOS */ video::cue { line: -4; /* Move captions up by 4 lines from bottom */ } /* Mobile-specific caption font size increases */ @media (max-width: 767px) { /* iOS native text tracks */ video::cue { font-size: 1em; } /* Video.js text tracks for non-iOS */ .video-js .vjs-text-track-display { font-size: 1em !important; } .video-js .vjs-text-track-cue { font-size: 1em !important; } } /* Extra small screens - even larger captions */ @media (max-width: 480px) { video::cue { font-size: 1.2em; } .video-js .vjs-text-track-display { font-size: 1.2em !important; } .video-js .vjs-text-track-cue { font-size: 1.2em !important; } } /* Tablet size - moderate increase */ @media (min-width: 768px) and (max-width: 1024px) { video::cue { font-size: 1em; } .video-js .vjs-text-track-display { font-size: 1em !important; } .video-js .vjs-text-track-cue { font-size: 1em !important; } } /* Adjust subtitle position when controls are visible (for non-native Video.js tracks) */ /* When controls are VISIBLE (user is active), add extra bottom margin */ .video-js:not(.vjs-user-inactive) .vjs-text-track-display { margin-bottom: 2em; /* Adjust this value to move subtitles higher when controls are visible */ } /* When controls are HIDDEN (user is inactive), use default positioning */ .video-js.vjs-user-inactive .vjs-text-track-display { margin-bottom: 0.5em; /* Smaller margin when controls are hidden */ } /* Center the fullscreen button inside its wrapper */ /* @media (hover: hover) and (pointer: fine) { .vjs-fullscreen-control svg { width: 30px !important; height: 30px !important; } } */ /* Prevent control bar buttons from overflowing */ .video-js .vjs-control-bar { overflow: visible !important; display: flex !important; flex-wrap: nowrap !important; } /* Ensure control bar stays within bounds - only allow non-essential buttons to shrink */ .video-js .vjs-control-bar .vjs-settings-button, .video-js .vjs-control-bar .vjs-chapters-button, .video-js .vjs-control-bar .vjs-subtitles-button, .video-js .vjs-control-bar .vjs-captions-button, .video-js .vjs-control-bar .vjs-subs-caps-button, .video-js .vjs-control-bar .vjs-autoplay-toggle, .video-js .vjs-control-bar .vjs-next-video-button { flex-shrink: 1 !important; min-width: 0 !important; } /* Priority controls that should never shrink - maintain their size and spacing */ .video-js .vjs-control-bar .vjs-play-control, .video-js .vjs-control-bar .vjs-volume-panel, .video-js .vjs-control-bar .vjs-fullscreen-control, .video-js .vjs-control-bar .vjs-picture-in-picture-toggle, .video-js .vjs-control-bar .custom-remaining-time { flex-shrink: 0 !important; } /* Hide less important buttons on smaller screens */ @media (max-width: 768px) { .video-js .vjs-control-bar .vjs-picture-in-picture-toggle { display: none !important; } } @media (max-width: 500px) { .video-js .vjs-control-bar .vjs-next-video-button { display: none !important; } } @media (max-width: 400px) { /* Hide subtitles/captions button on very small screens - already available in settings */ .video-js .vjs-control-bar .vjs-subtitles-button, .video-js .vjs-control-bar .vjs-captions-button, .video-js .vjs-control-bar .vjs-subs-caps-button { display: none !important; } }