vidstack
Version:
Build awesome media experiences on the web.
1,645 lines (1,407 loc) • 45.9 kB
CSS
/* hide default UI - only shown if optional UI css files are loaded. */
:where(media-player)
:where(
[data-media-button] > shadow-root,
[data-media-slider]:not([data-styled]) > shadow-root,
[data-media-menu-button] > shadow-root
) {
display: none;
}
:where(media-player) :where([data-media-slider][data-styled] > shadow-root) {
display: contents;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Media
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player) {
--media-focus-ring: 0 0 0 3px rgb(78 156 246);
width: 100%;
display: inline-block;
position: relative;
contain: layout style;
box-sizing: border-box;
user-select: none;
}
media-player:focus,
media-player:focus-visible {
outline: none;
}
:where(media-player[data-focus]:not([data-playing]) media-outlet) {
box-shadow: var(--media-focus-ring);
}
:where(media-player[data-view-type='video'][data-user-idle]) {
pointer-events: auto;
cursor: none;
}
:where(media-outlet) {
display: block;
box-sizing: border-box;
background-color: var(--media-outlet-bg-color, black);
}
:where(media-player[data-fullscreen] media-outlet) {
height: 100%;
}
:where(media-player[data-view-type='audio'] media-outlet) {
background-color: unset;
}
:where(media-outlet audio) {
width: 100%;
}
:where(media-outlet video) {
display: inline-block;
width: 100%;
height: auto;
touch-action: manipulation;
}
:where(media-player[aspect-ratio]:not([data-fullscreen]) media-outlet) {
position: relative;
width: 100%;
height: 0;
padding-bottom: min(
max(var(--media-min-height, 150px), calc(100% / var(--media-aspect-ratio))),
var(--media-max-height, 100vh)
);
}
:where(media-player[aspect-ratio] media-outlet > shadow-root > *) {
position: absolute ;
top: 0 ;
left: 0 ;
width: 100% ;
height: 100% ;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Display
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-icon, media-icon svg) {
display: block;
width: 100%;
height: 100%;
vertical-align: middle;
}
:where(media-time) {
display: inline-block;
contain: content;
font-size: var(--media-time-font-size, 14px);
font-weight: var(--media-time-font-weight, 400);
font-family: var(--media-font-family, sans-serif);
color: var(--media-time-color, inherit);
background-color: var(--media-time-bg);
border-radius: var(--media-time-border-radius);
letter-spacing: var(--media-time-letter-spacing, 0.025em);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Buttons
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player [data-media-button]) {
display: inline-block;
position: relative;
contain: layout style;
user-select: none;
cursor: pointer;
-webkit-user-select: none;
-webkit-tap-highlight-color: transparent;
touch-action: manipulation;
}
:where(media-player [data-media-button]:focus) {
outline: none;
}
:where(media-player [data-media-button][data-focus]) :where([slot], [data-media-icon]) {
box-shadow: var(--media-focus-ring);
}
:where(media-player [data-media-button][data-focus] media-tooltip [slot]) {
box-shadow: unset;
}
:where(media-live-indicator:not([data-live])) {
cursor: unset;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Sliders
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player [data-media-slider]) {
display: inline-block;
position: relative;
contain: layout style;
width: 100%;
cursor: pointer;
user-select: none;
touch-action: none;
-webkit-user-select: none;
-webkit-tap-highlight-color: transparent;
}
:where(media-player [data-media-slider][disabled]) {
cursor: unset;
}
:where(media-player [data-media-slider]:focus) {
outline: none;
}
:where(media-player [data-media-slider][data-focus] [part='track']) {
box-shadow: var(--media-focus-ring);
}
:where(media-player [data-media-slider][data-chapters][data-focus] [part='chapter']) {
clip-path: inset(-2px -2px -2px -2px);
}
:where(media-player[data-bp-x='sm']) :where(media-time-slider [part='chapters']) {
display: none ;
}
:where(media-player:not([data-bp-x='sm']))
:where(
media-time-slider[data-chapters] > :not(shadow-root, [slot]),
media-time-slider[data-chapters] > shadow-root > [part~='track']
) {
display: none ;
}
:where(media-volume-slider [part~='track-progress']) {
display: none ;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Slider Value Text
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-slider-value) {
display: inline-block;
contain: content;
font-size: 14px;
font-family: var(--media-font-family, sans-serif);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Slider Thumbnail
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-slider-thumbnail) {
display: block;
contain: content;
box-sizing: border-box;
}
:where(media-thumbnail) {
display: block;
width: var(--thumbnail-width);
height: var(--thumbnail-height);
background-color: var(--media-thumbnail-bg, black);
contain: strict;
overflow: hidden;
box-sizing: border-box;
border: var(--media-thumbnail-border, 1px solid white);
min-width: var(--media-thumbnail-min-width, 120px);
min-height: var(--media-thumbnail-min-height, 80px);
max-width: var(--media-thumbnail-max-width, 180px);
max-height: var(--media-thumbnail-max-height, 160px);
}
:where(media-thumbnail [part='img']) {
min-width: unset ;
max-width: unset ;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Slider Video
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-slider-video) {
background-color: black;
box-sizing: border-box;
contain: content;
display: inline-block;
border: var(--media-thumbnail-border, 1px solid white);
}
:where(media-slider-video [part='video']) {
display: block;
height: auto;
width: 156px;
}
/* Temporarily hide video while loading. */
:where(media-slider-video[data-loading]) {
opacity: 0;
}
/* Hide video if it fails to load. */
:where(
media-slider-video[aria-hidden='true'],
media-slider-video[aria-hidden='true'] [part='video']
) {
display: none;
width: 0px;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Poster
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-poster) {
display: block;
contain: content;
position: absolute;
top: 0;
left: 0;
opacity: 0;
width: 100%;
height: 100%;
pointer-events: none;
object-fit: cover;
box-sizing: border-box;
transition: opacity 0.2s ease-out;
}
:where(media-poster [part='img']) {
width: 100%;
height: 100%;
object-fit: inherit;
object-position: inherit;
pointer-events: none;
user-select: none;
-webkit-user-select: none;
box-sizing: border-box;
}
:where(media-poster[aria-hidden='true']) {
display: none;
}
:where(media-player[data-view-type='video']:not([data-started]) media-poster) {
opacity: 1;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Captions
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-captions[aria-hidden='true']) {
opacity: 0;
visibility: hidden;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Gestures
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-gesture) {
position: absolute;
display: block;
contain: content;
z-index: 0;
opacity: 0;
visibility: hidden;
pointer-events: none ;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menus
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu > [data-media-menu-items]:focus) {
outline: none;
}
:where(media-menu) :where([role='menuitem']:focus, [role='menuitemradio']:focus) {
outline: none;
}
:where(media-menu)
:where(
[role='menuitem']:focus-visible,
[role='menuitem'][data-focus],
[role='menuitemradio']:focus-visible,
[role='menuitemradio'][data-focus]
),
:where(media-menu > [data-media-menu-button][role='button'][data-focus] [data-media-icon]),
:where(media-menu > [data-media-menu-button][role='button'][data-focus] svg),
:where(media-radio[data-focus]) {
outline: none;
box-shadow: var(--media-focus-ring);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* ARIA
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player [data-media-button][aria-hidden='true']),
:where(media-player [data-media-slider][aria-hidden='true']),
:where(media-thumbnail[aria-hidden='true']),
:where(media-slider-thumbnail[aria-hidden='true']) {
display: none ;
}
:where(media-buffering-indicator) {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
z-index: 1;
}
:where(media-buffering-indicator [part='icon']) {
width: var(--media-buffering-size, 84px);
height: var(--media-buffering-size, 84px);
opacity: 0;
transition: var(--media-buffering-transition, opacity 200ms ease);
}
:where(media-buffering-indicator [part='track']) {
color: var(--media-buffering-track-color, #f5f5f5);
opacity: var(--media-buffering-track-opacity, 0.25);
stroke-width: var(--media-buffering-track-width, 8);
}
:where(media-buffering-indicator [part='track-fill']) {
color: var(--media-buffering-track-fill-color, #f5f5f5);
opacity: var(--media-buffering-track-fill-opacity, 0.75);
stroke-width: var(--media-buffering-track-fill-width, 9);
stroke-dasharray: 100;
stroke-dashoffset: var(--media-buffering-track-fill-offset, 50);
}
:where(media-buffering-indicator[data-buffering] [part='icon']) {
opacity: 1;
animation: var(--media-buffering-animation, media-buffering-spin 1s linear infinite);
}
@keyframes media-buffering-spin {
to {
transform: rotate(360deg);
}
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Buttons
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player [data-media-button]) {
-webkit-tap-highlight-color: transparent;
display: inline-flex;
justify-content: center;
align-items: center;
user-select: none;
border-radius: var(--media-button-border-radius, 2px);
color: var(--media-button-color, var(--media-controls-color, #f5f5f5));
width: var(--media-button-size, 40px);
height: var(--media-button-size, 40px);
transition: transform 0.2s ease-out;
}
:where(media-player[data-fullscreen] [data-media-button]) {
width: var(--media-fullscreen-button-size, 42px);
height: var(--media-fullscreen-button-size, 42px);
}
:where(media-player[data-bp-x='sm'][data-fullscreen] [data-media-button]) {
width: var(--media-mobile-fullscreen-button-size, 42px);
height: var(--media-mobile-fullscreen-button-size, 42px);
}
:where(media-player)
:where(
[data-media-button] > svg,
[data-media-button] > media-icon,
[data-media-button] > shadow-root > svg,
[data-media-button] > shadow-root > media-icon
) {
width: var(--media-button-icon-size, 80%);
height: var(--media-button-icon-size, 80%);
border-radius: var(--media-button-border-radius, 2px);
}
:where(media-player [data-media-button] > shadow-root) {
display: contents;
}
:where(media-player [data-media-button]:not([default-appearance]) > shadow-root:not(:only-child)) {
display: none;
}
:where(media-player [data-media-button] [slot]) {
display: none ;
}
:where(media-player)
:where(
media-toggle-button[data-pressed] [slot='on'],
media-toggle-button:not([data-pressed]) [slot='off'],
media-play-button[data-paused]:not([data-ended]) [slot='play'],
media-play-button[data-ended] [slot='replay'],
media-play-button:not([data-paused]) [slot='pause'],
media-mute-button[data-volume='high'] [slot='volume-high'],
media-mute-button[data-volume='low'] [slot='volume-low'],
media-mute-button[data-volume='muted'] [slot='volume-muted'],
media-mute-button[data-volume='muted'] [slot='unmute'],
media-mute-button:not([data-volume='muted']) [slot='mute'],
media-pip-button:not([data-pip]) [slot='enter'],
media-pip-button[data-pip] [slot='exit'],
media-caption-button:not([data-pressed]) [slot='off'],
media-caption-button[data-pressed] [slot='on'],
media-fullscreen-button:not([data-fullscreen]) [slot='enter'],
media-fullscreen-button[data-fullscreen] [slot='exit'],
media-seek-button:not([seconds*='-']) [slot='forward'],
media-seek-button[seconds*='-'] [slot='backward'],
media-menu [data-media-menu-button][data-pressed] [slot='close'],
media-menu [data-media-menu-button]:not([data-pressed]) [slot='open']
) {
display: inline-block ;
}
:where(media-player [data-media-button][aria-hidden='true']) {
display: none;
}
@media (pointer: fine) {
:where(media-player [data-media-button][data-hover]) {
background-color: var(--media-button-hover-bg, rgb(255 255 255 / 0.2));
}
:where(media-player [data-media-button][data-hover]) {
transform: var(--media-button-hover-transform, scale(1));
transition: var(--media-button-hover-transition, transform 0.2s ease-in);
}
}
@media (pointer: coarse) {
:where(media-player [data-media-button][data-hover]) {
border-radius: var(--media-button-touch-hover-border-radius, 100%);
background-color: var(--media-button-touch-hover-bg, rgb(255 255 255 / 0.2));
}
}
:where(media-captions) {
--overlay-padding: var(--media-captions-padding, 1%);
--cue-color: var(--media-cue-color, white);
--cue-bg-color: var(--media-cue-bg, rgba(0, 0, 0, 0.7));
--cue-font-size: var(--media-cue-font-size, calc(var(--overlay-height) / 100 * 5));
--cue-line-height: var(--media-cue-line-height, calc(var(--cue-font-size) * 1.2));
--cue-padding-x: var(--media-cue-padding-x, calc(var(--cue-font-size) * 0.6));
--cue-padding-y: var(--media-cue-padding-x, calc(var(--cue-font-size) * 0.4));
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
contain: layout style size;
margin: var(--overlay-padding);
font-size: var(--cue-font-size);
font-family: sans-serif;
box-sizing: border-box;
pointer-events: none;
user-select: none;
word-spacing: normal;
word-break: break-word;
}
:where(media-player[data-fullscreen][data-bp-x='lg'] media-captions) {
--cue-font-size: var(
--media-large-fullscreen-cue-font-size,
calc(var(--overlay-height) / 100 * 3)
);
}
@media (orientation: portrait) {
:where(media-player[data-bp-x='sm'][data-fullscreen] media-captions) {
--cue-font-size: 18px;
}
}
:where(media-player[data-view-type='audio'] media-captions) {
position: relative;
margin: 0;
}
:where(media-captions[aria-hidden='true']) {
opacity: 0;
visibility: hidden;
}
:where(media-captions [part='cue-display']) {
position: absolute;
direction: ltr;
overflow: visible;
contain: content;
top: var(--cue-top);
left: var(--cue-left);
right: var(--cue-right);
bottom: var(--cue-bottom);
width: var(--cue-width, auto);
height: var(--cue-height, auto);
box-sizing: border-box;
transform: var(--cue-transform);
text-align: var(--cue-text-align);
writing-mode: var(--cue-writing-mode, unset);
white-space: pre-line;
unicode-bidi: plaintext;
min-width: min-content;
min-height: min-content;
padding: var(--media-cue-display-padding);
background-color: var(--media-cue-display-bg);
border-radius: var(--media-cue-display-border-radius);
}
:where(media-captions[data-dir='rtl'] [part='cue-display']) {
direction: rtl;
}
:where(media-captions [part='cue']) {
display: inline-block;
contain: content;
border: var(--media-cue-border, unset);
border-radius: var(--media-cue-border-radius, 2px);
backdrop-filter: var(--media-cue-backdrop, blur(8px));
padding: var(--cue-padding-y) var(--cue-padding-x);
line-height: var(--cue-line-height);
background-color: var(--cue-bg-color);
box-sizing: border-box;
color: var(--cue-color);
box-shadow: var(--media-cue-box-shadow, var(--cue-box-shadow));
white-space: var(--cue-white-space, pre-wrap);
outline: var(--cue-outline);
text-shadow: var(--cue-text-shadow);
}
:where(media-captions [part='cue-display'][data-vertical] [part='cue']) {
padding: var(--cue-padding-x) var(--cue-padding-y);
}
:where(media-captions [part='region']) {
position: absolute;
display: inline-flex;
flex-flow: column;
justify-content: flex-start;
width: var(--region-width);
height: var(--region-height);
min-height: 0px;
max-height: var(--region-height);
writing-mode: horizontal-tb;
top: calc(
var(
--region-top,
var(--overlay-height) * var(--region-viewport-anchor-y) / 100 - var(--region-height) *
var(--region-anchor-y) / 100
)
);
left: var(
--region-left,
calc(
calc(var(--region-viewport-anchor-x) * 1%) -
calc(var(--region-width) * var(--region-anchor-x) / 100)
)
);
right: var(--region-right);
bottom: var(--region-bottom);
overflow: hidden;
overflow-wrap: break-word;
box-sizing: border-box;
}
:where(media-captions [part='region'][data-active]) {
}
:where(media-captions [part='region'][data-scroll='up']) {
justify-content: end;
}
:where(media-captions [part='region'][data-active][data-scroll='up']) {
transition: top 0.433s;
}
:where(media-captions [part='region'] > [part='cue-display']) {
position: relative;
width: auto;
left: var(--cue-offset);
height: var(--cue-height, auto);
text-align: var(--cue-text-align);
unicode-bidi: plaintext;
margin-top: 2px;
}
:where(media-captions [part='region'] [part='cue']) {
position: relative;
border-radius: 0px;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Live Indicator
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-live-indicator) {
min-width: auto;
min-height: auto;
}
:where(media-live-indicator [part='container']) {
width: var(--media-live-indicator-width, 40px);
height: var(--media-live-indicator-height, 40px);
display: flex;
align-items: center;
justify-content: center;
}
:where(media-live-indicator [part='text']) {
background-color: var(--media-live-indicator-bg, #8a8a8a);
border-radius: var(--media-live-indicator-border-radius, 2px);
color: var(--media-live-indicator-color, #161616);
font-family: var(--media-font-family, sans-serif);
font-size: var(--media-live-indicator-font-size, 12px);
font-weight: var(--media-live-indicator-font-weight, 600);
letter-spacing: var(--media-live-indicator-letter-spacing, 1.5px);
padding: var(--media-live-indicator-padding, 1px 4px);
transition: color 0.3s ease;
}
:where(media-live-indicator[data-live-edge] [part='text']) {
background-color: var(--media-live-indicator-edge-bg, #dc2626);
color: var(--media-live-indicator-edge-color, #f5f5f5);
}
:where(media-live-indicator[data-focus] [part='text']) {
box-shadow: var(--media-focus-ring);
}
:where(media-live-indicator:not([data-live]) > shadow-root) {
display: none;
}
:where(
media-live-indicator:not([data-live]) [slot='live'],
media-live-indicator[data-live-edge] [slot='live'],
media-live-indicator[data-live] [slot='not-live'],
media-live-indicator:not([data-live-edge]) [slot='live-edge']
) {
display: none;
}
@media (pointer: fine) {
:where(media-live-indicator[data-hover]) {
background-color: unset;
}
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menu
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu) {
box-sizing: border-box;
display: inline-flex;
font-family: var(--media-font-family, sans-serif);
font-size: var(--media-menu-font-size, 15px);
font-weight: var(--media-menu-font-weight, 500);
position: relative;
}
:where(media-menu[data-open]) {
z-index: 99999;
}
:where(media-menu[data-disabled]:not([data-submenu])) {
display: none;
}
:where(media-menu media-menu) {
display: inline-block;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Scroll
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
@media (prefers-reduced-motion: no-preference) {
:where(media-menu > [data-media-menu-items]) {
scroll-behavior: smooth;
}
}
:where(media-menu > [data-media-menu-items]) {
box-sizing: border-box;
min-width: var(--media-menu-min-width, 260px);
scrollbar-width: thin;
}
:where(media-menu > [data-media-menu-items])::-webkit-scrollbar {
background-color: black;
border-radius: var(--media-menu-border-radius, 8px);
height: 6px;
width: 5px;
}
:where(media-menu > [data-media-menu-items])::-webkit-scrollbar-track {
background-color: var(--media-menu-scrollbar-track-bg, rgb(245 245 245 / 0.08));
border-radius: 4px;
}
:where(media-menu > [data-media-menu-items])::-webkit-scrollbar-thumb {
background-color: var(--media-menu-scrollbar-thumb-bg, rgb(245 245 245 / 0.1));
border-radius: 4px;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menu Button
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu shadow-root) {
display: contents;
}
:where(media-menu [data-media-menu-button] > shadow-root:only-child > [slot]) {
display: inline-block ;
}
:where(media-menu [data-media-menu-button][role='button'] [data-rotate]) {
transition: transform 0.2s ease-out;
}
:where(media-menu [data-media-menu-button][data-pressed][role='button'] [data-rotate]) {
transform: rotate(var(--media-menu-button-icon-rotate-deg, 90deg));
transition: transform 0.2s ease-in;
}
:where(media-menu [data-media-menu-button][role='button']) {
display: inline-flex;
align-items: center;
justify-content: center;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menu Button Parts
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu [data-media-menu-button]) {
box-sizing: border-box;
}
/* SR-only. */
:where(media-menu [data-media-menu-button][role='button']) :where([slot='label'], [slot='hint']) {
position: absolute;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px, 1px, 1px, 1px);
}
:where(media-menu [data-media-menu-button][role='button'])
:where([slot='open-icon'], [slot='close-icon']) {
display: none ;
}
:where(media-menu [data-media-menu-button]) :where([slot='hint'], [slot='open-icon']) {
color: var(--media-menu-hint-color, rgb(245 245 245 / 0.5));
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menu
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu > [data-media-menu-items]) {
display: flex;
flex-direction: column;
}
:where(media-menu)
:where(
[role='menuitem']:focus-visible,
[role='menuitem'][data-hocus],
[role='menuitemradio'][data-hocus]
) {
cursor: pointer;
background-color: var(--media-menu-item-hover-bg, rgb(245 245 245 / 0.08));
}
@media (pointer: fine) {
:where(media-menu [role='menuitem']:hover) {
cursor: pointer;
background-color: var(--media-menu-item-hover-bg, rgb(245 245 245 / 0.08));
}
}
:where(media-menu:not([data-submenu]) > [data-media-menu-items]) {
position: absolute;
right: var(--media-menu-x-offset, 4px);
bottom: 100%;
margin-bottom: var(--media-menu-y-offset, 4px);
padding: var(--media-menu-padding, 10px);
border: var(--media-menu-border, 1px solid rgb(255 255 255 / 0.1));
background-color: var(--media-menu-bg, rgb(10 10 10 / 0.95));
border-radius: var(--media-menu-border-radius, 8px);
box-shadow: var(--media-menu-box-shadow, 1px 1px 1px rgb(10 10 10 / 0.5));
backdrop-filter: blur(4px);
height: var(--menu-height, auto);
will-change: width, height;
max-height: var(--media-menu-max-height, calc(var(--media-height) * 0.7));
overflow-y: auto;
overscroll-behavior: contain;
opacity: 0;
pointer-events: none;
box-sizing: border-box;
transition: height 0.25s linear, opacity 0.15s ease-out, transform 0.3s ease-in;
}
:where(media-menu[position~='left']:not([data-popup]) > [data-media-menu-items]) {
left: var(--media-menu-x-offset, 4px);
right: unset;
}
:where(media-menu[position~='bottom']:not([data-popup]) > [data-media-menu-items]) {
top: 100%;
margin-top: var(--media-menu-y-offset, 4px);
bottom: unset;
margin-bottom: unset;
}
:where(media-menu [data-media-menu-items][data-resizing]) {
overflow: hidden;
pointer-events: none;
}
:where(media-menu:not([data-submenu]) > [data-media-menu-items][aria-hidden='false']) {
opacity: 1;
pointer-events: auto;
}
:where(media-menu[data-popup] > [data-media-menu-items]) {
position: fixed;
left: 16px;
right: 16px;
top: unset;
bottom: 0;
max-height: var(--media-mobile-menu-portrait-max-height, 40vh);
transform: translateY(100%);
z-index: 9999999;
}
:where(media-menu[data-popup] > [data-media-menu-items][aria-hidden='false']) {
opacity: 1;
transform: translateY(-24px);
}
:where(media-menu[data-popup] > [data-media-menu-items]) {
max-width: 480px;
margin: 0 auto;
}
:where(media-menu[data-popup-wide] > [data-media-menu-items]) {
max-height: var(--media-mobile-menu-landscape-max-height, min(70vh, 400px));
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Submenu
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu[data-submenu] [data-media-menu-button]) {
display: flex;
align-items: center;
justify-content: flex-start;
}
:where(media-menu[data-submenu] > [data-media-menu-items]) {
width: 100%;
margin-top: 12px;
}
:where(media-menu[aria-hidden='true']),
:where(media-menu[data-submenu] > [data-media-menu-items][aria-hidden='true']) {
display: none;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menu Item
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu) :where([role='menuitem'], [role='menuitemradio']) {
-webkit-tap-highlight-color: transparent;
user-select: none;
color: var(--media-menu-item-color, #f5f5f5);
display: flex;
align-items: center;
justify-content: left;
padding: var(--media-menu-item-padding, 10px);
border-radius: var(--media-menu-item-border-radius, 2px);
box-sizing: border-box;
}
:where(media-menu[data-popup]) :where([role='menuitem'], [role='menuitemradio']) {
padding: var(--media-mobile-menu-item-padding, 12px);
}
:where(media-menu[data-submenu] > [data-media-menu-items]) {
align-items: flex-start;
justify-content: center;
flex-direction: column;
}
:where(media-menu [data-media-menu-button][role='menuitem'][aria-expanded='true']) {
border-radius: 0;
border-top-left-radius: var(--media-menu-item-border-radius, 2px);
border-top-right-radius: var(--media-menu-item-border-radius, 2px);
border-bottom: var(--media-menu-divider, 1px solid rgb(245 245 245 /0.15));
}
:where(media-menu[data-submenu] > [data-media-menu-button][aria-expanded='true']) {
position: sticky;
top: calc(-1 * var(--media-menu-padding, 10px));
left: 0;
width: 100%;
z-index: 10;
background-color: var(--media-menu-top-bar-bg, rgb(10 10 10));
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Menu Item Parts
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-menu [role='menuitem'] [slot='label']) {
margin-left: 6px;
}
:where(media-menu [role='menuitem'] [slot*='icon']) {
width: var(--media-menu-item-icon-size, 22px);
height: var(--media-menu-item-icon-size, 22px);
}
:where(media-menu [role='menuitem']) :where([slot='open-icon'], [slot='close-icon']) {
width: 18px;
height: 18px;
}
:where(media-menu [role='menuitem']) :where([slot='hint'], [slot='open-icon']) {
margin-left: auto;
}
:where(media-menu [role='menuitem']) :where([slot='hint'] + [slot='open-icon']) {
margin-left: 2px;
}
:where(media-menu [role='menuitem'][aria-hidden='true']),
:where(media-menu [role='menuitem'][aria-expanded='true'] [slot='open-icon'] ) {
display: none ;
}
:where(media-menu [role='menuitem'][aria-disabled='true'] [slot='open-icon']) {
opacity: 0;
}
:where([data-media-menu-button] [slot='close-icon']),
:where(media-menu [role='menuitem'][aria-expanded='true'] [slot='icon']) {
display: none ;
}
:where(media-menu [role='menuitem'][aria-expanded='true'] [slot='close-icon']) {
display: inline ;
}
:where(media-menu [part='info']) {
color: var(--media-menu-item-info-color, rgb(168, 169, 171));
font-size: var(--media-menu-item-info-font-size, 13px);
margin-left: auto;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Radio
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-radio-group) {
box-sizing: border-box;
width: 100%;
display: flex;
flex-direction: column;
}
:where(media-radio) {
position: relative;
align-items: center;
border-radius: 2px;
box-sizing: border-box;
cursor: pointer;
display: flex;
font-family: var(--media-font-family, sans-serif);
font-size: 15px;
font-weight: 500;
contain: content;
padding: var(--media-menu-item-padding, 12px);
}
:where(media-radio [part='check']) {
align-items: center;
border-radius: 9999px;
border: var(--media-menu-radio-check-border, 2px solid rgb(245 245 245 / 0.5));
box-sizing: border-box;
display: flex;
height: var(--media-menu-radio-check-size, 9px);
justify-content: center;
margin-right: 8px;
width: var(--media-menu-radio-check-size, 9px);
border-width: unset ; /* prevent tailwind breaking */
}
:where(media-radio[aria-checked='true'] [part='check']) {
border: 2px solid var(--media-menu-radio-check-active-color, #f5f5f5);
}
:where(media-radio[aria-checked='true'] [part='check'])::after {
content: '';
border-color: var(--media-menu-radio-check-active-color, #f5f5f5);
background-color: var(--media-menu-radio-check-active-color, #f5f5f5);
border-radius: 9999px;
box-sizing: border-box;
height: var(--media-menu-radio-check-inner-size, 4px);
width: var(--media-menu-radio-check-inner-size, 4px);
border-width: unset ; /* prevent tailwind breaking */
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Chapters Menu
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-chapters-menu-items) {
padding: var(--media-chapters-padding, 0);
min-width: var(--media-chapters-min-width, var(--media-menu-min-width, 220px));
}
:where(media-chapters-menu-items[data-thumbnails]) {
min-width: var(--media-chapters-with-thumbnails-min-width, 300px);
}
:where(media-chapters-menu-items [part='check']) {
display: none;
}
:where(media-chapters-menu-items [part='chapter']) {
border-radius: 0;
border-bottom: var(--media-chapters-divider, 1px solid rgb(245 245 245 / 0.15));
}
:where(media-chapters-menu-items [part='chapter']:last-child) {
border-bottom: 0;
}
:where(media-chapters-menu-items [part='chapter'][data-focus]) {
margin: var(--media-chapters-item-focus-margin, 4px);
}
:where(media-chapters-menu-items [part='chapter'][aria-checked='true']) {
background-color: var(--media-chapters-item-active-bg, rgb(255 255 255 / 0.04));
border-left: var(--media-chapters-item-active-border-left);
}
:where(media-chapters-menu-items [part='chapter'][aria-checked='true']):after {
content: ' ';
width: var(--played-percent);
height: var(--media-chapters-progress-height, 3px);
position: absolute;
bottom: 0;
left: 0;
border-radius: var(--media-chapters-progress-border-radius, 0);
background-color: var(--media-chapters-progress-bg, #f5f5f5);
}
:where(media-chapters-menu-items [part='thumbnail']) {
margin-right: var(--media-chapters-thumbnail-gap, 12px);
border: var(--media-chapters-thumbnail-border, 0);
flex-shrink: 0;
min-width: var(--media-chapters-thumbnail-min-width, 100px);
min-height: var(--media-chapters-thumbnail-min-height, 56px);
max-width: var(--media-chapters-thumbnail-max-width, 120px);
max-height: var(--media-chapters-thumbnail-max-height, 68px);
}
:where(media-chapters-menu-items [part='title']) {
color: var(--media-chapters-title-color, #f5f5f5);
font-size: var(--media-chapters-title-font-size, 15px);
font-weight: var(--media-chapters-title-font-weight, 500);
white-space: var(--media-chapters-title-white-space, nowrap);
}
:where(media-chapters-menu-items [part='start-time']) {
display: inline-block;
padding: var(--media-chapters-start-time-padding, 1px 4px);
letter-spacing: var(--media-chapters-start-time-letter-spacing, 0.4px);
border-radius: var(--media-chapters-start-time-border-radius, 2px);
color: var(--media-chapters-start-time-color, rgb(168, 169, 171));
font-size: var(--media-chapters-start-time-font-size, 12px);
font-weight: var(--media-chapters-start-time-font-weight, 500);
background-color: var(--media-chapters-start-time-bg, rgb(156 163 175 / 0.2));
margin-top: var(--media-chapters-start-time-gap, 6px);
}
:where(media-chapters-menu-items [part='duration']) {
color: var(--media-chapters-duration-color, rgb(245 245 245 / 0.5));
background-color: var(--media-chapters-duration-bg);
font-size: var(--media-chapters-duration-font-size, 12px);
font-weight: var(--media-chapters-duration-font-weight, 500);
border-radius: var(--media-chapters-duration-border-radius, 2px);
margin-top: var(--media-chapters-duration-gap, 6px);
}
:where(media-menu [data-media-menu-button][aria-disabled='true']) {
display: none;
}
:where(media-chapters-menu-items:not([data-thumbnails]) [part='content']) {
width: 100%;
flex-direction: row;
display: flex;
flex-wrap: wrap;
align-items: center;
}
:where(media-chapters-menu-items:not([data-thumbnails]) [part='start-time']) {
margin-top: 0;
margin-left: auto;
}
:where(media-chapters-menu-items:not([data-thumbnails]) [part='duration']) {
margin-top: 4px;
flex-basis: 100%;
}
:where(media-player [data-media-slider]) {
-webkit-tap-highlight-color: transparent;
--width: var(--media-slider-width, 100%);
--height: var(--media-slider-height, 48px);
--thumb-size: var(--media-slider-thumb-size, 15px);
--thumb-focus-size: var(--media-slider-focused-thumb-size, calc(var(--thumb-size) * 1.1));
--track-width: var(--media-slider-track-width, 100%);
--track-height: var(--media-slider-track-height, 5px);
--track-focus-width: var(--media-slider-focused-track-width, var(--track-width));
--track-focus-height: var(--media-slider-focused-track-height, calc(var(--track-height) * 1.25));
width: var(--width);
height: var(--height);
/** Prevent thumb flowing out of slider. */
margin: 0 calc(var(--thumb-size) / 2);
contain: layout style;
}
:where(media-player [data-media-slider] > shadow-root) {
display: contents;
}
:where(media-player [data-media-slider] [part~='track']) {
z-index: 0;
position: absolute;
width: var(--track-width);
height: var(--track-height);
top: 50%;
left: 0;
border-radius: var(--media-slider-track-border-radius, 1px);
transform: translateY(-50%) translateZ(0);
background-color: var(--media-slider-track-bg, rgb(255 255 255 / 0.3));
contain: strict;
}
:where(media-player [data-media-slider] [part='track']) {
backdrop-filter: blur(2px);
}
:where(media-player [data-media-slider][data-focus] [part='track']) {
outline-offset: var(--thumb-size);
}
:where(media-player [data-media-slider]:not([data-chapters])[data-interactive] [part*='track']) {
width: var(--track-focus-width);
height: var(--track-focus-height);
}
:where(media-player [data-media-slider] [part~='track-fill']) {
z-index: 2; /** above track and track progress. */
background-color: var(--media-slider-track-fill-bg, #fafafa);
width: var(--slider-fill-percent);
will-change: width;
}
:where(media-player[data-live] media-time-slider [part~='track-fill']) {
background-color: var(--media-slider-track-fill-live-bg, #dc2626);
}
:where(media-time-slider [part~='track-progress']) {
z-index: 1; /** above track. */
left: 0;
width: var(--media-buffered-percent, 0%);
will-change: width;
background-color: var(--media-slider-track-progress-bg, rgb(255 255 255 / 0.5));
}
:where(media-player [data-media-slider] [part='thumb-container']) {
z-index: 2; /** above track fill. */
position: absolute;
top: 0;
left: var(--slider-fill-percent);
width: var(--thumb-size);
height: 100%;
transform: translateX(-50%) translateZ(0); /** re-center along x-axis. */
will-change: left;
pointer-events: none;
contain: layout size style;
}
:where(media-player [data-media-slider][data-dragging] [part='thumb-container']) {
/* left: var(--slider-pointer-percent); */
}
:where(media-player [data-media-slider] [part='thumb']) {
position: absolute;
top: 50%;
left: 0;
opacity: 0;
contain: strict;
width: var(--thumb-size);
height: var(--thumb-size);
border: var(--media-slider-thumb-border, 1px solid #cacaca);
border-radius: var(--media-slider-thumb-border-radius, 9999px);
background-color: var(--media-slider-thumb-bg, #fff);
transform: translateY(-50%) translateZ(0);
transition: opacity 0.15s ease-in;
pointer-events: none;
}
:where(media-player)
:where([data-media-slider][data-dragging], [data-media-slider][data-focus])
:where([part='thumb']) {
box-shadow: var(--media-slider-focused-thumb-shadow, 0 0 0 4px hsla(0, 0%, 100%, 0.4));
}
:where(media-player [data-media-slider][data-interactive] [part='thumb']) {
opacity: 1;
transition: var(--media-slider-thumb-transition, opacity 0.2s ease-in, box-shadow 0.2s ease);
}
:where(media-player [data-media-slider][data-dragging] [part='thumb']) {
width: var(--thumb-focus-size);
height: var(--thumb-focus-size);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Preview
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player [data-media-slider] [slot='preview']) {
display: flex;
position: absolute;
left: var(--preview-left);
bottom: calc(100% + var(--media-slider-preview-gap, -4px));
flex-direction: column;
align-items: center;
opacity: 0;
background-color: var(--media-slider-preview-bg);
border-radius: var(--media-slider-preview-border-radius, 2px);
pointer-events: none;
transform: translateX(-50%) translateZ(0);
transition: opacity 0.2s ease-out;
will-change: left, opacity;
contain: layout paint style;
}
:where(media-player [data-media-slider][data-interactive] [slot='preview']) {
opacity: 1;
transition: opacity 0.2s ease-in;
}
:where(media-player [data-media-slider] media-slider-value) {
padding: var(--media-slider-value-padding, 1px 10px);
color: var(--media-slider-value-color, white);
background-color: var(--media-slider-value-bg, black);
border-radius: var(--media-slider-value-border-radius, 2px);
border: var(--media-slider-value-border);
}
:where(
media-slider-video:not([aria-hidden='true']) + media-slider-value,
media-slider-video:not([aria-hidden='true']) + [part='chapter-title'],
media-slider-thumbnail:not([aria-hidden='true']) + media-slider-value,
media-slider-thumbnail:not([aria-hidden='true']) + [part='chapter-title']
) {
margin-top: var(--media-slider-value-gap, 8px);
}
:where(media-player:not([data-can-play]) media-time-slider media-slider-value) {
display: none;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Vertical
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-player [data-media-slider][aria-orientation='vertical']) {
--width: var(--media-slider-width, 48px);
--height: var(--media-slider-height, 100%);
--track-width: var(--media-slider-track-width, 4px);
--track-height: var(--media-slider-track-height, 100%);
--track-focus-width: var(--media-slider-focused-track-width, calc(var(--track-width) * 1.25));
--track-focus-height: var(--media-slider-focused-track-height, var(--track-height));
/** Prevent thumb flowing out of slider. */
margin: calc(var(--thumb-size) / 2) 0;
}
:where(media-player [data-media-slider][aria-orientation='vertical'] [part*='track']) {
top: unset;
bottom: 0;
left: 50%;
transform: translateX(-50%) translateZ(0);
}
:where(media-player [data-media-slider][aria-orientation='vertical'] [part~='track-fill']) {
width: var(--track-width);
height: var(--slider-fill-percent);
will-change: height;
transform: translateX(-50%) translateZ(0);
}
:where(media-player [data-media-slider][aria-orientation='vertical'] [part~='track-progress']) {
top: unset;
bottom: 0;
width: var(--track-width);
height: var(--media-buffered-percent, 0%);
will-change: height;
}
:where(media-player [data-media-slider][aria-orientation='vertical'] [part='thumb-container']) {
top: unset;
bottom: var(--slider-fill-percent);
left: 50%;
width: 100%;
will-change: bottom;
transform: translateX(-50%) translateZ(0);
}
:where(
media-player
[data-media-slider][aria-orientation='vertical'][data-dragging]
[part='thumb-container']
) {
top: unset;
/* bottom: var(--slider-pointer-percent); */
}
:where(media-player [data-media-slider][aria-orientation='vertical'] [part='thumb']) {
top: unset;
bottom: 0;
left: 50%;
transform: translateX(-50%) translateY(50%) translateZ(0);
}
:where(media-player [data-media-slider][aria-orientation='vertical'] [slot='preview']) {
top: unset;
left: calc(100% + var(--media-slider-vertical-preview-gap, 4px));
bottom: var(--preview-bottom);
will-change: bottom;
transform: translateY(50%) translateZ(0);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Chapters
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-time-slider [part='chapters']) {
position: relative;
display: flex;
align-items: center;
width: 100%;
height: 100%;
contain: layout style;
}
:where(media-time-slider [part='chapter-container']) {
display: flex;
align-items: center;
width: 0%;
height: 100%;
margin-right: 2px;
contain: layout style;
}
:where(media-time-slider [part='chapter-container']:last-child) {
margin-right: 0;
}
:where(media-time-slider [part='chapter']) {
position: relative;
display: flex;
align-items: center;
width: 100%;
height: var(--track-height);
will-change: height, transform;
contain: layout style;
border-radius: var(--media-slider-track-border-radius, 1px);
}
@media (pointer: fine) {
:where(media-time-slider [part='chapter-container']:hover [part='chapter']) {
transform: var(--media-slider-chapter-hover-transform, scaleY(2));
transition: var(
--media-slider-chapter-hover-transition,
transform 0.1s cubic-bezier(0.4, 0, 1, 1)
);
}
}
:where(media-time-slider [part='chapter-title']) {
font-family: var(--media-font-family, sans-serif);
font-size: var(--media-slider-chapter-title-font-size, 14px);
color: var(--media-slider-chapter-title-color, #f5f5f5);
background-color: var(--media-slider-chapter-title-bg);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Tooltips
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
:where(media-tooltip) {
background-color: var(--media-tooltip-bg-color, black);
border: var(--media-tooltip-border, 1px solid rgb(255 255 255 / 0.1));
border-radius: var(--media-tooltip-border-radius, 2px);
box-sizing: border-box;
color: var(--media-tooltip-color, hsl(0, 0%, 80%));
display: block;
font-family: var(--media-font-family, sans-serif);
font-size: var(--media-tooltip-font-size, 13px);
font-weight: var(--media-tooltip-font-weight, 500);
left: 50%;
bottom: 80%;
margin-left: unset;
margin-bottom: var(--media-tooltip-y-offset, 12px);
opacity: 0;
padding: var(--media-tooltip-padding, 2px 8px);
pointer-events: none;
position: absolute;
transform-origin: 50% 100%;
transform: translate(-50%, 12px) scale(0.8);
transition: transform 0.2s ease-out 0.1s, opacity 0.2s ease-out 0.1s;
white-space: nowrap;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Left
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k
*/
:where(media-tooltip[position~='left']) {
left: 0;
transform: translateY(12px) scale(0.8);
transform-origin: 0 100%;
margin-left: var(--media-tooltip-x-offset, 0);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Right
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k
*/
:where(media-tooltip[position~='right']) {
left: auto;
right: 0;
margin-left: unset;
margin-right: var(--media-tooltip-x-offset, 0);
transform: translateY(12px) scale(0.8);
transform-origin: 100% 100%;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Bottom
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k
*/
:where(media-tooltip[position~='bottom']) {
top: 80%;
bottom: unset;
margin-top: var(--media-tooltip-y-offset, 12px);
margin-bottom: unset;
transform: translate(-50%, -12px) scale(1);
}
:where(media-tooltip[position='bottom left'], media-tooltip[position='bottom right']) {
transform: translateY(-12px) scale(0.8);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Display
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k
*/
:where(media-menu [data-media-menu-button][role='button'][data-pressed] media-tooltip) {
opacity: 0;
display: none;
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Hover / Focus
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~k
*/
@media (pointer: fine) {
:where(media-player [data-media-button][data-hocus] media-tooltip) {
opacity: 1;
transform: translate(-50%) scale(1);
transition: transform 0.2s ease-in 0.1s, opacity 0.2s ease-in 0.1s;
}
:where(media-player [data-media-button][data-hocus] media-tooltip[position~='left']) {
transform: translate(0) scale(1);
}
:where(media-player [data-media-button][data-hocus] media-tooltip[position~='right']) {
transform: translate(0) scale(1);
}
}