Customize skins
Learn the public customization surface for packaged Video.js skins and when to eject
Video.js v10 comes with two pre-built skins: Default and Minimal. Start with their public CSS custom properties. When you need to change controls, layout, or interactions, eject the closest skin by copying its code into your project and making it your own.
Basic customization
Set these CSS custom properties directly on the skin:
<video-skin style="--media-accent-color: #f5c518; --media-border-radius: 1rem">
<video src="video.mp4"></video>
</video-skin><VideoSkin
style={
{
'--media-accent-color': '#f5c518',
'--media-border-radius': '1rem',
} as React.CSSProperties
}
>
<Video src="video.mp4" />
</VideoSkin>| Property Name | Description | Type | Example |
|---|---|---|---|
--media-accent-color |
The color of slider fills and accented controls | <color> |
#f5c518 |
--media-accent-text-color |
The color of text and icons shown on the accent color | <color> |
black |
--media-border-radius |
The border radius of the media player | A valid border-radius value | 1rem |
--media-scale-unit |
The base sizing unit for skin spacing and icons | <length> |
1rem |
If you omit --media-accent-text-color, the skins choose a contrasting text color from --media-accent-color using contrast-color(). You only need to set it when you want to override that result.
Set the audio color scheme
The audio skins adapt their main palette for light and dark mode using light-dark(). It uses the inherited color-scheme, so set color-scheme on the player or an ancestor:
:root {
color-scheme: light dark;
}The video skins keep their dark control presentation in both color schemes.
Scale with the document font size
Vanilla CSS and Tailwind skins use --media-scale-unit as the base for control spacing and icon sizes. Vanilla CSS skins also use it for font sizes. It defaults to 16px, so player sizing does not change with the document root font size or the app’s Tailwind spacing scale. Set it to 1rem on the player or an ancestor to make the UI scale with the document root font size:
.player {
--media-scale-unit: 1rem;
}You can also add your own class names to the skins.
Where packaged customization stops
The four properties above are the public styling controls for packaged skins. Don’t depend on the elements, classnames, or other custom properties inside a packaged skin. They may change between releases.
Packaged video skins also let you replace the poster through the poster slot.
Packaged video skins also let you replace the poster through the renderPoster prop.
See Poster.
For anything deeper, eject instead of reaching into the packaged skin. There are no packaged-skin options for adding, removing, or rearranging controls, or replacing its built-in feedback and interactions. Seek buttons are a common example: the audio skins include 10-second skip-back and skip-forward buttons, but the video skins ship without them. To add rewind and fast-forward controls to a video skin, eject it and place a SeekButton in the control bar.
Eject a skin
Eject as soon as the packaged skin no longer matches the player you need. Once ejected, removing a control is removing a component, and changing an overlay or interaction is editing code you own.
An ejected skin is app code, so its markup, class names, and styles are yours to change. If none of the packaged skins is a useful starting point, build a custom UI from the player, container, and individual UI components instead.
Soon, we’ll have a CLI that ejects skins in your preferred framework and style. For now, we invite you to try these copy-paste-ready implementations.
To eject a skin:
- Choose the closest implementation below.
- Copy every file shown for your framework into your project.
- Replace the packaged skin with the copied component or player markup, then edit the files you own.
Default video skin
'use client';
import { type SVGProps, type ComponentProps, type ReactElement, type ReactNode, type CSSProperties } from 'react';
import { SpinnerIcon as SpinnerIconPrimitive, ChevronIcon as ChevronIconPrimitive, CaptionsOnIcon as CaptionsOnIconPrimitive, CaptionsOffIcon as CaptionsOffIconPrimitive, FullscreenEnterIcon as FullscreenEnterIconPrimitive, FullscreenExitIcon as FullscreenExitIconPrimitive, PipEnterIcon as PipEnterIconPrimitive, PipExitIcon as PipExitIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeOffIcon as VolumeOffIconPrimitive, AirPlayEnterIcon as AirPlayEnterIconPrimitive, AirPlayExitIcon as AirPlayExitIconPrimitive, CastEnterIcon as CastEnterIconPrimitive, CastExitIcon as CastExitIconPrimitive, RestartIcon as RestartIconPrimitive, CheckIcon as CheckIconPrimitive, GearIcon as GearIconPrimitive } from '@videojs/react/icons';
import { SpinnerIcon as SpinnerIconPrimitive2, ChevronIcon as ChevronIconPrimitive2, CaptionsOnIcon as CaptionsOnIconPrimitive2, CaptionsOffIcon as CaptionsOffIconPrimitive2, FullscreenEnterIcon as FullscreenEnterIconPrimitive2, FullscreenExitIcon as FullscreenExitIconPrimitive2, PipEnterIcon as PipEnterIconPrimitive2, PipExitIcon as PipExitIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeOffIcon as VolumeOffIconPrimitive2, AirPlayEnterIcon as AirPlayEnterIconPrimitive2, AirPlayExitIcon as AirPlayExitIconPrimitive2, CastEnterIcon as CastEnterIconPrimitive2, CastExitIcon as CastExitIconPrimitive2, RestartIcon as RestartIconPrimitive2, CheckIcon as CheckIconPrimitive2, GearIcon as GearIconPrimitive2 } from '@videojs/react/icons/minimal';
import { BufferingIndicator as BufferingIndicatorPrimitive, ErrorDialog as ErrorDialogPrimitive, Container as ContainerPrimitive, Poster as PosterPrimitive, Gesture, Hotkey, SeekIndicator as SeekIndicatorPrimitive, StatusAnnouncer as StatusAnnouncerPrimitive, StatusIndicator as StatusIndicatorPrimitive, VolumeIndicator as VolumeIndicatorPrimitive, Tooltip, AirPlayButton as AirPlayButtonPrimitive, CaptionsButton as CaptionsButtonPrimitive, CastButton as CastButtonPrimitive, FullscreenButton as FullscreenButtonPrimitive, PiPButton as PiPButtonPrimitive, PlayButton as PlayButtonPrimitive, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, TimeSlider as TimeSliderPrimitive, Slider, Menu, Text as TextPrimitive, Controls, Time } from '@videojs/react';
import { Video } from '@videojs/react/video';
import './player.css';
import { Player } from './player';
import { type VolumeSliderProps as CoreVolumeSliderProps, type SliderPreviewOverflow } from '@videojs/core';
import { audioText, captionsText, speedText, qualityText, settingsText } from '@videojs/core/i18n/text/menu';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface PosterProps extends Omit<PosterPrimitive.Props, 'children' | 'render'> {
children?: PosterPrimitive.Props['render'];
}
function Poster({ children, className, src, ...props }: PosterProps = {}) {
return (
<PosterPrimitive
render={children}
className={(state) => `media-poster ${resolveClassName(className, state)}`}
src={src}
{...props}
/>
);
}
interface DefaultVideoSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
poster?: string | undefined;
poster?: string | NonNullable<ComponentProps<typeof Poster>>['children'];
}
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type ErrorDialogProps = Omit<ErrorDialogPrimitive.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
interface TimeSliderProps extends Omit<TimeSliderPrimitive.RootProps, 'children'> {
previewOverflow?: SliderPreviewOverflow | undefined;
}
function TimeSlider({ className, previewOverflow = 'visible', ...props }: TimeSliderProps = {}) {
return (
<TimeSliderPrimitive.Root
className={(state) => `media-slider media-time-slider ${resolveClassName(className, state)}`}
{...props}
>
<TimeSliderPrimitive.Chapters
className={'media-time-slider-chapters'}
renderChapter={(props) => (
<div className={'media-time-slider-chapter'} {...props}>
<TimeSliderPrimitive.Track render={<SliderTrack />} className={'media-time-slider-chapter-track'}>
<TimeSliderPrimitive.Buffer render={<SliderBuffer />} />
<TimeSliderPrimitive.Fill render={<SliderFill />} />
</TimeSliderPrimitive.Track>
</div>
)}
></TimeSliderPrimitive.Chapters>
<TimeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-time-slider-thumb'} />
<TimeSliderPrimitive.Preview className={'media-slider-preview'} overflow={previewOverflow}>
<div className={'media-slider-thumbnail'}>
<Slider.Thumbnail className={'media-slider-thumbnail-image'} />
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-slider-thumbnail-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-slider-thumbnail-spinner-icon'} />
</span>
</>
</div>
<div className={'media-time-slider-preview-content'}>
<TimeSliderPrimitive.ChapterTitle className={'media-time-slider-chapter-title'} />
<TimeSliderPrimitive.Value className={'media-time-slider-value'} type="pointer" />
</div>
</TimeSliderPrimitive.Preview>
</TimeSliderPrimitive.Root>
);
}
type CaptionsButtonProps = Omit<CaptionsButtonPrimitive.Props, 'children'>;
function CaptionsButton({ className, ...props }: CaptionsButtonProps = {}) {
return (
<ButtonTooltip side="top">
<CaptionsButtonPrimitive
render={<Button />}
className={(state) => `media-captions-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-button-icon media-captions-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-button-icon media-captions-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-button-icon media-captions-button-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-button-icon media-captions-button-on-icon'} />
</span>
</>
</CaptionsButtonPrimitive>
</ButtonTooltip>
);
}
interface SettingsMenuProps extends Menu.RootProps {
className?: string | undefined;
}
function SettingsMenu({ children, className, ...props }: SettingsMenuProps) {
return (
<Menu.Root side="top" align="center" {...props}>
<ButtonTooltip label={<TextPrimitive token={settingsText.key}>{settingsText.text}</TextPrimitive>} side="top">
<Menu.Trigger render={<Button />} className={'media-settings-menu-trigger'}>
<>
<span className="contents theme-minimal:hidden">
<GearIconPrimitive className={'media-button-icon media-settings-menu-trigger-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<GearIconPrimitive2 className={'media-button-icon media-settings-menu-trigger-icon'} />
</span>
</>
<TextPrimitive className={'media-settings-menu-trigger-label'} token={settingsText.key}>
{settingsText.text}
</TextPrimitive>
</Menu.Trigger>
</ButtonTooltip>
<Menu.Popup keepMounted className={(state) => `media-menu-popup ${resolveClassName(className, state)}`}>
<Menu.Content className={'media-menu-content'}>{children}</Menu.Content>
</Menu.Popup>
</Menu.Root>
);
}
type VideoSettingsMenuProps = Omit<NonNullable<ComponentProps<typeof SettingsMenu>>, 'children'>;
interface QualityMenuProps extends MenuProps {
className?: ClassValue;
}
interface MenuChevronProps {
back?: boolean;
className?: ClassValue;
}
function MenuChevron({ back = false, className }: MenuChevronProps = {}) {
return (
<>
<span className="contents theme-minimal:hidden">
<ChevronIconPrimitive
className={`${back ? 'media-menu-back-chevron' : 'media-menu-forward-chevron'} ${className ?? ''}`}
/>
</span>
<span className="hidden theme-minimal:contents">
<ChevronIconPrimitive2
className={`${back ? 'media-menu-back-chevron' : 'media-menu-forward-chevron'} ${className ?? ''}`}
/>
</span>
</>
);
}
type RadioItemProps = Menu.RadioItemProps;
function RadioItem({ children, className, ...props }: RadioItemProps) {
return (
<Menu.RadioItem className={(state) => `media-menu-radio-item ${resolveClassName(className, state)}`} {...props}>
{children}
<Menu.ItemIndicator forceMount className={'media-menu-item-indicator'}>
<>
<span className="contents theme-minimal:hidden">
<CheckIconPrimitive className={'media-menu-radio-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CheckIconPrimitive2 className={'media-menu-radio-item-icon'} />
</span>
</>
</Menu.ItemIndicator>
</Menu.RadioItem>
);
}
function QualityMenu({ className, ...props }: QualityMenuProps = {}) {
return (
<Menu.Root {...props}>
<QualityRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<SwitchesIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SwitchesIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={qualityText.key}>{qualityText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<QualityRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={qualityText.key}>{qualityText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<QualityRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>
<span>{item.label}</span>
{item.tier ? <sup className={'media-menu-tier'}>{item.tier}</sup> : null}
</span>
{item.badge ? <span className={'media-menu-badge'}>{item.badge}</span> : null}
</RadioItem>
)}
></QualityRadioGroup.Options>
</Menu.Content>
</QualityRadioGroup.Root>
</Menu.Root>
);
}
interface AudioTrackMenuProps extends MenuProps {
className?: ClassValue;
}
function AudioTrackMenu({ className, ...props }: AudioTrackMenuProps = {}) {
return (
<Menu.Root {...props}>
<AudioTrackRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<SpeechIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpeechIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={audioText.key}>{audioText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<AudioTrackRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={audioText.key}>{audioText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<AudioTrackRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></AudioTrackRadioGroup.Options>
</Menu.Content>
</AudioTrackRadioGroup.Root>
</Menu.Root>
);
}
interface PlaybackRateSubmenuProps extends MenuProps {
className?: ClassValue;
}
function PlaybackRateSubmenu({ className, ...props }: PlaybackRateSubmenuProps = {}) {
return (
<Menu.Root {...props}>
<PlaybackRateRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<SpeedIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpeedIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={speedText.key}>{speedText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<PlaybackRateRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={speedText.key}>{speedText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<PlaybackRateRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></PlaybackRateRadioGroup.Options>
</Menu.Content>
</PlaybackRateRadioGroup.Root>
</Menu.Root>
);
}
interface CaptionsSubmenuProps extends MenuProps {
className?: ClassValue;
}
function CaptionsSubmenu({ className, ...props }: CaptionsSubmenuProps = {}) {
return (
<Menu.Root {...props}>
<CaptionsRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={captionsText.key}>{captionsText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<CaptionsRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={captionsText.key}>{captionsText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<CaptionsRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></CaptionsRadioGroup.Options>
</Menu.Content>
</CaptionsRadioGroup.Root>
</Menu.Root>
);
}
function VideoSettingsMenu(props: VideoSettingsMenuProps = {}) {
return (
<SettingsMenu {...props}>
<QualityMenu />
<AudioTrackMenu />
<PlaybackRateSubmenu />
<CaptionsSubmenu />
</SettingsMenu>
);
}
type CastButtonProps = Omit<CastButtonPrimitive.Props, 'children'>;
function CastButton({ className, ...props }: CastButtonProps = {}) {
return (
<ButtonTooltip side="top">
<CastButtonPrimitive
render={<Button />}
className={(state) => `media-cast-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<CastEnterIconPrimitive className={'media-button-icon media-cast-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastEnterIconPrimitive2 className={'media-button-icon media-cast-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CastExitIconPrimitive className={'media-button-icon media-cast-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastExitIconPrimitive2 className={'media-button-icon media-cast-button-exit-icon'} />
</span>
</>
</CastButtonPrimitive>
</ButtonTooltip>
);
}
type AirPlayButtonProps = Omit<AirPlayButtonPrimitive.Props, 'children'>;
function AirPlayButton({ className, ...props }: AirPlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<AirPlayButtonPrimitive
render={<Button />}
className={(state) => `media-airplay-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<AirPlayEnterIconPrimitive className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayEnterIconPrimitive2 className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<AirPlayExitIconPrimitive className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayExitIconPrimitive2 className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
</>
</AirPlayButtonPrimitive>
</ButtonTooltip>
);
}
type PiPButtonProps = Omit<PiPButtonPrimitive.Props, 'children'>;
function PiPButton({ className, ...props }: PiPButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PiPButtonPrimitive
render={<Button />}
className={(state) => `media-pip-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-button-icon media-pip-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-button-icon media-pip-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-button-icon media-pip-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-button-icon media-pip-button-exit-icon'} />
</span>
</>
</PiPButtonPrimitive>
</ButtonTooltip>
);
}
type FullscreenButtonProps = Omit<FullscreenButtonPrimitive.Props, 'children'>;
function FullscreenButton({ className, ...props }: FullscreenButtonProps = {}) {
return (
<ButtonTooltip side="top">
<FullscreenButtonPrimitive
render={<Button />}
className={(state) => `media-fullscreen-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
</>
</FullscreenButtonPrimitive>
</ButtonTooltip>
);
}
function DefaultVideoControls() {
return (
<Controls.Root>
<Controls.Backdrop className={'media-controls__backdrop'} />
<Controls.Content className={'media-controls media-controls'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-primary'}>
<PlayButton />
<VolumePopover className={'media-controls-volume-button'} />
<Controls.Group className={'media-time-slider-group'}>
<Time.Value className={'media-time-current-value'} type="current" />
<TimeSlider />
<Time.Value className={'media-time-remaining-value'} type="remaining" toggle />
</Controls.Group>
<CaptionsButton className={'media-controls-captions-button'} />
<VideoSettingsMenu className={'media-controls-settings-button'} />
</Controls.Group>
<Controls.Group className={'media-controls-secondary'}>
<CastButton />
<AirPlayButton />
<PiPButton />
<FullscreenButton />
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface VideoHotkeysProps {
disabled?: boolean | undefined;
}
interface PlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function PlaybackHotkeys({ disabled = false }: PlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowRight" action="seekStep" value={5} />
<Hotkey disabled={disabled} keys="ArrowLeft" action="seekStep" value={-5} />
<Hotkey disabled={disabled} keys="l" action="seekStep" value={10} />
<Hotkey disabled={disabled} keys="j" action="seekStep" value={-10} />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
<Hotkey disabled={disabled} keys="0-9" action="seekToPercent" />
<Hotkey disabled={disabled} keys="Home" action="seekToPercent" value={0} />
<Hotkey disabled={disabled} keys="End" action="seekToPercent" value={100} />
<Hotkey disabled={disabled} keys=">" action="speedUp" />
<Hotkey disabled={disabled} keys="<" action="speedDown" />
</>
);
}
function VideoHotkeys({ disabled = false }: VideoHotkeysProps = {}) {
return (
<>
<PlaybackHotkeys disabled={disabled} />
<Hotkey disabled={disabled} keys="f" action="toggleFullscreen" />
<Hotkey disabled={disabled} keys="c" action="toggleSubtitles" />
<Hotkey disabled={disabled} keys="i" action="togglePictureInPicture" />
</>
);
}
interface VideoGesturesProps {
disabled?: boolean | undefined;
}
function VideoGestures({ disabled = false }: VideoGesturesProps = {}) {
return (
<>
<Gesture disabled={disabled} type="tap" action="togglePaused" pointer="mouse" region="center" />
<Gesture disabled={disabled} type="tap" action="toggleControls" pointer="touch" />
<Gesture disabled={disabled} type="doubletap" action="seekStep" value={-10} region="left" />
<Gesture disabled={disabled} type="doubletap" action="toggleFullscreen" region="center" />
<Gesture disabled={disabled} type="doubletap" action="seekStep" value={10} region="right" />
</>
);
}
type VideoStatusIndicatorsProps = Omit<ComponentProps<'div'>, 'children'>;
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
type VolumeIndicatorProps = Omit<VolumeIndicatorPrimitive.RootProps, 'children'>;
function VolumeIndicator({ className, ...props }: VolumeIndicatorProps = {}) {
return (
<VolumeIndicatorPrimitive.Root
className={(state) => `media-volume-indicator ${resolveClassName(className, state)}`}
{...props}
>
<VolumeIndicatorPrimitive.Fill className={'media-volume-indicator-fill'}>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-volume-indicator-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-volume-indicator-high-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-volume-indicator-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-volume-indicator-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-volume-indicator-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-volume-indicator-off-icon'} />
</span>
</>
<VolumeIndicatorPrimitive.Value className={'media-volume-indicator-value'} />
</VolumeIndicatorPrimitive.Fill>
</VolumeIndicatorPrimitive.Root>
);
}
type StatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const TOP_STATUS_ACTIONS = ['toggleSubtitles', 'toggleFullscreen', 'togglePictureInPicture'] as const;
function StatusIndicator({ className, ...props }: StatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={TOP_STATUS_ACTIONS}
className={(state) => `media-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-status-indicator-content'}>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-status-indicator-captions-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-status-indicator-captions-on-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-status-indicator-captions-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-status-indicator-captions-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-status-indicator-pip-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-status-indicator-pip-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-status-indicator-pip-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-status-indicator-pip-exit-icon'} />
</span>
</>
<StatusIndicatorPrimitive.Value className={'media-status-indicator-value'} />
</div>
</StatusIndicatorPrimitive.Root>
);
}
type SeekIndicatorProps = Omit<SeekIndicatorPrimitive.RootProps, 'children'>;
function SeekIndicator({ className, ...props }: SeekIndicatorProps = {}) {
return (
<SeekIndicatorPrimitive.Root
className={(state) => `media-seek-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<ChevronIconPrimitive className={'media-seek-indicator-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<ChevronIconPrimitive2 className={'media-seek-indicator-icon'} />
</span>
</>
<SeekIndicatorPrimitive.Value className={'media-seek-indicator-value'} />
</SeekIndicatorPrimitive.Root>
);
}
type PlaybackStatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const PLAYBACK_STATUS_ACTIONS = ['togglePaused'] as const;
function PlaybackStatusIndicator({ className, ...props }: PlaybackStatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={PLAYBACK_STATUS_ACTIONS}
className={(state) => `media-playback-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-playback-status-indicator-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-playback-status-indicator-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-playback-status-indicator-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-playback-status-indicator-pause-icon'} />
</span>
</>
</StatusIndicatorPrimitive.Root>
);
}
function VideoStatusIndicators({ className, ...props }: VideoStatusIndicatorsProps = {}) {
return (
<>
<StatusAnnouncer />
<div className={`media-video-status-indicators ${className ?? ''}`} {...props}>
<VolumeIndicator />
<StatusIndicator />
<SeekIndicator />
<PlaybackStatusIndicator />
</div>
</>
);
}
function DefaultVideoSkin({ children, className, poster, ...props }: DefaultVideoSkinProps = {}) {
const isPosterString = typeof poster === 'string';
return (
<Container className={`media-skin media-skin--video ${className ?? ''}`} {...props}>
{children}
<Poster src={isPosterString ? poster : undefined}>{isPosterString ? undefined : poster}</Poster>
<BufferingIndicator />
<ErrorDialog />
<DefaultVideoControls />
<VideoHotkeys />
<VideoGestures />
<VideoStatusIndicators />
</Container>
);
}
const Skin = DefaultVideoSkin;
// ================================================================
// Player
// ================================================================
export interface VideoPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
renderPoster?: Poster.Props['render'];
}
export function VideoSkin({ renderPoster, ...props }: VideoSkinProps) {
return <Skin poster={renderPoster} {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
type SliderBufferProps = ComponentProps<'div'>;
function SliderBuffer({ className, ...props }: SliderBufferProps) {
return <div className={`media-slider-buffer ${className ?? ''}`} {...props} />;
}
// ================================================================
// Error Dialog
// ================================================================
function ErrorDialog({ className, ...props }: ErrorDialogProps = {}) {
return (
<ErrorDialogPrimitive.Root>
<ErrorDialogPrimitive.Backdrop className={'media-dialog-backdrop'} />
<ErrorDialogPrimitive.Popup
className={(state) => `media-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-dialog-content'}>
<ErrorDialogPrimitive.Title className={'media-dialog-title'} />
<ErrorDialogPrimitive.Description className={'media-dialog-description'} />
</div>
<div className={'media-dialog-actions'}>
<ErrorDialogPrimitive.Close render={<Button />} className={'media-dialog-close'} />
</div>
</ErrorDialogPrimitive.Popup>
</ErrorDialogPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { videoFeatures } from '@videojs/react/video';
export const { Player } = createPlayer({ features: videoFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-menu-back-item {
margin-bottom: calc(var(--media-spacing) * .5);
cursor: pointer;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
width: 100%;
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-back-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-back-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-back-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@supports (top: anchor(top)) {
.media-menu-back-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-back-item:hover {
transition-duration: .2s;
}
}
.media-menu-back-item[data-highlighted] {
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-back-item {
transition-duration: 50ms;
}
}
.media-menu-badge {
border-radius: var(--media-control-radius);
background-color: var(--media-accent);
padding-inline: calc(var(--media-spacing) * 1.5);
font-size: .7em;
font-weight: 600;
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-hint {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 1);
color: currentColor;
margin-inline-start: auto;
padding-inline-start: calc(var(--media-spacing) * 2);
display: inline-flex;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-hint {
color: color-mix(in oklab, currentcolor 65.0%, transparent);
}
}
.media-menu-hint-label {
max-width: calc(var(--media-spacing) * 24);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-separator {
margin-block: calc(var(--media-spacing) * 1);
border-bottom-style: solid;
border-bottom-width: 1px;
border-color: var(--media-border);
display: block;
}
@media (prefers-contrast: more) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
@media (forced-colors: active) {
.media-menu-separator {
border-color: canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
.media-menu-tier {
color: currentColor;
padding-inline-start: calc(var(--media-spacing) * .5);
padding-top: 1px;
font-size: .7em;
font-weight: 600;
line-height: 1;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-tier {
color: color-mix(in oklab, currentcolor 70.0%, transparent);
}
}
.media-menu-trigger-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-trigger-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-trigger-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-trigger-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-trigger-item[data-availability="unavailable"], .media-menu-trigger-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
transition-duration: .2s;
}
}
.media-menu-trigger-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
}
.media-menu-trigger-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--video) {
.media-controls {
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: .75rem;
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: contents;
}
@container media-root (width >= 32rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
align-items: center;
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
.media-controls:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 3);
bottom: calc(var(--media-spacing) * 3);
}
}
@container media-root (width >= 32rem) {
@media (forced-colors: active) {
.media-controls {
color: canvastext;
background-color: canvas;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
background-image: linear-gradient(to top, oklab(0% none none / .5) 0%, oklab(0% none none / .3) 25%, #0000 100%);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
@container media-root (width < 32rem) {
.media-controls-captions-button {
display: none;
}
}
.media-controls-primary {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
transform-origin: bottom;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
align-items: center;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls-primary:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width < 32rem) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
}
}
@container media-root (width >= 32rem) {
.media-controls-primary {
backdrop-filter: none;
background-color: #0000;
border-radius: 0;
display: contents;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000;
}
.media-controls-primary:after {
content: "";
display: none;
}
}
@media (forced-colors: active) {
.media-controls-primary {
color: canvastext;
background-color: canvas;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@container media-root (width < 32rem) {
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
filter: blur(8px);
}
}
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-secondary {
top: calc(var(--media-spacing) * 2);
right: calc(var(--media-spacing) * 2);
z-index: 10;
transform-origin: top;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
align-items: center;
gap: 1px;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls-secondary:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-secondary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-secondary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width < 32rem) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-secondary {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-secondary {
translate: 0 calc(var(--media-spacing) * -1);
scale: .95;
}
}
}
}
@container media-root (width >= 32rem) {
.media-controls-secondary {
padding: calc(var(--media-spacing) * 0);
backdrop-filter: none;
background-color: #0000;
border-radius: 0;
display: flex;
position: static;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000;
}
.media-controls-secondary:after {
content: "";
display: none;
}
}
@media (forced-colors: active) {
.media-controls-secondary {
color: canvastext;
background-color: canvas;
}
.media-controls-secondary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@container media-root (width < 32rem) {
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-secondary {
filter: blur(8px);
}
}
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-secondary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-secondary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width >= 32rem) {
.media-controls-settings-button {
margin-inline-start: 1px;
}
}
.media-controls-volume-button {
margin-inline-start: 1px;
}
.media-time-current-value {
font-variant-numeric: tabular-nums;
}
.media-time-remaining-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-time-remaining-value:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
@container media-time (width < 16rem) {
.media-time-remaining-value {
display: none;
}
}
.media-time-slider-group {
align-items: center;
gap: calc(var(--media-spacing) * 2.5);
padding-inline: calc(var(--media-spacing) * 2);
flex: 1;
display: flex;
container: media-time / inline-size;
}
@container media-root (width >= 32rem) {
.media-time-slider-group {
padding-inline: calc(var(--media-spacing) * 3);
}
}
}
@scope (.media-skin--video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-thumbnail {
pointer-events: none;
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
overflow: hidden;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-slider-thumbnail, :where(.media-slider-preview)[data-pointing] .media-slider-thumbnail {
opacity: 1;
filter: none;
scale: 1;
}
.media-slider-thumbnail:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-slider-thumbnail:has([data-loading]) {
aspect-ratio: 16 / 9;
width: var(--media-slider-preview-max-width);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumbnail {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-slider-thumbnail {
color: canvastext;
background-color: canvas;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-slider-thumbnail:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 9));
background-color: oklab(0% none none / .9);
border-radius: .75rem;
left: 50%;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 14));
left: var(--media-preview-left, var(--media-slider-pointer));
background-color: oklab(0% none none / .9);
border-radius: .5rem;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
@media (prefers-reduced-transparency: reduce) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-slider-thumbnail-image {
max-height: var(--media-slider-preview-max-height);
max-width: var(--media-slider-preview-max-width);
border-radius: inherit;
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
}
.media-slider-thumbnail-image[data-loading] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-image {
transition-duration: 50ms;
}
}
.media-slider-thumbnail-spinner-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
opacity: 0;
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
@scope (.media-slider-thumbnail) {
&:not(:has([role="img"][data-loading])) .media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
@scope (.media-slider-thumbnail) {
&:has([role="img"][data-loading]) .media-slider-thumbnail-spinner-icon {
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
.media-time-slider-chapter {
inset: calc(var(--media-spacing) * 0);
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
--media-chapter-inset-end: .5;
--media-chapter-inset-start: .5;
justify-content: center;
align-items: center;
display: flex;
position: absolute;
}
.media-time-slider-chapter:first-child {
--media-chapter-inset-start: 0;
}
.media-time-slider-chapter:last-child {
--media-chapter-inset-end: 0;
}
.media-time-slider-chapter[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
}
.media-time-slider-chapter[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
}
.media-time-slider-chapter-title {
max-width: var(--media-slider-preview-max-width);
min-width: calc(var(--media-spacing) * 0);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-time-slider-chapter-title:empty {
display: none;
}
.media-time-slider-chapter-title:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 6);
}
.media-time-slider-chapter-track[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1.75);
}
}
.media-time-slider-chapter-track[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) 0 round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="vertical"] {
width: calc(var(--media-spacing) * 1.75);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-chapter-track {
transition-property: height, width;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-chapters {
width: 100%;
height: 100%;
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
border-radius: inherit;
flex: 1;
align-items: center;
display: flex;
position: relative;
}
.media-time-slider-preview-content {
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
font-variant-numeric: tabular-nums;
opacity: 0;
filter: blur(8px);
display: flex;
position: absolute;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-preview-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 12.5));
flex-direction: column;
align-items: center;
left: 50%;
}
.media-time-slider-preview-content:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 7));
left: var(--media-preview-left, var(--media-slider-pointer));
justify-content: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 3);
flex-direction: row-reverse;
}
.media-time-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 0;
}
.media-time-slider-thumb:focus-visible, .media-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
scale: .8;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
scale: .7;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *)[data-interactive] {
scale: 1;
}
.media-time-slider-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-seek-indicator {
place-content: center;
gap: calc(var(--media-spacing) * 1);
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
display: grid;
}
.media-seek-indicator[data-direction="backward"] {
grid-column-start: 1;
justify-self: flex-start;
}
.media-seek-indicator[data-direction="forward"] {
grid-column-start: 3;
justify-self: flex-end;
}
@container media-root (width >= 42rem) {
.media-seek-indicator {
padding: calc(var(--media-spacing) * 6);
}
}
.media-seek-indicator-icon {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
display: none;
}
@scope (.media-seek-indicator) {
&[data-direction] .media-seek-indicator-icon {
display: block;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"] .media-seek-indicator-icon {
scale: -1 1;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-seek-indicator-icon {
transition-property: translate, opacity;
transition-duration: .2s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-seek-indicator) {
&[data-ending-style] .media-seek-indicator-icon, &[data-starting-style] .media-seek-indicator-icon {
opacity: 0;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"][data-starting-style] .media-seek-indicator-icon {
translate: 60%;
}
}
@scope (.media-seek-indicator) {
&[data-direction="forward"][data-starting-style] .media-seek-indicator-icon {
translate: -60%;
}
}
}
.media-seek-indicator-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]) {
visibility: hidden;
}
}
@scope (.media-skin--video) {
.media-menu-back-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
rotate: 180deg;
}
@media (hover: hover) {
@scope (.media-menu-back-item) {
&:hover .media-menu-back-chevron {
color: inherit;
}
}
}
@scope (.media-menu-back-item) {
&[data-highlighted] .media-menu-back-chevron {
color: inherit;
}
}
.media-menu-back-chevron:dir(rtl) {
rotate: 0deg;
scale: 1;
}
.media-menu-forward-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-forward-chevron {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-forward-chevron {
color: inherit;
}
}
.media-menu-forward-chevron:dir(rtl) {
scale: -1 1;
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--video) {
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
@supports (top: anchor(top)) {
}
@supports (color: color-mix(in lab, red, red)) {
}
@supports (top: anchor(top)) {
}
@media (prefers-contrast: more) {
}
@media (forced-colors: active) {
}
@media (prefers-reduced-transparency: reduce) {
}
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-skin--video) {
@supports (top: anchor(top)) {
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-settings-menu-trigger-icon {
transition-property: transform, translate, scale, rotate;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-settings-menu-trigger) {
&[aria-expanded="true"] .media-settings-menu-trigger-icon {
rotate: 90deg;
}
}
@media (prefers-reduced-motion: reduce) {
.media-settings-menu-trigger-icon {
transition-property: none !important;
transition-duration: 0s !important;
}
}
.media-settings-menu-trigger-label {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/video.js"></script>
<link rel="stylesheet" href="./player.css">
<video-player poster="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/thumbnail.webp">
<media-container class="media-container media-skin media-skin--video">
<slot>
</slot>
<media-poster class="media-poster">
<img alt="" decoding="async" />
</media-poster>
<media-buffering-indicator class="media-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-error-dialog class="media-dialog-root">
<media-dialog-backdrop class="media-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-dialog-popup">
<div class="media-dialog-content">
<media-dialog-title class="media-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-dialog-description">
</media-dialog-description>
</div>
<div class="media-dialog-actions">
<media-dialog-close class="media-button media-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls>
<media-controls-backdrop class="media-controls__backdrop">
</media-controls-backdrop>
<media-controls-content class="media-controls media-controls">
<media-tooltip-group>
<media-controls-group class="media-controls-primary">
<media-play-button class="media-button media-play-button" id="vjs-f7OK7BC5-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-mute-button class="media-button media-mute-button media-controls-volume-button" commandfor="vjs-eEbK5-VC-q1-popup" id="vjs-f7OK7BC5-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-2-trigger" delay="0" disabled sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="top" class="media-volume-popover" id="vjs-eEbK5-VC-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="vertical">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
<media-controls-group class="media-time-slider-group">
<media-time class="media-time-current-value" type="current">
</media-time>
<media-time-slider class="media-slider media-time-slider">
<media-time-slider-chapters class="media-time-slider-chapters">
<template>
<div class="media-time-slider-chapter">
<media-slider-track class="media-slider-track media-time-slider-chapter-track">
<media-slider-buffer class="media-slider-buffer">
</media-slider-buffer>
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
</div>
</template>
</media-time-slider-chapters>
<media-slider-thumb class="media-slider-thumb media-time-slider-thumb">
</media-slider-thumb>
<media-slider-preview class="media-slider-preview" overflow="visible">
<div class="media-slider-thumbnail">
<media-slider-thumbnail class="media-slider-thumbnail-image">
</media-slider-thumbnail>
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-slider-thumbnail-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-slider-thumbnail-spinner-icon">
</media-icon>
</span>
</div>
<div class="media-time-slider-preview-content">
<media-time-slider-chapter-title class="media-time-slider-chapter-title">
</media-time-slider-chapter-title>
<media-slider-value class="media-time-slider-value" type="pointer">
</media-slider-value>
</div>
</media-slider-preview>
</media-time-slider>
<media-time class="media-time-remaining-value" type="remaining" toggle>
</media-time>
</media-controls-group>
<media-captions-button class="media-button media-captions-button media-controls-captions-button" id="vjs-f7OK7BC5-ev-3-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
</media-captions-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-3-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<button commandfor="vjs--E09Qb0r-t2-popup" class="media-button media-settings-menu-trigger" id="vjs-f7OK7BC5-ev-4-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="gear" class="media-button-icon media-settings-menu-trigger-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="gear" class="media-button-icon media-settings-menu-trigger-icon">
</media-icon>
</span>
<media-text class="media-settings-menu-trigger-label" token="menu.settings">Settings</media-text>
</button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-4-trigger" side="top" class="media-tooltip">
<media-text token="menu.settings">Settings</media-text>
</media-tooltip>
<media-menu side="top" align="center" class="media-menu-popup media-controls-settings-button" id="vjs--E09Qb0r-t2-popup">
<media-menu-content class="media-menu-content">
<media-menu-item commandfor="vjs-bOPjz1Ka-qh-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="switches" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="switches" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.quality">Quality</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-bOPjz1Ka-qh-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.quality">Quality</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-quality-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span>
<span data-part="label">
</span>
<sup data-part="tier" class="media-menu-tier">
</sup>
</span>
<span data-part="badge" class="media-menu-badge">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-quality-radio-group>
</media-menu-content>
<media-menu-item commandfor="vjs-DPaa0Ln5-q8-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="speech" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="speech" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.audio">Audio</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-DPaa0Ln5-q8-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.audio">Audio</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-audio-track-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-audio-track-radio-group>
</media-menu-content>
<media-menu-item commandfor="vjs-mT1s8PiA-qf-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="speed" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="speed" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.speed">Speed</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-mT1s8PiA-qf-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.speed">Speed</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-playback-rate-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-playback-rate-radio-group>
</media-menu-content>
<media-menu-item commandfor="vjs-YTqj-PjJ-rk-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.captions">Captions</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-YTqj-PjJ-rk-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.captions">Captions</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-captions-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-captions-radio-group>
</media-menu-content>
</media-menu-content>
</media-menu>
</media-controls-group>
<media-controls-group class="media-controls-secondary">
<media-cast-button class="media-button media-cast-button" id="vjs-f7OK7BC5-ev-5-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
</media-cast-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-5-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-airplay-button class="media-button media-airplay-button" id="vjs-f7OK7BC5-ev-6-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
</media-airplay-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-6-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-pip-button class="media-button media-pip-button" id="vjs-f7OK7BC5-ev-7-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
</media-pip-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-7-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-fullscreen-button class="media-button media-fullscreen-button" id="vjs-f7OK7BC5-ev-8-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
</media-fullscreen-button>
<media-tooltip trigger="vjs-f7OK7BC5-ev-8-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowRight" action="seekStep" value="5">
</media-hotkey>
<media-hotkey keys="ArrowLeft" action="seekStep" value="-5">
</media-hotkey>
<media-hotkey keys="l" action="seekStep" value="10">
</media-hotkey>
<media-hotkey keys="j" action="seekStep" value="-10">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-hotkey keys="0-9" action="seekToPercent">
</media-hotkey>
<media-hotkey keys="Home" action="seekToPercent" value="0">
</media-hotkey>
<media-hotkey keys="End" action="seekToPercent" value="100">
</media-hotkey>
<media-hotkey keys=">" action="speedUp">
</media-hotkey>
<media-hotkey keys="<" action="speedDown">
</media-hotkey>
<media-hotkey keys="f" action="toggleFullscreen">
</media-hotkey>
<media-hotkey keys="c" action="toggleSubtitles">
</media-hotkey>
<media-hotkey keys="i" action="togglePictureInPicture">
</media-hotkey>
<media-gesture type="tap" action="togglePaused" pointer="mouse" region="center">
</media-gesture>
<media-gesture type="tap" action="toggleControls" pointer="touch">
</media-gesture>
<media-gesture type="doubletap" action="seekStep" value="-10" region="left">
</media-gesture>
<media-gesture type="doubletap" action="toggleFullscreen" region="center">
</media-gesture>
<media-gesture type="doubletap" action="seekStep" value="10" region="right">
</media-gesture>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
<div class="media-video-status-indicators">
<media-volume-indicator class="media-volume-indicator">
<media-volume-indicator-fill class="media-volume-indicator-fill">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<media-volume-indicator-value class="media-volume-indicator-value">
</media-volume-indicator-value>
</media-volume-indicator-fill>
</media-volume-indicator>
<media-status-indicator actions="toggleSubtitles,toggleFullscreen,togglePictureInPicture" class="media-status-indicator">
<div class="media-status-indicator-content">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<media-status-indicator-value class="media-status-indicator-value">
</media-status-indicator-value>
</div>
</media-status-indicator>
<media-seek-indicator class="media-seek-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-seek-indicator-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-seek-indicator-icon">
</media-icon>
</span>
<media-seek-indicator-value class="media-seek-indicator-value">
</media-seek-indicator-value>
</media-seek-indicator>
<media-status-indicator actions="togglePaused" class="media-playback-status-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
</media-status-indicator>
</div>
</media-container>
</video-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-menu-back-item {
margin-bottom: calc(var(--media-spacing) * .5);
cursor: pointer;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
width: 100%;
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-back-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-back-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-back-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@supports (top: anchor(top)) {
.media-menu-back-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-back-item:hover {
transition-duration: .2s;
}
}
.media-menu-back-item[data-highlighted] {
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-back-item {
transition-duration: 50ms;
}
}
.media-menu-badge {
border-radius: var(--media-control-radius);
background-color: var(--media-accent);
padding-inline: calc(var(--media-spacing) * 1.5);
font-size: .7em;
font-weight: 600;
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-hint {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 1);
color: currentColor;
margin-inline-start: auto;
padding-inline-start: calc(var(--media-spacing) * 2);
display: inline-flex;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-hint {
color: color-mix(in oklab, currentcolor 65.0%, transparent);
}
}
.media-menu-hint-label {
max-width: calc(var(--media-spacing) * 24);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-separator {
margin-block: calc(var(--media-spacing) * 1);
border-bottom-style: solid;
border-bottom-width: 1px;
border-color: var(--media-border);
display: block;
}
@media (prefers-contrast: more) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
@media (forced-colors: active) {
.media-menu-separator {
border-color: canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
.media-menu-tier {
color: currentColor;
padding-inline-start: calc(var(--media-spacing) * .5);
padding-top: 1px;
font-size: .7em;
font-weight: 600;
line-height: 1;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-tier {
color: color-mix(in oklab, currentcolor 70.0%, transparent);
}
}
.media-menu-trigger-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-trigger-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-trigger-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-trigger-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-trigger-item[data-availability="unavailable"], .media-menu-trigger-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
transition-duration: .2s;
}
}
.media-menu-trigger-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
}
.media-menu-trigger-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--video) {
.media-controls {
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: .75rem;
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: contents;
}
@container media-root (width >= 32rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
align-items: center;
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
.media-controls:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 3);
bottom: calc(var(--media-spacing) * 3);
}
}
@container media-root (width >= 32rem) {
@media (forced-colors: active) {
.media-controls {
color: canvastext;
background-color: canvas;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
background-image: linear-gradient(to top, oklab(0% none none / .5) 0%, oklab(0% none none / .3) 25%, #0000 100%);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
@container media-root (width < 32rem) {
.media-controls-captions-button {
display: none;
}
}
.media-controls-primary {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
transform-origin: bottom;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
align-items: center;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls-primary:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width < 32rem) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
}
}
@container media-root (width >= 32rem) {
.media-controls-primary {
backdrop-filter: none;
background-color: #0000;
border-radius: 0;
display: contents;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000;
}
.media-controls-primary:after {
content: "";
display: none;
}
}
@media (forced-colors: active) {
.media-controls-primary {
color: canvastext;
background-color: canvas;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@container media-root (width < 32rem) {
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
filter: blur(8px);
}
}
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-secondary {
top: calc(var(--media-spacing) * 2);
right: calc(var(--media-spacing) * 2);
z-index: 10;
transform-origin: top;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
align-items: center;
gap: 1px;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls-secondary:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-secondary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-secondary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width < 32rem) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-secondary {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-secondary {
translate: 0 calc(var(--media-spacing) * -1);
scale: .95;
}
}
}
}
@container media-root (width >= 32rem) {
.media-controls-secondary {
padding: calc(var(--media-spacing) * 0);
backdrop-filter: none;
background-color: #0000;
border-radius: 0;
display: flex;
position: static;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000;
}
.media-controls-secondary:after {
content: "";
display: none;
}
}
@media (forced-colors: active) {
.media-controls-secondary {
color: canvastext;
background-color: canvas;
}
.media-controls-secondary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@container media-root (width < 32rem) {
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-secondary {
filter: blur(8px);
}
}
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-secondary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-secondary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width >= 32rem) {
.media-controls-settings-button {
margin-inline-start: 1px;
}
}
.media-controls-volume-button {
margin-inline-start: 1px;
}
.media-time-current-value {
font-variant-numeric: tabular-nums;
}
.media-time-remaining-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-time-remaining-value:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
@container media-time (width < 16rem) {
.media-time-remaining-value {
display: none;
}
}
.media-time-slider-group {
align-items: center;
gap: calc(var(--media-spacing) * 2.5);
padding-inline: calc(var(--media-spacing) * 2);
flex: 1;
display: flex;
container: media-time / inline-size;
}
@container media-root (width >= 32rem) {
.media-time-slider-group {
padding-inline: calc(var(--media-spacing) * 3);
}
}
}
@scope (.media-skin--video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-thumbnail {
pointer-events: none;
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
overflow: hidden;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-slider-thumbnail, :where(.media-slider-preview)[data-pointing] .media-slider-thumbnail {
opacity: 1;
filter: none;
scale: 1;
}
.media-slider-thumbnail:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-slider-thumbnail:has([data-loading]) {
aspect-ratio: 16 / 9;
width: var(--media-slider-preview-max-width);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumbnail {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-slider-thumbnail {
color: canvastext;
background-color: canvas;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-slider-thumbnail:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 9));
background-color: oklab(0% none none / .9);
border-radius: .75rem;
left: 50%;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 14));
left: var(--media-preview-left, var(--media-slider-pointer));
background-color: oklab(0% none none / .9);
border-radius: .5rem;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
@media (prefers-reduced-transparency: reduce) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-slider-thumbnail-image {
max-height: var(--media-slider-preview-max-height);
max-width: var(--media-slider-preview-max-width);
border-radius: inherit;
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
}
.media-slider-thumbnail-image[data-loading] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-image {
transition-duration: 50ms;
}
}
.media-slider-thumbnail-spinner-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
opacity: 0;
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
@scope (.media-slider-thumbnail) {
&:not(:has([role="img"][data-loading])) .media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
@scope (.media-slider-thumbnail) {
&:has([role="img"][data-loading]) .media-slider-thumbnail-spinner-icon {
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
.media-time-slider-chapter {
inset: calc(var(--media-spacing) * 0);
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
--media-chapter-inset-end: .5;
--media-chapter-inset-start: .5;
justify-content: center;
align-items: center;
display: flex;
position: absolute;
}
.media-time-slider-chapter:first-child {
--media-chapter-inset-start: 0;
}
.media-time-slider-chapter:last-child {
--media-chapter-inset-end: 0;
}
.media-time-slider-chapter[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
}
.media-time-slider-chapter[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
}
.media-time-slider-chapter-title {
max-width: var(--media-slider-preview-max-width);
min-width: calc(var(--media-spacing) * 0);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-time-slider-chapter-title:empty {
display: none;
}
.media-time-slider-chapter-title:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 6);
}
.media-time-slider-chapter-track[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1.75);
}
}
.media-time-slider-chapter-track[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) 0 round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="vertical"] {
width: calc(var(--media-spacing) * 1.75);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-chapter-track {
transition-property: height, width;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-chapters {
width: 100%;
height: 100%;
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
border-radius: inherit;
flex: 1;
align-items: center;
display: flex;
position: relative;
}
.media-time-slider-preview-content {
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
font-variant-numeric: tabular-nums;
opacity: 0;
filter: blur(8px);
display: flex;
position: absolute;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-preview-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 12.5));
flex-direction: column;
align-items: center;
left: 50%;
}
.media-time-slider-preview-content:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 7));
left: var(--media-preview-left, var(--media-slider-pointer));
justify-content: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 3);
flex-direction: row-reverse;
}
.media-time-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 0;
}
.media-time-slider-thumb:focus-visible, .media-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
scale: .8;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
scale: .7;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *)[data-interactive] {
scale: 1;
}
.media-time-slider-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-seek-indicator {
place-content: center;
gap: calc(var(--media-spacing) * 1);
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
display: grid;
}
.media-seek-indicator[data-direction="backward"] {
grid-column-start: 1;
justify-self: flex-start;
}
.media-seek-indicator[data-direction="forward"] {
grid-column-start: 3;
justify-self: flex-end;
}
@container media-root (width >= 42rem) {
.media-seek-indicator {
padding: calc(var(--media-spacing) * 6);
}
}
.media-seek-indicator-icon {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
display: none;
}
@scope (.media-seek-indicator) {
&[data-direction] .media-seek-indicator-icon {
display: block;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"] .media-seek-indicator-icon {
scale: -1 1;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-seek-indicator-icon {
transition-property: translate, opacity;
transition-duration: .2s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-seek-indicator) {
&[data-ending-style] .media-seek-indicator-icon, &[data-starting-style] .media-seek-indicator-icon {
opacity: 0;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"][data-starting-style] .media-seek-indicator-icon {
translate: 60%;
}
}
@scope (.media-seek-indicator) {
&[data-direction="forward"][data-starting-style] .media-seek-indicator-icon {
translate: -60%;
}
}
}
.media-seek-indicator-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster ::slotted(img) {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster ::slotted(img:not([src]):not([srcset])) {
visibility: hidden;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]), .media-poster > slot > img:not([src]):not([srcset]) {
visibility: hidden;
}
}
@scope (.media-skin--video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--video) {
.media-menu-back-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
rotate: 180deg;
}
@media (hover: hover) {
@scope (.media-menu-back-item) {
&:hover .media-menu-back-chevron {
color: inherit;
}
}
}
@scope (.media-menu-back-item) {
&[data-highlighted] .media-menu-back-chevron {
color: inherit;
}
}
.media-menu-back-chevron:dir(rtl) {
rotate: 0deg;
scale: 1;
}
.media-menu-forward-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-forward-chevron {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-forward-chevron {
color: inherit;
}
}
.media-menu-forward-chevron:dir(rtl) {
scale: -1 1;
}
}
@scope (.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--video) {
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
@supports (top: anchor(top)) {
}
@supports (color: color-mix(in lab, red, red)) {
}
@supports (top: anchor(top)) {
}
@media (prefers-contrast: more) {
}
@media (forced-colors: active) {
}
@media (prefers-reduced-transparency: reduce) {
}
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-skin--video) {
@supports (top: anchor(top)) {
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-settings-menu-trigger-icon {
transition-property: transform, translate, scale, rotate;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-settings-menu-trigger) {
&[aria-expanded="true"] .media-settings-menu-trigger-icon {
rotate: 90deg;
}
}
@media (prefers-reduced-motion: reduce) {
.media-settings-menu-trigger-icon {
transition-property: none !important;
transition-duration: 0s !important;
}
}
.media-settings-menu-trigger-label {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
}
@layer utilities;
Default audio skin
'use client';
import { StatusAnnouncer as StatusAnnouncerPrimitive, Container as ContainerPrimitive, ErrorDialog, Hotkey, Tooltip, SeekButton as SeekButtonPrimitive, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, PlayButton as PlayButtonPrimitive, BufferingIndicator as BufferingIndicatorPrimitive, PlaybackRateButton as PlaybackRateButtonPrimitive, Menu, Text as TextPrimitive, PlaybackRateRadioGroup, TimeSlider, Controls, Time } from '@videojs/react';
import { Audio } from '@videojs/react/audio';
import './player.css';
import { Player } from './player';
import { type ComponentProps, type SVGProps, type ReactElement, type ReactNode, type CSSProperties } from 'react';
import { SeekIcon as SeekIconPrimitive, VolumeOffIcon as VolumeOffIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, RestartIcon as RestartIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, SpinnerIcon as SpinnerIconPrimitive, CheckIcon as CheckIconPrimitive } from '@videojs/react/icons';
import { SeekIcon as SeekIconPrimitive2, VolumeOffIcon as VolumeOffIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, RestartIcon as RestartIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, SpinnerIcon as SpinnerIconPrimitive2, CheckIcon as CheckIconPrimitive2 } from '@videojs/react/icons/minimal';
import { type VolumeSliderProps as CoreVolumeSliderProps, type MenuProps, type SliderPreviewOverflow } from '@videojs/core';
import { speedText } from '@videojs/core/i18n/text/menu';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface DefaultAudioSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
}
type AudioErrorDialogProps = Omit<ErrorDialog.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
function AudioErrorDialog({ className, ...props }: AudioErrorDialogProps = {}) {
return (
<ErrorDialog.Root>
<ErrorDialog.Backdrop className={'media-audio-dialog-backdrop'} />
<ErrorDialog.Popup
className={(state) => `media-audio-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-audio-dialog-content'}>
<ErrorDialog.Title className={'media-audio-dialog-title'} />
<ErrorDialog.Description className={'media-audio-dialog-description'} />
</div>
<div className={'media-audio-dialog-actions'}>
<ErrorDialog.Close render={<Button />} className={'media-audio-dialog-close'} />
</div>
</ErrorDialog.Popup>
</ErrorDialog.Root>
);
}
type AudioPlayButtonProps = Omit<ComponentProps<'div'>, 'children'>;
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
function AudioPlayButton({ className, ...props }: AudioPlayButtonProps = {}) {
return (
<div className={`media-audio-play-button ${className ?? ''}`} {...props}>
<BufferingIndicator className={'media-audio-play-button-buffering-indicator'} />
<PlayButton />
</div>
);
}
type SeekButtonProps = Omit<SeekButtonPrimitive.Props, 'children'>;
function SeekButton({ className, seconds = 10, ...props }: SeekButtonProps = {}) {
return (
<ButtonTooltip side="top">
<SeekButtonPrimitive
render={<Button />}
className={(state) => `media-seek-button ${resolveClassName(className, state)}`}
seconds={seconds}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SeekIconPrimitive className={`media-button-icon ${seconds < 0 && 'media-seek-button-backward-icon'}`} />
</span>
<span className="hidden theme-minimal:contents">
<SeekIconPrimitive2 className={`media-button-icon ${seconds < 0 && 'media-seek-button-backward-icon'}`} />
</span>
</>
<span
className={`media-seek-button-label ${seconds < 0 ? 'media-seek-button-backward-label' : 'media-seek-button-forward-label'}`}
>
{Math.abs(seconds)}
</span>
</SeekButtonPrimitive>
</ButtonTooltip>
);
}
interface AudioTimeSliderProps extends Omit<TimeSlider.RootProps, 'children'> {
previewOverflow?: SliderPreviewOverflow | undefined;
}
function AudioTimeSlider({ className, previewOverflow = 'clamp', ...props }: AudioTimeSliderProps = {}) {
return (
<TimeSlider.Root
className={(state) => `media-slider media-audio-time-slider ${resolveClassName(className, state)}`}
{...props}
>
<TimeSlider.Track render={<SliderTrack />}>
<TimeSlider.Buffer render={<SliderBuffer />} />
<TimeSlider.Fill render={<SliderFill />} />
</TimeSlider.Track>
<TimeSlider.Thumb render={<SliderThumb />} className={'media-audio-time-slider-thumb'} />
<TimeSlider.Preview className={'media-slider-preview'} overflow={previewOverflow}>
<div className={'media-audio-time-slider-preview-content'}>
<TimeSlider.Value className={'media-audio-time-slider-value'} type="pointer" />
</div>
</TimeSlider.Preview>
</TimeSlider.Root>
);
}
interface AudioSettingsMenuProps extends MenuProps {
className?: ClassValue;
}
type PlaybackRateButtonProps = Omit<PlaybackRateButtonPrimitive.Props, 'children'>;
function PlaybackRateButton({ className, ...props }: PlaybackRateButtonProps = {}) {
return (
<PlaybackRateButtonPrimitive
render={<Button />}
className={(state) => `media-playback-rate-button ${resolveClassName(className, state)}`}
{...props}
/>
);
}
type RadioItemProps = Menu.RadioItemProps;
function RadioItem({ children, className, ...props }: RadioItemProps) {
return (
<Menu.RadioItem className={(state) => `media-menu-radio-item ${resolveClassName(className, state)}`} {...props}>
{children}
<Menu.ItemIndicator forceMount className={'media-menu-item-indicator'}>
<>
<span className="contents theme-minimal:hidden">
<CheckIconPrimitive className={'media-menu-radio-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CheckIconPrimitive2 className={'media-menu-radio-item-icon'} />
</span>
</>
</Menu.ItemIndicator>
</Menu.RadioItem>
);
}
function AudioSettingsMenu({ className, ...props }: AudioSettingsMenuProps = {}) {
return (
<Menu.Root side="top" align="center" boundary="viewport" {...props}>
<PlaybackRateRadioGroup.Root>
<ButtonTooltip label={<TextPrimitive token={speedText.key}>{speedText.text}</TextPrimitive>} side="top">
<Menu.Trigger render={<PlaybackRateButton />} />
</ButtonTooltip>
<Menu.Popup
className={(state) =>
`media-menu-popup media-audio-settings-menu-popup ${resolveClassName(className, state)}`
}
>
<Menu.Content className={'media-menu-content'}>
<PlaybackRateRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></PlaybackRateRadioGroup.Options>
</Menu.Content>
</Menu.Popup>
</PlaybackRateRadioGroup.Root>
</Menu.Root>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
function DefaultAudioControls() {
return (
<Controls.Root visibility="always">
<Controls.Content className={'media-controls media-controls-content'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-start'}>
<AudioPlayButton />
<SeekButton className={'media-audio-seek-button'} seconds={-10} />
<SeekButton className={'media-audio-seek-button'} seconds={10} />
</Controls.Group>
<Controls.Group className={'media-time-slider-group'}>
<Time.Value className={'media-time-current-value'} type="current" />
<AudioTimeSlider previewOverflow="visible" />
<Time.Value className={'media-time-remaining-value'} type="remaining" toggle />
</Controls.Group>
<Controls.Group className={'media-controls-end'}>
<AudioSettingsMenu />
<VolumePopover />
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface PlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function PlaybackHotkeys({ disabled = false }: PlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowRight" action="seekStep" value={5} />
<Hotkey disabled={disabled} keys="ArrowLeft" action="seekStep" value={-5} />
<Hotkey disabled={disabled} keys="l" action="seekStep" value={10} />
<Hotkey disabled={disabled} keys="j" action="seekStep" value={-10} />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
<Hotkey disabled={disabled} keys="0-9" action="seekToPercent" />
<Hotkey disabled={disabled} keys="Home" action="seekToPercent" value={0} />
<Hotkey disabled={disabled} keys="End" action="seekToPercent" value={100} />
<Hotkey disabled={disabled} keys=">" action="speedUp" />
<Hotkey disabled={disabled} keys="<" action="speedDown" />
</>
);
}
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
function DefaultAudioSkin({ children, className, ...props }: DefaultAudioSkinProps = {}) {
return (
<Container className={`media-skin media-skin--audio media-audio-skin ${className ?? ''}`} {...props}>
{children}
<AudioErrorDialog />
<DefaultAudioControls />
<PlaybackHotkeys />
<StatusAnnouncer />
</Container>
);
}
const Skin = DefaultAudioSkin;
// ================================================================
// Player
// ================================================================
export interface AudioPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
}
export function AudioSkin(props: AudioSkinProps) {
return <Skin {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderBufferProps = ComponentProps<'div'>;
function SliderBuffer({ className, ...props }: SliderBufferProps) {
return <div className={`media-slider-buffer ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { audioFeatures } from '@videojs/react/audio';
export const { Player } = createPlayer({ features: audioFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--audio) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--audio) {
.media-playback-rate-button {
font-variant-numeric: tabular-nums;
}
.media-playback-rate-button:after {
content: attr(data-rate) "×";
width: 4ch;
}
}
@scope (.media-skin--audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
@scope (.media-skin--audio) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--audio) {
.media-audio-time-slider-preview-content {
bottom: calc(100.0% + calc(var(--media-spacing) * 10));
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
font-size: calc(var(--media-spacing) * 3.25);
font-variant-numeric: tabular-nums;
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
left: 50%;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-audio-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-audio-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
.media-audio-time-slider-preview-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-audio-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-audio-time-slider-preview-content {
color: canvastext;
background-color: canvas;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-audio-time-slider-thumb {
opacity: 0;
}
.media-audio-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-audio-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-audio-time-slider-value {
font-variant-numeric: tabular-nums;
}
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
}
@scope (.media-skin--audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--audio) {
@container media-root (width < 32rem) {
.media-audio-seek-button {
display: none;
}
}
.media-controls-content {
z-index: 20;
border-radius: var(--media-control-radius);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
align-items: center;
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end, .media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
.media-time-current-value {
font-variant-numeric: tabular-nums;
}
.media-time-remaining-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-time-remaining-value:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color);
}
@media (prefers-reduced-motion: reduce) {
.media-time-remaining-value {
transition-duration: 50ms;
}
}
@container media-time-controls (width < 16rem) {
.media-time-remaining-value {
display: none;
}
}
.media-time-slider-group {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2.5);
padding-inline: calc(var(--media-spacing) * 3);
flex: 1;
display: flex;
container: media-time-controls / inline-size;
}
}
@scope (.media-skin--audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 3);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 5);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-seek-button-backward-icon {
scale: -1 1;
}
.media-seek-button-backward-label {
left: -1px;
}
.media-seek-button-forward-label {
right: -1px;
}
.media-seek-button-label {
letter-spacing: -.05em;
font-variant-numeric: tabular-nums;
font-size: .715em;
font-weight: 500;
position: absolute;
bottom: -3px;
}
}
@scope (.media-skin--audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--audio) {
.media-audio-settings-menu-popup {
min-width: calc(var(--media-spacing) * 0) !important;
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/audio.js"></script>
<link rel="stylesheet" href="./player.css">
<audio-player>
<media-container class="media-container media-skin media-skin--audio media-audio-skin">
<slot>
</slot>
<media-error-dialog class="media-audio-dialog-root">
<media-dialog-backdrop class="media-audio-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-audio-dialog-popup">
<div class="media-audio-dialog-content">
<media-dialog-title class="media-audio-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-audio-dialog-description">
</media-dialog-description>
</div>
<div class="media-audio-dialog-actions">
<media-dialog-close class="media-button media-audio-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls visibility="always">
<media-controls-content class="media-controls media-controls-content">
<media-tooltip-group>
<media-controls-group class="media-controls-start">
<div class="media-audio-play-button">
<media-buffering-indicator class="media-buffering-indicator media-audio-play-button-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-play-button class="media-button media-play-button" id="vjs-Xi7ejk2S-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-Xi7ejk2S-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</div>
<media-seek-button class="media-button media-seek-button media-audio-seek-button" seconds="-10" id="vjs-Xi7ejk2S-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="seek" class="media-button-icon media-seek-button-backward-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="seek" class="media-button-icon media-seek-button-backward-icon">
</media-icon>
</span>
<span class="media-seek-button-label media-seek-button-backward-label">10</span>
</media-seek-button>
<media-tooltip trigger="vjs-Xi7ejk2S-ev-2-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-seek-button class="media-button media-seek-button media-audio-seek-button" seconds="10" id="vjs-Xi7ejk2S-ev-3-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="seek" class="media-button-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="seek" class="media-button-icon">
</media-icon>
</span>
<span class="media-seek-button-label media-seek-button-forward-label">10</span>
</media-seek-button>
<media-tooltip trigger="vjs-Xi7ejk2S-ev-3-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</media-controls-group>
<media-controls-group class="media-time-slider-group">
<media-time class="media-time-current-value" type="current">
</media-time>
<media-time-slider class="media-slider media-audio-time-slider">
<media-slider-track class="media-slider-track">
<media-slider-buffer class="media-slider-buffer">
</media-slider-buffer>
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-audio-time-slider-thumb">
</media-slider-thumb>
<media-slider-preview class="media-slider-preview" overflow="visible">
<div class="media-audio-time-slider-preview-content">
<media-slider-value class="media-audio-time-slider-value" type="pointer">
</media-slider-value>
</div>
</media-slider-preview>
</media-time-slider>
<media-time class="media-time-remaining-value" type="remaining" toggle>
</media-time>
</media-controls-group>
<media-controls-group class="media-controls-end">
<media-playback-rate-button commandfor="vjs-UgzNHimM-k9-popup" id="vjs-Xi7ejk2S-ev-4-trigger">
</media-playback-rate-button>
<media-tooltip trigger="vjs-Xi7ejk2S-ev-4-trigger" side="top" class="media-tooltip">
<media-text token="menu.speed">Speed</media-text>
</media-tooltip>
<media-menu side="top" align="center" boundary="viewport" class="media-menu-popup media-audio-settings-menu-popup" id="vjs-UgzNHimM-k9-popup">
<media-menu-content class="media-menu-content">
<media-playback-rate-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-playback-rate-radio-group>
</media-menu-content>
</media-menu>
<media-mute-button class="media-button media-mute-button" commandfor="vjs-LN6lrs8d-q1-popup" id="vjs-Xi7ejk2S-ev-5-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-Xi7ejk2S-ev-5-trigger" delay="0" disabled sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="top" class="media-volume-popover" id="vjs-LN6lrs8d-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="vertical">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowRight" action="seekStep" value="5">
</media-hotkey>
<media-hotkey keys="ArrowLeft" action="seekStep" value="-5">
</media-hotkey>
<media-hotkey keys="l" action="seekStep" value="10">
</media-hotkey>
<media-hotkey keys="j" action="seekStep" value="-10">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-hotkey keys="0-9" action="seekToPercent">
</media-hotkey>
<media-hotkey keys="Home" action="seekToPercent" value="0">
</media-hotkey>
<media-hotkey keys="End" action="seekToPercent" value="100">
</media-hotkey>
<media-hotkey keys=">" action="speedUp">
</media-hotkey>
<media-hotkey keys="<" action="speedDown">
</media-hotkey>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
</media-container>
</audio-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--audio) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
@scope (.media-skin--audio) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--audio) {
.media-audio-time-slider-preview-content {
bottom: calc(100.0% + calc(var(--media-spacing) * 10));
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
font-size: calc(var(--media-spacing) * 3.25);
font-variant-numeric: tabular-nums;
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
left: 50%;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-audio-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-audio-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
.media-audio-time-slider-preview-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-audio-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-audio-time-slider-preview-content {
color: canvastext;
background-color: canvas;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-audio-time-slider-thumb {
opacity: 0;
}
.media-audio-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-audio-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-audio-time-slider-value {
font-variant-numeric: tabular-nums;
}
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
}
@scope (.media-skin--audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--audio) {
@container media-root (width < 32rem) {
.media-audio-seek-button {
display: none;
}
}
.media-controls-content {
z-index: 20;
border-radius: var(--media-control-radius);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
align-items: center;
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end, .media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
.media-time-current-value {
font-variant-numeric: tabular-nums;
}
.media-time-remaining-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-time-remaining-value:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color);
}
@media (prefers-reduced-motion: reduce) {
.media-time-remaining-value {
transition-duration: 50ms;
}
}
@container media-time-controls (width < 16rem) {
.media-time-remaining-value {
display: none;
}
}
.media-time-slider-group {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2.5);
padding-inline: calc(var(--media-spacing) * 3);
flex: 1;
display: flex;
container: media-time-controls / inline-size;
}
}
@scope (.media-skin--audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 3);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 5);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-seek-button-backward-icon {
scale: -1 1;
}
.media-seek-button-backward-label {
left: -1px;
}
.media-seek-button-forward-label {
right: -1px;
}
.media-seek-button-label {
letter-spacing: -.05em;
font-variant-numeric: tabular-nums;
font-size: .715em;
font-weight: 500;
position: absolute;
bottom: -3px;
}
}
@scope (.media-skin--audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--audio) {
.media-audio-settings-menu-popup {
min-width: calc(var(--media-spacing) * 0) !important;
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
}
@layer utilities;
Minimal video skin
'use client';
import { type SVGProps, type ComponentProps, type ReactElement, type ReactNode, type CSSProperties } from 'react';
import { SpinnerIcon as SpinnerIconPrimitive, ChevronIcon as ChevronIconPrimitive, CaptionsOnIcon as CaptionsOnIconPrimitive, CaptionsOffIcon as CaptionsOffIconPrimitive, FullscreenEnterIcon as FullscreenEnterIconPrimitive, FullscreenExitIcon as FullscreenExitIconPrimitive, PipEnterIcon as PipEnterIconPrimitive, PipExitIcon as PipExitIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeOffIcon as VolumeOffIconPrimitive, AirPlayEnterIcon as AirPlayEnterIconPrimitive, AirPlayExitIcon as AirPlayExitIconPrimitive, CastEnterIcon as CastEnterIconPrimitive, CastExitIcon as CastExitIconPrimitive, RestartIcon as RestartIconPrimitive, CheckIcon as CheckIconPrimitive, GearIcon as GearIconPrimitive } from '@videojs/react/icons';
import { SpinnerIcon as SpinnerIconPrimitive2, ChevronIcon as ChevronIconPrimitive2, CaptionsOnIcon as CaptionsOnIconPrimitive2, CaptionsOffIcon as CaptionsOffIconPrimitive2, FullscreenEnterIcon as FullscreenEnterIconPrimitive2, FullscreenExitIcon as FullscreenExitIconPrimitive2, PipEnterIcon as PipEnterIconPrimitive2, PipExitIcon as PipExitIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeOffIcon as VolumeOffIconPrimitive2, AirPlayEnterIcon as AirPlayEnterIconPrimitive2, AirPlayExitIcon as AirPlayExitIconPrimitive2, CastEnterIcon as CastEnterIconPrimitive2, CastExitIcon as CastExitIconPrimitive2, RestartIcon as RestartIconPrimitive2, CheckIcon as CheckIconPrimitive2, GearIcon as GearIconPrimitive2 } from '@videojs/react/icons/minimal';
import { BufferingIndicator as BufferingIndicatorPrimitive, ErrorDialog as ErrorDialogPrimitive, Container as ContainerPrimitive, Poster as PosterPrimitive, Gesture, Hotkey, SeekIndicator as SeekIndicatorPrimitive, StatusAnnouncer as StatusAnnouncerPrimitive, StatusIndicator as StatusIndicatorPrimitive, VolumeIndicator as VolumeIndicatorPrimitive, Tooltip, AirPlayButton as AirPlayButtonPrimitive, CaptionsButton as CaptionsButtonPrimitive, CastButton as CastButtonPrimitive, FullscreenButton as FullscreenButtonPrimitive, PiPButton as PiPButtonPrimitive, PlayButton as PlayButtonPrimitive, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, TimeSlider as TimeSliderPrimitive, Slider, Menu, Text as TextPrimitive, Controls, Time } from '@videojs/react';
import { Video } from '@videojs/react/video';
import './player.css';
import { Player } from './player';
import { type VolumeSliderProps as CoreVolumeSliderProps, type SliderPreviewOverflow } from '@videojs/core';
import { audioText, captionsText, speedText, qualityText, settingsText } from '@videojs/core/i18n/text/menu';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface PosterProps extends Omit<PosterPrimitive.Props, 'children' | 'render'> {
children?: PosterPrimitive.Props['render'];
}
function Poster({ children, className, src, ...props }: PosterProps = {}) {
return (
<PosterPrimitive
render={children}
className={(state) => `media-poster ${resolveClassName(className, state)}`}
src={src}
{...props}
/>
);
}
interface MinimalVideoSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
poster?: string | undefined;
poster?: string | NonNullable<ComponentProps<typeof Poster>>['children'];
}
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type ErrorDialogProps = Omit<ErrorDialogPrimitive.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
interface TimeSliderProps extends Omit<TimeSliderPrimitive.RootProps, 'children'> {
previewOverflow?: SliderPreviewOverflow | undefined;
}
function TimeSlider({ className, previewOverflow = 'visible', ...props }: TimeSliderProps = {}) {
return (
<TimeSliderPrimitive.Root
className={(state) => `media-slider media-time-slider ${resolveClassName(className, state)}`}
{...props}
>
<TimeSliderPrimitive.Chapters
className={'media-time-slider-chapters'}
renderChapter={(props) => (
<div className={'media-time-slider-chapter'} {...props}>
<TimeSliderPrimitive.Track render={<SliderTrack />} className={'media-time-slider-chapter-track'}>
<TimeSliderPrimitive.Buffer render={<SliderBuffer />} />
<TimeSliderPrimitive.Fill render={<SliderFill />} />
</TimeSliderPrimitive.Track>
</div>
)}
></TimeSliderPrimitive.Chapters>
<TimeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-time-slider-thumb'} />
<TimeSliderPrimitive.Preview className={'media-slider-preview'} overflow={previewOverflow}>
<div className={'media-slider-thumbnail'}>
<Slider.Thumbnail className={'media-slider-thumbnail-image'} />
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-slider-thumbnail-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-slider-thumbnail-spinner-icon'} />
</span>
</>
</div>
<div className={'media-time-slider-preview-content'}>
<TimeSliderPrimitive.ChapterTitle className={'media-time-slider-chapter-title'} />
<TimeSliderPrimitive.Value className={'media-time-slider-value'} type="pointer" />
</div>
</TimeSliderPrimitive.Preview>
</TimeSliderPrimitive.Root>
);
}
type CaptionsButtonProps = Omit<CaptionsButtonPrimitive.Props, 'children'>;
function CaptionsButton({ className, ...props }: CaptionsButtonProps = {}) {
return (
<ButtonTooltip side="top">
<CaptionsButtonPrimitive
render={<Button />}
className={(state) => `media-captions-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-button-icon media-captions-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-button-icon media-captions-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-button-icon media-captions-button-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-button-icon media-captions-button-on-icon'} />
</span>
</>
</CaptionsButtonPrimitive>
</ButtonTooltip>
);
}
interface SettingsMenuProps extends Menu.RootProps {
className?: string | undefined;
}
function SettingsMenu({ children, className, ...props }: SettingsMenuProps) {
return (
<Menu.Root side="top" align="center" {...props}>
<ButtonTooltip label={<TextPrimitive token={settingsText.key}>{settingsText.text}</TextPrimitive>} side="top">
<Menu.Trigger render={<Button />} className={'media-settings-menu-trigger'}>
<>
<span className="contents theme-minimal:hidden">
<GearIconPrimitive className={'media-button-icon media-settings-menu-trigger-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<GearIconPrimitive2 className={'media-button-icon media-settings-menu-trigger-icon'} />
</span>
</>
<TextPrimitive className={'media-settings-menu-trigger-label'} token={settingsText.key}>
{settingsText.text}
</TextPrimitive>
</Menu.Trigger>
</ButtonTooltip>
<Menu.Popup keepMounted className={(state) => `media-menu-popup ${resolveClassName(className, state)}`}>
<Menu.Content className={'media-menu-content'}>{children}</Menu.Content>
</Menu.Popup>
</Menu.Root>
);
}
type VideoSettingsMenuProps = Omit<NonNullable<ComponentProps<typeof SettingsMenu>>, 'children'>;
interface QualityMenuProps extends MenuProps {
className?: ClassValue;
}
interface MenuChevronProps {
back?: boolean;
className?: ClassValue;
}
function MenuChevron({ back = false, className }: MenuChevronProps = {}) {
return (
<>
<span className="contents theme-minimal:hidden">
<ChevronIconPrimitive
className={`${back ? 'media-menu-back-chevron' : 'media-menu-forward-chevron'} ${className ?? ''}`}
/>
</span>
<span className="hidden theme-minimal:contents">
<ChevronIconPrimitive2
className={`${back ? 'media-menu-back-chevron' : 'media-menu-forward-chevron'} ${className ?? ''}`}
/>
</span>
</>
);
}
type RadioItemProps = Menu.RadioItemProps;
function RadioItem({ children, className, ...props }: RadioItemProps) {
return (
<Menu.RadioItem className={(state) => `media-menu-radio-item ${resolveClassName(className, state)}`} {...props}>
{children}
<Menu.ItemIndicator forceMount className={'media-menu-item-indicator'}>
<>
<span className="contents theme-minimal:hidden">
<CheckIconPrimitive className={'media-menu-radio-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CheckIconPrimitive2 className={'media-menu-radio-item-icon'} />
</span>
</>
</Menu.ItemIndicator>
</Menu.RadioItem>
);
}
function QualityMenu({ className, ...props }: QualityMenuProps = {}) {
return (
<Menu.Root {...props}>
<QualityRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<SwitchesIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SwitchesIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={qualityText.key}>{qualityText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<QualityRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={qualityText.key}>{qualityText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<QualityRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>
<span>{item.label}</span>
{item.tier ? <sup className={'media-menu-tier'}>{item.tier}</sup> : null}
</span>
{item.badge ? <span className={'media-menu-badge'}>{item.badge}</span> : null}
</RadioItem>
)}
></QualityRadioGroup.Options>
</Menu.Content>
</QualityRadioGroup.Root>
</Menu.Root>
);
}
interface AudioTrackMenuProps extends MenuProps {
className?: ClassValue;
}
function AudioTrackMenu({ className, ...props }: AudioTrackMenuProps = {}) {
return (
<Menu.Root {...props}>
<AudioTrackRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<SpeechIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpeechIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={audioText.key}>{audioText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<AudioTrackRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={audioText.key}>{audioText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<AudioTrackRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></AudioTrackRadioGroup.Options>
</Menu.Content>
</AudioTrackRadioGroup.Root>
</Menu.Root>
);
}
interface PlaybackRateSubmenuProps extends MenuProps {
className?: ClassValue;
}
function PlaybackRateSubmenu({ className, ...props }: PlaybackRateSubmenuProps = {}) {
return (
<Menu.Root {...props}>
<PlaybackRateRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<SpeedIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpeedIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={speedText.key}>{speedText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<PlaybackRateRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={speedText.key}>{speedText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<PlaybackRateRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></PlaybackRateRadioGroup.Options>
</Menu.Content>
</PlaybackRateRadioGroup.Root>
</Menu.Root>
);
}
interface CaptionsSubmenuProps extends MenuProps {
className?: ClassValue;
}
function CaptionsSubmenu({ className, ...props }: CaptionsSubmenuProps = {}) {
return (
<Menu.Root {...props}>
<CaptionsRadioGroup.Root>
<Menu.Trigger className={'media-menu-trigger-item'}>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-menu-trigger-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-menu-trigger-item-icon'} />
</span>
</>
<TextPrimitive token={captionsText.key}>{captionsText.text}</TextPrimitive>
<span className={'media-menu-hint'}>
<CaptionsRadioGroup.Value className={'media-menu-hint-label'} />
<MenuChevron />
</span>
</Menu.Trigger>
<Menu.Content className={(state) => `media-menu-content ${resolveClassName(className, state)}`}>
<Menu.Item className={'media-menu-back-item'}>
<MenuChevron back />
<TextPrimitive token={captionsText.key}>{captionsText.text}</TextPrimitive>
</Menu.Item>
<Menu.Separator className={'media-menu-separator'} />
<CaptionsRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></CaptionsRadioGroup.Options>
</Menu.Content>
</CaptionsRadioGroup.Root>
</Menu.Root>
);
}
function VideoSettingsMenu(props: VideoSettingsMenuProps = {}) {
return (
<SettingsMenu {...props}>
<QualityMenu />
<AudioTrackMenu />
<PlaybackRateSubmenu />
<CaptionsSubmenu />
</SettingsMenu>
);
}
type CastButtonProps = Omit<CastButtonPrimitive.Props, 'children'>;
function CastButton({ className, ...props }: CastButtonProps = {}) {
return (
<ButtonTooltip side="top">
<CastButtonPrimitive
render={<Button />}
className={(state) => `media-cast-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<CastEnterIconPrimitive className={'media-button-icon media-cast-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastEnterIconPrimitive2 className={'media-button-icon media-cast-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CastExitIconPrimitive className={'media-button-icon media-cast-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastExitIconPrimitive2 className={'media-button-icon media-cast-button-exit-icon'} />
</span>
</>
</CastButtonPrimitive>
</ButtonTooltip>
);
}
type AirPlayButtonProps = Omit<AirPlayButtonPrimitive.Props, 'children'>;
function AirPlayButton({ className, ...props }: AirPlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<AirPlayButtonPrimitive
render={<Button />}
className={(state) => `media-airplay-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<AirPlayEnterIconPrimitive className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayEnterIconPrimitive2 className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<AirPlayExitIconPrimitive className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayExitIconPrimitive2 className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
</>
</AirPlayButtonPrimitive>
</ButtonTooltip>
);
}
type PiPButtonProps = Omit<PiPButtonPrimitive.Props, 'children'>;
function PiPButton({ className, ...props }: PiPButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PiPButtonPrimitive
render={<Button />}
className={(state) => `media-pip-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-button-icon media-pip-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-button-icon media-pip-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-button-icon media-pip-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-button-icon media-pip-button-exit-icon'} />
</span>
</>
</PiPButtonPrimitive>
</ButtonTooltip>
);
}
type FullscreenButtonProps = Omit<FullscreenButtonPrimitive.Props, 'children'>;
function FullscreenButton({ className, ...props }: FullscreenButtonProps = {}) {
return (
<ButtonTooltip side="top">
<FullscreenButtonPrimitive
render={<Button />}
className={(state) => `media-fullscreen-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
</>
</FullscreenButtonPrimitive>
</ButtonTooltip>
);
}
function MinimalVideoControls() {
return (
<Controls.Root>
<Controls.Backdrop className={'media-controls__backdrop'} />
<Controls.Content className={'media-controls media-controls'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-start'}>
<PlayButton />
<VolumePopover showTooltip side="right" orientation="horizontal" />
</Controls.Group>
<Controls.Group className={'media-time-slider-group'}>
<Time.Group className={'media-time-group'}>
<Time.Value className={'media-time-current-value'} type="current" toggle />
<Time.Separator className={'media-time-separator'} />
<Time.Value className={'media-time-duration-value'} type="duration" />
</Time.Group>
<TimeSlider previewOverflow="clamp" />
</Controls.Group>
<Controls.Group className={'media-controls-end'}>
<CaptionsButton />
<VideoSettingsMenu />
<Controls.Group className={'media-controls-trailing'}>
<CastButton />
<AirPlayButton />
<PiPButton />
<FullscreenButton />
</Controls.Group>
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface VideoHotkeysProps {
disabled?: boolean | undefined;
}
interface PlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function PlaybackHotkeys({ disabled = false }: PlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowRight" action="seekStep" value={5} />
<Hotkey disabled={disabled} keys="ArrowLeft" action="seekStep" value={-5} />
<Hotkey disabled={disabled} keys="l" action="seekStep" value={10} />
<Hotkey disabled={disabled} keys="j" action="seekStep" value={-10} />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
<Hotkey disabled={disabled} keys="0-9" action="seekToPercent" />
<Hotkey disabled={disabled} keys="Home" action="seekToPercent" value={0} />
<Hotkey disabled={disabled} keys="End" action="seekToPercent" value={100} />
<Hotkey disabled={disabled} keys=">" action="speedUp" />
<Hotkey disabled={disabled} keys="<" action="speedDown" />
</>
);
}
function VideoHotkeys({ disabled = false }: VideoHotkeysProps = {}) {
return (
<>
<PlaybackHotkeys disabled={disabled} />
<Hotkey disabled={disabled} keys="f" action="toggleFullscreen" />
<Hotkey disabled={disabled} keys="c" action="toggleSubtitles" />
<Hotkey disabled={disabled} keys="i" action="togglePictureInPicture" />
</>
);
}
interface VideoGesturesProps {
disabled?: boolean | undefined;
}
function VideoGestures({ disabled = false }: VideoGesturesProps = {}) {
return (
<>
<Gesture disabled={disabled} type="tap" action="togglePaused" pointer="mouse" region="center" />
<Gesture disabled={disabled} type="tap" action="toggleControls" pointer="touch" />
<Gesture disabled={disabled} type="doubletap" action="seekStep" value={-10} region="left" />
<Gesture disabled={disabled} type="doubletap" action="toggleFullscreen" region="center" />
<Gesture disabled={disabled} type="doubletap" action="seekStep" value={10} region="right" />
</>
);
}
type VideoStatusIndicatorsProps = Omit<ComponentProps<'div'>, 'children'>;
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
type VolumeIndicatorProps = Omit<VolumeIndicatorPrimitive.RootProps, 'children'>;
function VolumeIndicator({ className, ...props }: VolumeIndicatorProps = {}) {
return (
<VolumeIndicatorPrimitive.Root
className={(state) => `media-volume-indicator ${resolveClassName(className, state)}`}
{...props}
>
<VolumeIndicatorPrimitive.Fill className={'media-volume-indicator-fill'}>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-volume-indicator-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-volume-indicator-high-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-volume-indicator-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-volume-indicator-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-volume-indicator-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-volume-indicator-off-icon'} />
</span>
</>
<VolumeIndicatorPrimitive.Value className={'media-volume-indicator-value'} />
</VolumeIndicatorPrimitive.Fill>
</VolumeIndicatorPrimitive.Root>
);
}
type StatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const TOP_STATUS_ACTIONS = ['toggleSubtitles', 'toggleFullscreen', 'togglePictureInPicture'] as const;
function StatusIndicator({ className, ...props }: StatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={TOP_STATUS_ACTIONS}
className={(state) => `media-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-status-indicator-content'}>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-status-indicator-captions-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-status-indicator-captions-on-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-status-indicator-captions-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-status-indicator-captions-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-status-indicator-pip-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-status-indicator-pip-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-status-indicator-pip-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-status-indicator-pip-exit-icon'} />
</span>
</>
<StatusIndicatorPrimitive.Value className={'media-status-indicator-value'} />
</div>
</StatusIndicatorPrimitive.Root>
);
}
type SeekIndicatorProps = Omit<SeekIndicatorPrimitive.RootProps, 'children'>;
function SeekIndicator({ className, ...props }: SeekIndicatorProps = {}) {
return (
<SeekIndicatorPrimitive.Root
className={(state) => `media-seek-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<ChevronIconPrimitive className={'media-seek-indicator-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<ChevronIconPrimitive2 className={'media-seek-indicator-icon'} />
</span>
</>
<SeekIndicatorPrimitive.Value className={'media-seek-indicator-value'} />
</SeekIndicatorPrimitive.Root>
);
}
type PlaybackStatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const PLAYBACK_STATUS_ACTIONS = ['togglePaused'] as const;
function PlaybackStatusIndicator({ className, ...props }: PlaybackStatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={PLAYBACK_STATUS_ACTIONS}
className={(state) => `media-playback-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-playback-status-indicator-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-playback-status-indicator-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-playback-status-indicator-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-playback-status-indicator-pause-icon'} />
</span>
</>
</StatusIndicatorPrimitive.Root>
);
}
function VideoStatusIndicators({ className, ...props }: VideoStatusIndicatorsProps = {}) {
return (
<>
<StatusAnnouncer />
<div className={`media-video-status-indicators ${className ?? ''}`} {...props}>
<VolumeIndicator />
<StatusIndicator />
<SeekIndicator />
<PlaybackStatusIndicator />
</div>
</>
);
}
function MinimalVideoSkin({ children, className, poster, ...props }: MinimalVideoSkinProps = {}) {
const isPosterString = typeof poster === 'string';
return (
<Container className={`media-skin media-skin--minimal media-skin--video ${className ?? ''}`} {...props}>
{children}
<Poster src={isPosterString ? poster : undefined}>{isPosterString ? undefined : poster}</Poster>
<BufferingIndicator />
<ErrorDialog />
<MinimalVideoControls />
<VideoHotkeys />
<VideoGestures />
<VideoStatusIndicators />
</Container>
);
}
const Skin = MinimalVideoSkin;
// ================================================================
// Player
// ================================================================
export interface VideoPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
renderPoster?: Poster.Props['render'];
}
export function MinimalVideoSkin({ renderPoster, ...props }: MinimalVideoSkinProps) {
return <Skin poster={renderPoster} {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
type SliderBufferProps = ComponentProps<'div'>;
function SliderBuffer({ className, ...props }: SliderBufferProps) {
return <div className={`media-slider-buffer ${className ?? ''}`} {...props} />;
}
// ================================================================
// Error Dialog
// ================================================================
function ErrorDialog({ className, ...props }: ErrorDialogProps = {}) {
return (
<ErrorDialogPrimitive.Root>
<ErrorDialogPrimitive.Backdrop className={'media-dialog-backdrop'} />
<ErrorDialogPrimitive.Popup
className={(state) => `media-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-dialog-content'}>
<ErrorDialogPrimitive.Title className={'media-dialog-title'} />
<ErrorDialogPrimitive.Description className={'media-dialog-description'} />
</div>
<div className={'media-dialog-actions'}>
<ErrorDialogPrimitive.Close render={<Button />} className={'media-dialog-close'} />
</div>
</ErrorDialogPrimitive.Popup>
</ErrorDialogPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { videoFeatures } from '@videojs/react/video';
export const { Player } = createPlayer({ features: videoFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-menu-back-item {
margin-bottom: calc(var(--media-spacing) * .5);
cursor: pointer;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
width: 100%;
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-back-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-back-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-back-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@supports (top: anchor(top)) {
.media-menu-back-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-back-item:hover {
transition-duration: .2s;
}
}
.media-menu-back-item[data-highlighted] {
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-back-item {
transition-duration: 50ms;
}
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-hint {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 1);
color: currentColor;
margin-inline-start: auto;
padding-inline-start: calc(var(--media-spacing) * 2);
display: inline-flex;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-hint {
color: color-mix(in oklab, currentcolor 65.0%, transparent);
}
}
.media-menu-hint-label {
max-width: calc(var(--media-spacing) * 24);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-separator {
margin-block: calc(var(--media-spacing) * 1);
border-bottom-style: solid;
border-bottom-width: 1px;
border-color: var(--media-border);
display: block;
}
@media (prefers-contrast: more) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
@media (forced-colors: active) {
.media-menu-separator {
border-color: canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
.media-menu-trigger-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-trigger-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-trigger-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-trigger-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-trigger-item[data-availability="unavailable"], .media-menu-trigger-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
transition-duration: .2s;
}
}
.media-menu-trigger-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
}
.media-menu-trigger-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-menu-back-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
rotate: 180deg;
}
@media (hover: hover) {
@scope (.media-menu-back-item) {
&:hover .media-menu-back-chevron {
color: inherit;
}
}
}
@scope (.media-menu-back-item) {
&[data-highlighted] .media-menu-back-chevron {
color: inherit;
}
}
.media-menu-back-chevron:dir(rtl) {
rotate: 0deg;
scale: 1;
}
.media-menu-forward-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-forward-chevron {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-forward-chevron {
color: inherit;
}
}
.media-menu-forward-chevron:dir(rtl) {
scale: -1 1;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-thumbnail {
pointer-events: none;
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
overflow: hidden;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-slider-thumbnail, :where(.media-slider-preview)[data-pointing] .media-slider-thumbnail {
opacity: 1;
filter: none;
scale: 1;
}
.media-slider-thumbnail:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-slider-thumbnail:has([data-loading]) {
aspect-ratio: 16 / 9;
width: var(--media-slider-preview-max-width);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumbnail {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-slider-thumbnail {
color: canvastext;
background-color: canvas;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-slider-thumbnail:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 9));
background-color: oklab(0% none none / .9);
border-radius: .75rem;
left: 50%;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 14));
left: var(--media-preview-left, var(--media-slider-pointer));
background-color: oklab(0% none none / .9);
border-radius: .5rem;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
@media (prefers-reduced-transparency: reduce) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-slider-thumbnail-image {
max-height: var(--media-slider-preview-max-height);
max-width: var(--media-slider-preview-max-width);
border-radius: inherit;
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
}
.media-slider-thumbnail-image[data-loading] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-image {
transition-duration: 50ms;
}
}
.media-slider-thumbnail-spinner-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
opacity: 0;
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
@scope (.media-slider-thumbnail) {
&:not(:has([role="img"][data-loading])) .media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
@scope (.media-slider-thumbnail) {
&:has([role="img"][data-loading]) .media-slider-thumbnail-spinner-icon {
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
.media-time-slider-chapter {
inset: calc(var(--media-spacing) * 0);
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
--media-chapter-inset-end: .5;
--media-chapter-inset-start: .5;
justify-content: center;
align-items: center;
display: flex;
position: absolute;
}
.media-time-slider-chapter:first-child {
--media-chapter-inset-start: 0;
}
.media-time-slider-chapter:last-child {
--media-chapter-inset-end: 0;
}
.media-time-slider-chapter[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
}
.media-time-slider-chapter[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
}
.media-time-slider-chapter-title {
max-width: var(--media-slider-preview-max-width);
min-width: calc(var(--media-spacing) * 0);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-time-slider-chapter-title:empty {
display: none;
}
.media-time-slider-chapter-title:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 6);
}
.media-time-slider-chapter-track[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1.75);
}
}
.media-time-slider-chapter-track[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) 0 round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="vertical"] {
width: calc(var(--media-spacing) * 1.75);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-chapter-track {
transition-property: height, width;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-chapters {
width: 100%;
height: 100%;
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
border-radius: inherit;
flex: 1;
align-items: center;
display: flex;
position: relative;
}
.media-time-slider-preview-content {
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
font-variant-numeric: tabular-nums;
opacity: 0;
filter: blur(8px);
display: flex;
position: absolute;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-preview-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 12.5));
flex-direction: column;
align-items: center;
left: 50%;
}
.media-time-slider-preview-content:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 7));
left: var(--media-preview-left, var(--media-slider-pointer));
justify-content: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 3);
flex-direction: row-reverse;
}
.media-time-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 0;
}
.media-time-slider-thumb:focus-visible, .media-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
scale: .8;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
scale: .7;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *)[data-interactive] {
scale: 1;
}
.media-time-slider-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 1);
bottom: calc(var(--media-spacing) * 1);
z-index: 20;
align-items: center;
column-gap: calc(var(--media-spacing) * 2);
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 5);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
background-color: #0000;
border-radius: .75rem;
flex-wrap: wrap;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 100%;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: #000;
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
flex-wrap: nowrap;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: #000;
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
background-image: linear-gradient(to top, oklab(0% none none / .7) 0.0%, oklab(0% none none / .5) calc(var(--media-spacing) * 30), transparent 100.0%);
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
.media-controls-end {
flex: 1;
justify-content: flex-end;
align-items: center;
gap: 1px;
display: flex;
}
@container media-root (width < 42rem) {
.media-controls-end {
transition: mask-position 50ms ease-out;
mask-position: 100% 0;
mask-size: 400% 100%;
mask-repeat: no-repeat;
}
@scope (.media-controls) {
&:has([data-volume-level][aria-expanded="true"]) .media-controls-end {
mask-image: linear-gradient(to right, #0000 10%, #000 25% 100%);
mask-position: 0 0;
}
}
}
@container media-root (width >= 42rem) {
.media-controls-end {
flex: none;
}
}
.media-controls-start {
flex: 1;
align-items: center;
gap: 1px;
display: flex;
}
@container media-root (width >= 42rem) {
.media-controls-start {
flex: none;
}
}
.media-controls-trailing {
align-items: center;
gap: 1px;
display: flex;
}
.media-time-current-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: none;
}
.media-time-current-value:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
@supports (corner-shape: squircle) {
.media-time-current-value {
corner-shape: squircle;
border-radius: 1rem;
}
}
@container media-root (width >= 42rem) {
.media-time-current-value {
display: inline;
}
}
.media-time-duration-value {
font-variant-numeric: tabular-nums;
}
@container media-root (width >= 42rem) {
.media-time-duration-value {
color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-duration-value {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-group {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-time-separator {
display: none;
}
@container media-root (width >= 42rem) {
.media-time-separator {
color: currentColor;
display: inline;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-separator {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-slider-group {
align-items: center;
gap: calc(var(--media-spacing) * 3);
padding-inline: calc(var(--media-spacing) * 1.5);
--media-slider-height: calc(var(--media-spacing) * 5);
flex-direction: row-reverse;
flex: 0 0 100%;
order: -1;
display: flex;
container: media-time-controls / inline-size;
}
@container media-root (width >= 42rem) {
.media-time-slider-group {
min-width: calc(var(--media-spacing) * 0);
--media-slider-height: calc(var(--media-spacing) * 8);
flex-direction: row;
flex: 1;
order: 0;
transition: mask-position 50ms ease-out;
mask-position: 100% 0;
mask-size: 200% 100%;
mask-repeat: no-repeat;
}
@scope (.media-controls) {
&:has([data-volume-level][aria-expanded="true"]) .media-time-slider-group {
mask-image: linear-gradient(to right, #0000 10%, #000 25% 100%);
mask-position: 0 0;
}
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
.media-menu-badge {
border-radius: var(--media-control-radius);
background-color: var(--media-accent);
padding-inline: calc(var(--media-spacing) * 1.5);
font-size: .7em;
font-weight: 600;
}
@supports (top: anchor(top)) {
}
@supports (color: color-mix(in lab, red, red)) {
}
@supports (top: anchor(top)) {
}
@media (prefers-contrast: more) {
}
@media (forced-colors: active) {
}
@media (prefers-reduced-transparency: reduce) {
}
.media-menu-tier {
color: currentColor;
padding-inline-start: calc(var(--media-spacing) * .5);
padding-top: 1px;
font-size: .7em;
font-weight: 600;
line-height: 1;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-tier {
color: color-mix(in oklab, currentcolor 70.0%, transparent);
}
}
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-skin--minimal.media-skin--video) {
@supports (top: anchor(top)) {
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-settings-menu-trigger-icon {
transition-property: transform, translate, scale, rotate;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-settings-menu-trigger) {
&[aria-expanded="true"] .media-settings-menu-trigger-icon {
rotate: 90deg;
}
}
@media (prefers-reduced-motion: reduce) {
.media-settings-menu-trigger-icon {
transition-property: none !important;
transition-duration: 0s !important;
}
}
.media-settings-menu-trigger-label {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-seek-indicator {
place-content: center;
gap: calc(var(--media-spacing) * 1);
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
display: grid;
}
.media-seek-indicator[data-direction="backward"] {
grid-column-start: 1;
justify-self: flex-start;
}
.media-seek-indicator[data-direction="forward"] {
grid-column-start: 3;
justify-self: flex-end;
}
@container media-root (width >= 42rem) {
.media-seek-indicator {
padding: calc(var(--media-spacing) * 6);
}
}
.media-seek-indicator-icon {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
display: none;
}
@scope (.media-seek-indicator) {
&[data-direction] .media-seek-indicator-icon {
display: block;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"] .media-seek-indicator-icon {
scale: -1 1;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-seek-indicator-icon {
transition-property: translate, opacity;
transition-duration: .2s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-seek-indicator) {
&[data-ending-style] .media-seek-indicator-icon, &[data-starting-style] .media-seek-indicator-icon {
opacity: 0;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"][data-starting-style] .media-seek-indicator-icon {
translate: 60%;
}
}
@scope (.media-seek-indicator) {
&[data-direction="forward"][data-starting-style] .media-seek-indicator-icon {
translate: -60%;
}
}
}
.media-seek-indicator-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]) {
visibility: hidden;
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/video-minimal.js"></script>
<link rel="stylesheet" href="./player.css">
<video-player poster="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/thumbnail.webp">
<media-container class="media-container media-skin media-skin--minimal media-skin--video">
<slot>
</slot>
<media-poster class="media-poster">
<img alt="" decoding="async" />
</media-poster>
<media-buffering-indicator class="media-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-error-dialog class="media-dialog-root">
<media-dialog-backdrop class="media-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-dialog-popup">
<div class="media-dialog-content">
<media-dialog-title class="media-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-dialog-description">
</media-dialog-description>
</div>
<div class="media-dialog-actions">
<media-dialog-close class="media-button media-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls>
<media-controls-backdrop class="media-controls__backdrop">
</media-controls-backdrop>
<media-controls-content class="media-controls media-controls">
<media-tooltip-group>
<media-controls-group class="media-controls-start">
<media-play-button class="media-button media-play-button" id="vjs-sps9KiPk-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-mute-button class="media-button media-mute-button" commandfor="vjs-CqfzDJ5Q-q1-popup" id="vjs-sps9KiPk-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-2-trigger" delay="0" sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="right" class="media-volume-popover" id="vjs-CqfzDJ5Q-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="horizontal">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
</media-controls-group>
<media-controls-group class="media-time-slider-group">
<media-time-group class="media-time-group">
<media-time class="media-time-current-value" type="current" toggle>
</media-time>
<media-time-separator class="media-time-separator">
</media-time-separator>
<media-time class="media-time-duration-value" type="duration">
</media-time>
</media-time-group>
<media-time-slider class="media-slider media-time-slider">
<media-time-slider-chapters class="media-time-slider-chapters">
<template>
<div class="media-time-slider-chapter">
<media-slider-track class="media-slider-track media-time-slider-chapter-track">
<media-slider-buffer class="media-slider-buffer">
</media-slider-buffer>
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
</div>
</template>
</media-time-slider-chapters>
<media-slider-thumb class="media-slider-thumb media-time-slider-thumb">
</media-slider-thumb>
<media-slider-preview class="media-slider-preview" overflow="clamp">
<div class="media-slider-thumbnail">
<media-slider-thumbnail class="media-slider-thumbnail-image">
</media-slider-thumbnail>
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-slider-thumbnail-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-slider-thumbnail-spinner-icon">
</media-icon>
</span>
</div>
<div class="media-time-slider-preview-content">
<media-time-slider-chapter-title class="media-time-slider-chapter-title">
</media-time-slider-chapter-title>
<media-slider-value class="media-time-slider-value" type="pointer">
</media-slider-value>
</div>
</media-slider-preview>
</media-time-slider>
</media-controls-group>
<media-controls-group class="media-controls-end">
<media-captions-button class="media-button media-captions-button" id="vjs-sps9KiPk-ev-3-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
</media-captions-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-3-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<button commandfor="vjs-I0OqnkTx-t2-popup" class="media-button media-settings-menu-trigger" id="vjs-sps9KiPk-ev-4-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="gear" class="media-button-icon media-settings-menu-trigger-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="gear" class="media-button-icon media-settings-menu-trigger-icon">
</media-icon>
</span>
<media-text class="media-settings-menu-trigger-label" token="menu.settings">Settings</media-text>
</button>
<media-tooltip trigger="vjs-sps9KiPk-ev-4-trigger" side="top" class="media-tooltip">
<media-text token="menu.settings">Settings</media-text>
</media-tooltip>
<media-menu side="top" align="center" class="media-menu-popup" id="vjs-I0OqnkTx-t2-popup">
<media-menu-content class="media-menu-content">
<media-menu-item commandfor="vjs-i3quCNP0-qh-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="switches" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="switches" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.quality">Quality</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-i3quCNP0-qh-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.quality">Quality</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-quality-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span>
<span data-part="label">
</span>
<sup data-part="tier" class="media-menu-tier">
</sup>
</span>
<span data-part="badge" class="media-menu-badge">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-quality-radio-group>
</media-menu-content>
<media-menu-item commandfor="vjs-Ssk6GEro-q8-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="speech" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="speech" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.audio">Audio</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-Ssk6GEro-q8-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.audio">Audio</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-audio-track-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-audio-track-radio-group>
</media-menu-content>
<media-menu-item commandfor="vjs-gLYTWOMr-qf-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="speed" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="speed" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.speed">Speed</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-gLYTWOMr-qf-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.speed">Speed</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-playback-rate-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-playback-rate-radio-group>
</media-menu-content>
<media-menu-item commandfor="vjs-MMUeOFna-rk-content" class="media-menu-trigger-item">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-menu-trigger-item-icon">
</media-icon>
</span>
<media-text token="menu.captions">Captions</media-text>
<span class="media-menu-hint">
<span data-part="value" class="media-menu-hint-label">
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-forward-chevron">
</media-icon>
</span>
</span>
</media-menu-item>
<media-menu-content class="media-menu-content" id="vjs-MMUeOFna-rk-content">
<media-menu-item class="media-menu-back-item">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-menu-back-chevron">
</media-icon>
</span>
<media-text token="menu.captions">Captions</media-text>
</media-menu-item>
<media-menu-separator class="media-menu-separator">
</media-menu-separator>
<media-captions-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-captions-radio-group>
</media-menu-content>
</media-menu-content>
</media-menu>
<media-controls-group class="media-controls-trailing">
<media-cast-button class="media-button media-cast-button" id="vjs-sps9KiPk-ev-5-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
</media-cast-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-5-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-airplay-button class="media-button media-airplay-button" id="vjs-sps9KiPk-ev-6-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
</media-airplay-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-6-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-pip-button class="media-button media-pip-button" id="vjs-sps9KiPk-ev-7-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
</media-pip-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-7-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-fullscreen-button class="media-button media-fullscreen-button" id="vjs-sps9KiPk-ev-8-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
</media-fullscreen-button>
<media-tooltip trigger="vjs-sps9KiPk-ev-8-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</media-controls-group>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowRight" action="seekStep" value="5">
</media-hotkey>
<media-hotkey keys="ArrowLeft" action="seekStep" value="-5">
</media-hotkey>
<media-hotkey keys="l" action="seekStep" value="10">
</media-hotkey>
<media-hotkey keys="j" action="seekStep" value="-10">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-hotkey keys="0-9" action="seekToPercent">
</media-hotkey>
<media-hotkey keys="Home" action="seekToPercent" value="0">
</media-hotkey>
<media-hotkey keys="End" action="seekToPercent" value="100">
</media-hotkey>
<media-hotkey keys=">" action="speedUp">
</media-hotkey>
<media-hotkey keys="<" action="speedDown">
</media-hotkey>
<media-hotkey keys="f" action="toggleFullscreen">
</media-hotkey>
<media-hotkey keys="c" action="toggleSubtitles">
</media-hotkey>
<media-hotkey keys="i" action="togglePictureInPicture">
</media-hotkey>
<media-gesture type="tap" action="togglePaused" pointer="mouse" region="center">
</media-gesture>
<media-gesture type="tap" action="toggleControls" pointer="touch">
</media-gesture>
<media-gesture type="doubletap" action="seekStep" value="-10" region="left">
</media-gesture>
<media-gesture type="doubletap" action="toggleFullscreen" region="center">
</media-gesture>
<media-gesture type="doubletap" action="seekStep" value="10" region="right">
</media-gesture>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
<div class="media-video-status-indicators">
<media-volume-indicator class="media-volume-indicator">
<media-volume-indicator-fill class="media-volume-indicator-fill">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<media-volume-indicator-value class="media-volume-indicator-value">
</media-volume-indicator-value>
</media-volume-indicator-fill>
</media-volume-indicator>
<media-status-indicator actions="toggleSubtitles,toggleFullscreen,togglePictureInPicture" class="media-status-indicator">
<div class="media-status-indicator-content">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<media-status-indicator-value class="media-status-indicator-value">
</media-status-indicator-value>
</div>
</media-status-indicator>
<media-seek-indicator class="media-seek-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="chevron" class="media-seek-indicator-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="chevron" class="media-seek-indicator-icon">
</media-icon>
</span>
<media-seek-indicator-value class="media-seek-indicator-value">
</media-seek-indicator-value>
</media-seek-indicator>
<media-status-indicator actions="togglePaused" class="media-playback-status-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
</media-status-indicator>
</div>
</media-container>
</video-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-menu-back-item {
margin-bottom: calc(var(--media-spacing) * .5);
cursor: pointer;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
width: 100%;
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-back-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-back-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-back-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@supports (top: anchor(top)) {
.media-menu-back-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-back-item:hover {
transition-duration: .2s;
}
}
.media-menu-back-item[data-highlighted] {
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-back-item {
transition-duration: 50ms;
}
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-hint {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 1);
color: currentColor;
margin-inline-start: auto;
padding-inline-start: calc(var(--media-spacing) * 2);
display: inline-flex;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-hint {
color: color-mix(in oklab, currentcolor 65.0%, transparent);
}
}
.media-menu-hint-label {
max-width: calc(var(--media-spacing) * 24);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-separator {
margin-block: calc(var(--media-spacing) * 1);
border-bottom-style: solid;
border-bottom-width: 1px;
border-color: var(--media-border);
display: block;
}
@media (prefers-contrast: more) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
@media (forced-colors: active) {
.media-menu-separator {
border-color: canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-separator {
border-color: oklab(100% 0 5.96046e-8 / .25);
}
}
.media-menu-trigger-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-trigger-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-trigger-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-trigger-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-trigger-item[data-availability="unavailable"], .media-menu-trigger-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-trigger-item:hover {
transition-duration: .2s;
}
}
.media-menu-trigger-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-trigger-item {
transition-duration: 50ms;
}
}
.media-menu-trigger-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-trigger-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-menu-back-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
rotate: 180deg;
}
@media (hover: hover) {
@scope (.media-menu-back-item) {
&:hover .media-menu-back-chevron {
color: inherit;
}
}
}
@scope (.media-menu-back-item) {
&[data-highlighted] .media-menu-back-chevron {
color: inherit;
}
}
.media-menu-back-chevron:dir(rtl) {
rotate: 0deg;
scale: 1;
}
.media-menu-forward-chevron {
width: calc(var(--media-spacing) * 3.5);
height: calc(var(--media-spacing) * 3.5);
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
&:hover .media-menu-forward-chevron {
color: inherit;
}
}
}
@scope (.media-menu-trigger-item) {
&[data-highlighted] .media-menu-forward-chevron {
color: inherit;
}
}
.media-menu-forward-chevron:dir(rtl) {
scale: -1 1;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-thumbnail {
pointer-events: none;
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
overflow: hidden;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-slider-thumbnail, :where(.media-slider-preview)[data-pointing] .media-slider-thumbnail {
opacity: 1;
filter: none;
scale: 1;
}
.media-slider-thumbnail:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-slider-thumbnail:has([data-loading]) {
aspect-ratio: 16 / 9;
width: var(--media-slider-preview-max-width);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumbnail {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-slider-thumbnail {
color: canvastext;
background-color: canvas;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-slider-thumbnail:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 9));
background-color: oklab(0% none none / .9);
border-radius: .75rem;
left: 50%;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 14));
left: var(--media-preview-left, var(--media-slider-pointer));
background-color: oklab(0% none none / .9);
border-radius: .5rem;
}
.media-slider-thumbnail:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
@media (prefers-reduced-transparency: reduce) {
.media-slider-thumbnail {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-slider-thumbnail:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-slider-thumbnail-image {
max-height: var(--media-slider-preview-max-height);
max-width: var(--media-slider-preview-max-width);
border-radius: inherit;
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
}
.media-slider-thumbnail-image[data-loading] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-image {
transition-duration: 50ms;
}
}
.media-slider-thumbnail-spinner-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
opacity: 0;
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
transition-property: opacity;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
@scope (.media-slider-thumbnail) {
&:not(:has([role="img"][data-loading])) .media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
@scope (.media-slider-thumbnail) {
&:has([role="img"][data-loading]) .media-slider-thumbnail-spinner-icon {
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-slider-thumbnail-spinner-icon {
--media-spinner-animation: none;
}
}
.media-time-slider-chapter {
inset: calc(var(--media-spacing) * 0);
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
--media-chapter-inset-end: .5;
--media-chapter-inset-start: .5;
justify-content: center;
align-items: center;
display: flex;
position: absolute;
}
.media-time-slider-chapter:first-child {
--media-chapter-inset-start: 0;
}
.media-time-slider-chapter:last-child {
--media-chapter-inset-end: 0;
}
.media-time-slider-chapter[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
}
.media-time-slider-chapter[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
}
.media-time-slider-chapter-title {
max-width: var(--media-slider-preview-max-width);
min-width: calc(var(--media-spacing) * 0);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.media-time-slider-chapter-title:empty {
display: none;
}
.media-time-slider-chapter-title:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 6);
}
.media-time-slider-chapter-track[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1.75);
}
}
.media-time-slider-chapter-track[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-chapter-end) + var(--media-spacing) * var(--media-chapter-inset-end)) 0 calc(var(--media-slider-chapter-start) + var(--media-spacing) * var(--media-chapter-inset-start)) 0 round var(--media-control-radius));
}
@scope (.media-time-slider-chapter) {
&[data-highlighted] .media-time-slider-chapter-track[data-orientation="vertical"] {
width: calc(var(--media-spacing) * 1.75);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-chapter-track {
transition-property: height, width;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-chapters {
width: 100%;
height: 100%;
min-height: calc(var(--media-spacing) * 0);
min-width: calc(var(--media-spacing) * 0);
border-radius: inherit;
flex: 1;
align-items: center;
display: flex;
position: relative;
}
.media-time-slider-preview-content {
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
font-variant-numeric: tabular-nums;
opacity: 0;
filter: blur(8px);
display: flex;
position: absolute;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-preview-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 12.5));
flex-direction: column;
align-items: center;
left: 50%;
}
.media-time-slider-preview-content:where(.media-skin--minimal, .media-skin--minimal *) {
bottom: calc(100.0% + calc(var(--media-spacing) * 7));
left: var(--media-preview-left, var(--media-slider-pointer));
justify-content: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 3);
flex-direction: row-reverse;
}
.media-time-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 0;
}
.media-time-slider-thumb:focus-visible, .media-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
scale: .8;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-time-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
scale: .7;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-time-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *)[data-interactive] {
scale: 1;
}
.media-time-slider-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 1);
bottom: calc(var(--media-spacing) * 1);
z-index: 20;
align-items: center;
column-gap: calc(var(--media-spacing) * 2);
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 5);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
background-color: #0000;
border-radius: .75rem;
flex-wrap: wrap;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 100%;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: #000;
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
flex-wrap: nowrap;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: #000;
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
background-image: linear-gradient(to top, oklab(0% none none / .7) 0.0%, oklab(0% none none / .5) calc(var(--media-spacing) * 30), transparent 100.0%);
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
.media-controls-end {
flex: 1;
justify-content: flex-end;
align-items: center;
gap: 1px;
display: flex;
}
@container media-root (width < 42rem) {
.media-controls-end {
transition: mask-position 50ms ease-out;
mask-position: 100% 0;
mask-size: 400% 100%;
mask-repeat: no-repeat;
}
@scope (.media-controls) {
&:has([data-volume-level][aria-expanded="true"]) .media-controls-end {
mask-image: linear-gradient(to right, #0000 10%, #000 25% 100%);
mask-position: 0 0;
}
}
}
@container media-root (width >= 42rem) {
.media-controls-end {
flex: none;
}
}
.media-controls-start {
flex: 1;
align-items: center;
gap: 1px;
display: flex;
}
@container media-root (width >= 42rem) {
.media-controls-start {
flex: none;
}
}
.media-controls-trailing {
align-items: center;
gap: 1px;
display: flex;
}
.media-time-current-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: none;
}
.media-time-current-value:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
@supports (corner-shape: squircle) {
.media-time-current-value {
corner-shape: squircle;
border-radius: 1rem;
}
}
@container media-root (width >= 42rem) {
.media-time-current-value {
display: inline;
}
}
.media-time-duration-value {
font-variant-numeric: tabular-nums;
}
@container media-root (width >= 42rem) {
.media-time-duration-value {
color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-duration-value {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-group {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-time-separator {
display: none;
}
@container media-root (width >= 42rem) {
.media-time-separator {
color: currentColor;
display: inline;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-separator {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-slider-group {
align-items: center;
gap: calc(var(--media-spacing) * 3);
padding-inline: calc(var(--media-spacing) * 1.5);
--media-slider-height: calc(var(--media-spacing) * 5);
flex-direction: row-reverse;
flex: 0 0 100%;
order: -1;
display: flex;
container: media-time-controls / inline-size;
}
@container media-root (width >= 42rem) {
.media-time-slider-group {
min-width: calc(var(--media-spacing) * 0);
--media-slider-height: calc(var(--media-spacing) * 8);
flex-direction: row;
flex: 1;
order: 0;
transition: mask-position 50ms ease-out;
mask-position: 100% 0;
mask-size: 200% 100%;
mask-repeat: no-repeat;
}
@scope (.media-controls) {
&:has([data-volume-level][aria-expanded="true"]) .media-time-slider-group {
mask-image: linear-gradient(to right, #0000 10%, #000 25% 100%);
mask-position: 0 0;
}
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
.media-menu-badge {
border-radius: var(--media-control-radius);
background-color: var(--media-accent);
padding-inline: calc(var(--media-spacing) * 1.5);
font-size: .7em;
font-weight: 600;
}
@supports (top: anchor(top)) {
}
@supports (color: color-mix(in lab, red, red)) {
}
@supports (top: anchor(top)) {
}
@media (prefers-contrast: more) {
}
@media (forced-colors: active) {
}
@media (prefers-reduced-transparency: reduce) {
}
.media-menu-tier {
color: currentColor;
padding-inline-start: calc(var(--media-spacing) * .5);
padding-top: 1px;
font-size: .7em;
font-weight: 600;
line-height: 1;
}
@supports (color: color-mix(in lab, red, red)) {
.media-menu-tier {
color: color-mix(in oklab, currentcolor 70.0%, transparent);
}
}
@media (hover: hover) {
}
@supports (top: anchor(top)) {
@media (hover: hover) {
}
}
@media (prefers-reduced-motion: reduce) {
}
@media (hover: hover) {
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-menu-trigger-item) {
}
}
@scope (.media-skin--minimal.media-skin--video) {
@supports (top: anchor(top)) {
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-settings-menu-trigger-icon {
transition-property: transform, translate, scale, rotate;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-settings-menu-trigger) {
&[aria-expanded="true"] .media-settings-menu-trigger-icon {
rotate: 90deg;
}
}
@media (prefers-reduced-motion: reduce) {
.media-settings-menu-trigger-icon {
transition-property: none !important;
transition-duration: 0s !important;
}
}
.media-settings-menu-trigger-label {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--minimal.media-skin--video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-seek-indicator {
place-content: center;
gap: calc(var(--media-spacing) * 1);
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
display: grid;
}
.media-seek-indicator[data-direction="backward"] {
grid-column-start: 1;
justify-self: flex-start;
}
.media-seek-indicator[data-direction="forward"] {
grid-column-start: 3;
justify-self: flex-end;
}
@container media-root (width >= 42rem) {
.media-seek-indicator {
padding: calc(var(--media-spacing) * 6);
}
}
.media-seek-indicator-icon {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
display: none;
}
@scope (.media-seek-indicator) {
&[data-direction] .media-seek-indicator-icon {
display: block;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"] .media-seek-indicator-icon {
scale: -1 1;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-seek-indicator-icon {
transition-property: translate, opacity;
transition-duration: .2s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
@scope (.media-seek-indicator) {
&[data-ending-style] .media-seek-indicator-icon, &[data-starting-style] .media-seek-indicator-icon {
opacity: 0;
}
}
@scope (.media-seek-indicator) {
&[data-direction="backward"][data-starting-style] .media-seek-indicator-icon {
translate: 60%;
}
}
@scope (.media-seek-indicator) {
&[data-direction="forward"][data-starting-style] .media-seek-indicator-icon {
translate: -60%;
}
}
}
.media-seek-indicator-value {
font-variant-numeric: tabular-nums;
}
}
@scope (.media-skin--minimal.media-skin--video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster ::slotted(img) {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster ::slotted(img:not([src]):not([srcset])) {
visibility: hidden;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]), .media-poster > slot > img:not([src]):not([srcset]) {
visibility: hidden;
}
}
}
@layer utilities;
Minimal audio skin
'use client';
import { StatusAnnouncer as StatusAnnouncerPrimitive, Container as ContainerPrimitive, ErrorDialog, Hotkey, Tooltip, SeekButton as SeekButtonPrimitive, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, PlayButton as PlayButtonPrimitive, BufferingIndicator as BufferingIndicatorPrimitive, PlaybackRateButton as PlaybackRateButtonPrimitive, Menu, Text as TextPrimitive, PlaybackRateRadioGroup, TimeSlider, Controls, Time } from '@videojs/react';
import { Audio } from '@videojs/react/audio';
import './player.css';
import { Player } from './player';
import { type ComponentProps, type SVGProps, type ReactElement, type ReactNode, type CSSProperties } from 'react';
import { SeekIcon as SeekIconPrimitive, VolumeOffIcon as VolumeOffIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, RestartIcon as RestartIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, SpinnerIcon as SpinnerIconPrimitive, CheckIcon as CheckIconPrimitive } from '@videojs/react/icons';
import { SeekIcon as SeekIconPrimitive2, VolumeOffIcon as VolumeOffIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, RestartIcon as RestartIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, SpinnerIcon as SpinnerIconPrimitive2, CheckIcon as CheckIconPrimitive2 } from '@videojs/react/icons/minimal';
import { type VolumeSliderProps as CoreVolumeSliderProps, type MenuProps, type SliderPreviewOverflow } from '@videojs/core';
import { speedText } from '@videojs/core/i18n/text/menu';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface MinimalAudioSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
}
type AudioErrorDialogProps = Omit<ErrorDialog.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
function AudioErrorDialog({ className, ...props }: AudioErrorDialogProps = {}) {
return (
<ErrorDialog.Root>
<ErrorDialog.Backdrop className={'media-audio-dialog-backdrop'} />
<ErrorDialog.Popup
className={(state) => `media-audio-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-audio-dialog-content'}>
<ErrorDialog.Title className={'media-audio-dialog-title'} />
<ErrorDialog.Description className={'media-audio-dialog-description'} />
</div>
<div className={'media-audio-dialog-actions'}>
<ErrorDialog.Close render={<Button />} className={'media-audio-dialog-close'} />
</div>
</ErrorDialog.Popup>
</ErrorDialog.Root>
);
}
type AudioPlayButtonProps = Omit<ComponentProps<'div'>, 'children'>;
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
function AudioPlayButton({ className, ...props }: AudioPlayButtonProps = {}) {
return (
<div className={`media-audio-play-button ${className ?? ''}`} {...props}>
<BufferingIndicator className={'media-audio-play-button-buffering-indicator'} />
<PlayButton />
</div>
);
}
type SeekButtonProps = Omit<SeekButtonPrimitive.Props, 'children'>;
function SeekButton({ className, seconds = 10, ...props }: SeekButtonProps = {}) {
return (
<ButtonTooltip side="top">
<SeekButtonPrimitive
render={<Button />}
className={(state) => `media-seek-button ${resolveClassName(className, state)}`}
seconds={seconds}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SeekIconPrimitive className={`media-button-icon ${seconds < 0 && 'media-seek-button-backward-icon'}`} />
</span>
<span className="hidden theme-minimal:contents">
<SeekIconPrimitive2 className={`media-button-icon ${seconds < 0 && 'media-seek-button-backward-icon'}`} />
</span>
</>
<span
className={`media-seek-button-label ${seconds < 0 ? 'media-seek-button-backward-label' : 'media-seek-button-forward-label'}`}
>
{Math.abs(seconds)}
</span>
</SeekButtonPrimitive>
</ButtonTooltip>
);
}
interface AudioTimeSliderProps extends Omit<TimeSlider.RootProps, 'children'> {
previewOverflow?: SliderPreviewOverflow | undefined;
}
function AudioTimeSlider({ className, previewOverflow = 'clamp', ...props }: AudioTimeSliderProps = {}) {
return (
<TimeSlider.Root
className={(state) => `media-slider media-audio-time-slider ${resolveClassName(className, state)}`}
{...props}
>
<TimeSlider.Track render={<SliderTrack />}>
<TimeSlider.Buffer render={<SliderBuffer />} />
<TimeSlider.Fill render={<SliderFill />} />
</TimeSlider.Track>
<TimeSlider.Thumb render={<SliderThumb />} className={'media-audio-time-slider-thumb'} />
<TimeSlider.Preview className={'media-slider-preview'} overflow={previewOverflow}>
<div className={'media-audio-time-slider-preview-content'}>
<TimeSlider.Value className={'media-audio-time-slider-value'} type="pointer" />
</div>
</TimeSlider.Preview>
</TimeSlider.Root>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
interface AudioSettingsMenuProps extends MenuProps {
className?: ClassValue;
}
type PlaybackRateButtonProps = Omit<PlaybackRateButtonPrimitive.Props, 'children'>;
function PlaybackRateButton({ className, ...props }: PlaybackRateButtonProps = {}) {
return (
<PlaybackRateButtonPrimitive
render={<Button />}
className={(state) => `media-playback-rate-button ${resolveClassName(className, state)}`}
{...props}
/>
);
}
type RadioItemProps = Menu.RadioItemProps;
function RadioItem({ children, className, ...props }: RadioItemProps) {
return (
<Menu.RadioItem className={(state) => `media-menu-radio-item ${resolveClassName(className, state)}`} {...props}>
{children}
<Menu.ItemIndicator forceMount className={'media-menu-item-indicator'}>
<>
<span className="contents theme-minimal:hidden">
<CheckIconPrimitive className={'media-menu-radio-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CheckIconPrimitive2 className={'media-menu-radio-item-icon'} />
</span>
</>
</Menu.ItemIndicator>
</Menu.RadioItem>
);
}
function AudioSettingsMenu({ className, ...props }: AudioSettingsMenuProps = {}) {
return (
<Menu.Root side="top" align="center" boundary="viewport" {...props}>
<PlaybackRateRadioGroup.Root>
<ButtonTooltip label={<TextPrimitive token={speedText.key}>{speedText.text}</TextPrimitive>} side="top">
<Menu.Trigger render={<PlaybackRateButton />} />
</ButtonTooltip>
<Menu.Popup
className={(state) =>
`media-menu-popup media-audio-settings-menu-popup ${resolveClassName(className, state)}`
}
>
<Menu.Content className={'media-menu-content'}>
<PlaybackRateRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></PlaybackRateRadioGroup.Options>
</Menu.Content>
</Menu.Popup>
</PlaybackRateRadioGroup.Root>
</Menu.Root>
);
}
function MinimalAudioControls() {
return (
<Controls.Root visibility="always">
<Controls.Content className={'media-controls media-controls-content'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-start'}>
<AudioPlayButton />
<SeekButton seconds={-10} />
<SeekButton seconds={10} />
</Controls.Group>
<Controls.Group className={'media-time-slider-group'}>
<Time.Group className={'media-time-group'}>
<Time.Value className={'media-time-current-value'} type="current" toggle />
<Time.Separator className={'media-time-separator'} />
<Time.Value className={'media-time-duration-value'} type="duration" />
</Time.Group>
<AudioTimeSlider />
</Controls.Group>
<Controls.Group className={'media-controls-end'}>
<VolumePopover
popupClassName={'media-audio-volume-popover'}
showTooltip
side="left"
orientation="horizontal"
/>
<AudioSettingsMenu />
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface PlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function PlaybackHotkeys({ disabled = false }: PlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowRight" action="seekStep" value={5} />
<Hotkey disabled={disabled} keys="ArrowLeft" action="seekStep" value={-5} />
<Hotkey disabled={disabled} keys="l" action="seekStep" value={10} />
<Hotkey disabled={disabled} keys="j" action="seekStep" value={-10} />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
<Hotkey disabled={disabled} keys="0-9" action="seekToPercent" />
<Hotkey disabled={disabled} keys="Home" action="seekToPercent" value={0} />
<Hotkey disabled={disabled} keys="End" action="seekToPercent" value={100} />
<Hotkey disabled={disabled} keys=">" action="speedUp" />
<Hotkey disabled={disabled} keys="<" action="speedDown" />
</>
);
}
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
function MinimalAudioSkin({ children, className, ...props }: MinimalAudioSkinProps = {}) {
return (
<Container
className={`media-skin media-skin--minimal media-skin--audio media-audio-skin ${className ?? ''}`}
{...props}
>
{children}
<AudioErrorDialog />
<MinimalAudioControls />
<PlaybackHotkeys />
<StatusAnnouncer />
</Container>
);
}
const Skin = MinimalAudioSkin;
// ================================================================
// Player
// ================================================================
export interface AudioPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
}
export function MinimalAudioSkin(props: MinimalAudioSkinProps) {
return <Skin {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderBufferProps = ComponentProps<'div'>;
function SliderBuffer({ className, ...props }: SliderBufferProps) {
return <div className={`media-slider-buffer ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { audioFeatures } from '@videojs/react/audio';
export const { Player } = createPlayer({ features: audioFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 4);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 3);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: none;
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter, scale;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-time-slider-preview-content {
bottom: calc(100.0% + calc(var(--media-spacing) * 10));
left: var(--media-preview-left, var(--media-slider-pointer));
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
border-radius: calc(var(--media-spacing) * 2);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
font-size: calc(var(--media-spacing) * 3.25);
font-variant-numeric: tabular-nums;
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-audio-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-audio-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
.media-audio-time-slider-preview-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
display: none;
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-audio-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-audio-time-slider-preview-content {
color: canvastext;
background-color: canvas;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-audio-time-slider-thumb {
opacity: 0;
}
.media-audio-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-audio-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-audio-time-slider-value {
font-variant-numeric: tabular-nums;
}
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-volume-popover[data-starting-style] {
filter: none;
}
.media-audio-volume-popover[data-side="left"] {
background-image: linear-gradient(to left, var(--media-controls) 80.0%, transparent 100.0%);
padding-block: calc(var(--media-spacing) * 0);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
border-style: solid;
border-width: 0;
border-radius: 0;
padding-inline-start: calc(var(--media-spacing) * 16);
padding-inline-end: calc(var(--media-spacing) * 2);
background-color: #0000 !important;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-audio-volume-popover[data-side="left"]:after {
content: "";
display: none;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-playback-rate-button {
font-variant-numeric: tabular-nums;
}
.media-playback-rate-button:after {
content: attr(data-rate) "×";
width: 4ch;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-seek-button-backward-icon {
scale: -1 1;
}
.media-seek-button-backward-label {
left: -1px;
}
.media-seek-button-forward-label {
right: -1px;
}
.media-seek-button-label {
letter-spacing: -.05em;
font-variant-numeric: tabular-nums;
font-size: .715em;
font-weight: 500;
position: absolute;
bottom: -3px;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-settings-menu-popup {
min-width: calc(var(--media-spacing) * 0) !important;
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-controls-content {
z-index: 20;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: calc(var(--media-spacing) * 3.5);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 3);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
display: none !important;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end, .media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
.media-time-current-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: none;
}
.media-time-current-value:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color);
}
@supports (corner-shape: squircle) {
.media-time-current-value {
corner-shape: squircle;
border-radius: 1rem;
}
}
@media (prefers-reduced-motion: reduce) {
.media-time-current-value {
transition-duration: 50ms;
}
}
@container media-root (width >= 42.001rem) {
.media-time-current-value {
display: inline;
}
}
.media-time-duration-value {
font-variant-numeric: tabular-nums;
}
@container media-root (width >= 42.001rem) {
.media-time-duration-value {
color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-duration-value {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-group {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-time-separator {
display: none;
}
@container media-root (width >= 42.001rem) {
.media-time-separator {
color: currentColor;
display: inline;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-separator {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-slider-group {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 3);
flex-direction: row-reverse;
flex: 1;
display: flex;
container: media-time-controls / inline-size;
}
@container media-root (width >= 42.001rem) {
.media-time-slider-group {
flex-direction: row;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/audio-minimal.js"></script>
<link rel="stylesheet" href="./player.css">
<audio-player>
<media-container class="media-container media-skin media-skin--minimal media-skin--audio media-audio-skin">
<slot>
</slot>
<media-error-dialog class="media-audio-dialog-root">
<media-dialog-backdrop class="media-audio-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-audio-dialog-popup">
<div class="media-audio-dialog-content">
<media-dialog-title class="media-audio-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-audio-dialog-description">
</media-dialog-description>
</div>
<div class="media-audio-dialog-actions">
<media-dialog-close class="media-button media-audio-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls visibility="always">
<media-controls-content class="media-controls media-controls-content">
<media-tooltip-group>
<media-controls-group class="media-controls-start">
<div class="media-audio-play-button">
<media-buffering-indicator class="media-buffering-indicator media-audio-play-button-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-play-button class="media-button media-play-button" id="vjs-UZi5P78A-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-UZi5P78A-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</div>
<media-seek-button class="media-button media-seek-button" seconds="-10" id="vjs-UZi5P78A-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="seek" class="media-button-icon media-seek-button-backward-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="seek" class="media-button-icon media-seek-button-backward-icon">
</media-icon>
</span>
<span class="media-seek-button-label media-seek-button-backward-label">10</span>
</media-seek-button>
<media-tooltip trigger="vjs-UZi5P78A-ev-2-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-seek-button class="media-button media-seek-button" seconds="10" id="vjs-UZi5P78A-ev-3-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="seek" class="media-button-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="seek" class="media-button-icon">
</media-icon>
</span>
<span class="media-seek-button-label media-seek-button-forward-label">10</span>
</media-seek-button>
<media-tooltip trigger="vjs-UZi5P78A-ev-3-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</media-controls-group>
<media-controls-group class="media-time-slider-group">
<media-time-group class="media-time-group">
<media-time class="media-time-current-value" type="current" toggle>
</media-time>
<media-time-separator class="media-time-separator">
</media-time-separator>
<media-time class="media-time-duration-value" type="duration">
</media-time>
</media-time-group>
<media-time-slider class="media-slider media-audio-time-slider">
<media-slider-track class="media-slider-track">
<media-slider-buffer class="media-slider-buffer">
</media-slider-buffer>
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-audio-time-slider-thumb">
</media-slider-thumb>
<media-slider-preview class="media-slider-preview" overflow="clamp">
<div class="media-audio-time-slider-preview-content">
<media-slider-value class="media-audio-time-slider-value" type="pointer">
</media-slider-value>
</div>
</media-slider-preview>
</media-time-slider>
</media-controls-group>
<media-controls-group class="media-controls-end">
<media-mute-button class="media-button media-mute-button" commandfor="vjs-r-kXoY9H-q1-popup" id="vjs-UZi5P78A-ev-4-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-UZi5P78A-ev-4-trigger" delay="0" sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="left" class="media-volume-popover media-audio-volume-popover" id="vjs-r-kXoY9H-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="horizontal">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
<media-playback-rate-button commandfor="vjs-8fPsJwZP-k9-popup" id="vjs-UZi5P78A-ev-5-trigger">
</media-playback-rate-button>
<media-tooltip trigger="vjs-UZi5P78A-ev-5-trigger" side="top" class="media-tooltip">
<media-text token="menu.speed">Speed</media-text>
</media-tooltip>
<media-menu side="top" align="center" boundary="viewport" class="media-menu-popup media-audio-settings-menu-popup" id="vjs-8fPsJwZP-k9-popup">
<media-menu-content class="media-menu-content">
<media-playback-rate-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-playback-rate-radio-group>
</media-menu-content>
</media-menu>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowRight" action="seekStep" value="5">
</media-hotkey>
<media-hotkey keys="ArrowLeft" action="seekStep" value="-5">
</media-hotkey>
<media-hotkey keys="l" action="seekStep" value="10">
</media-hotkey>
<media-hotkey keys="j" action="seekStep" value="-10">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-hotkey keys="0-9" action="seekToPercent">
</media-hotkey>
<media-hotkey keys="Home" action="seekToPercent" value="0">
</media-hotkey>
<media-hotkey keys="End" action="seekToPercent" value="100">
</media-hotkey>
<media-hotkey keys=">" action="speedUp">
</media-hotkey>
<media-hotkey keys="<" action="speedDown">
</media-hotkey>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
</media-container>
</audio-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 4);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 3);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: none;
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter, scale;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-time-slider-preview-content {
bottom: calc(100.0% + calc(var(--media-spacing) * 10));
left: var(--media-preview-left, var(--media-slider-pointer));
max-width: var(--media-slider-preview-max-width);
transform-origin: bottom;
translate: -50.0% calc(var(--media-spacing) * 2);
border-radius: calc(var(--media-spacing) * 2);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
font-size: calc(var(--media-spacing) * 3.25);
font-variant-numeric: tabular-nums;
opacity: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
filter: blur(8px);
backdrop-filter: blur(16px) saturate(150%);
position: absolute;
scale: .8;
}
:where(.media-slider):has(:focus-visible) .media-audio-time-slider-preview-content, :where(.media-slider-preview)[data-pointing] .media-audio-time-slider-preview-content {
opacity: 1;
filter: none;
scale: 1;
}
.media-audio-time-slider-preview-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
display: none;
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-audio-time-slider-preview-content {
transition-property: filter, opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
@media (prefers-contrast: more) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-audio-time-slider-preview-content {
color: canvastext;
background-color: canvas;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-audio-time-slider-preview-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-audio-time-slider-preview-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-audio-time-slider-thumb {
opacity: 0;
}
.media-audio-time-slider-thumb[data-interactive] {
opacity: 1;
}
@media (pointer: fine) {
@media (hover: hover) {
@scope (.media-slider) {
&:hover .media-audio-time-slider-thumb {
opacity: 1;
scale: 1;
}
}
}
}
.media-audio-time-slider-value {
font-variant-numeric: tabular-nums;
}
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-slider-preview {
height: calc(var(--media-spacing) * 1);
--media-slider-preview-max-height: var(--media-slider-preview-max-width);
position: relative;
}
.media-slider-preview:before {
pointer-events: none;
z-index: 1;
content: "";
opacity: 0;
position: absolute;
translate: -50% -50%;
scale: .5;
}
.media-slider-preview[data-pointing]:not([data-dragging]):before {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-preview:before {
content: "";
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
min-width: var(--media-slider-preview-max-width);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):before {
width: calc(var(--media-spacing) * 1);
height: calc(var(--media-spacing) * 1);
border-radius: var(--media-control-radius);
content: "";
background-color: currentColor;
top: 50%;
left: 50%;
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-end-inset: calc(100cqi - 100.0%);
--media-preview-left: clamp(calc(var(--media-slider-preview-max-width) / 2), var(--media-slider-pointer), calc(100.0% - var(--media-slider-preview-max-width) / 2 + var(--media-preview-end-inset)));
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 28), 100cqi);
min-width: 100%;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
content: "";
background-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 35.0%, transparent);
}
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="horizontal"]:before {
top: 50%;
left: var(--media-slider-pointer);
height: calc(var(--media-spacing) * 5);
content: "";
width: 1px;
}
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *)[data-orientation="vertical"]:before {
top: calc(100.0% - var(--media-slider-pointer));
content: "";
height: 1px;
width: calc(var(--media-spacing) * 5);
left: 50%;
}
@container media-root (width >= 32rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 36), 100cqi);
}
}
@container media-root (width >= 42rem) {
.media-slider-preview:where(.media-skin--minimal, .media-skin--minimal *) {
--media-preview-left: var(--media-slider-pointer);
--media-slider-preview-max-width: min(calc(var(--media-spacing) * 48), 100cqi);
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-volume-popover[data-starting-style] {
filter: none;
}
.media-audio-volume-popover[data-side="left"] {
background-image: linear-gradient(to left, var(--media-controls) 80.0%, transparent 100.0%);
padding-block: calc(var(--media-spacing) * 0);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
border-style: solid;
border-width: 0;
border-radius: 0;
padding-inline-start: calc(var(--media-spacing) * 16);
padding-inline-end: calc(var(--media-spacing) * 2);
background-color: #0000 !important;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-audio-volume-popover[data-side="left"]:after {
content: "";
display: none;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-seek-button-backward-icon {
scale: -1 1;
}
.media-seek-button-backward-label {
left: -1px;
}
.media-seek-button-forward-label {
right: -1px;
}
.media-seek-button-label {
letter-spacing: -.05em;
font-variant-numeric: tabular-nums;
font-size: .715em;
font-weight: 500;
position: absolute;
bottom: -3px;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-audio-settings-menu-popup {
min-width: calc(var(--media-spacing) * 0) !important;
}
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-controls-content {
z-index: 20;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: calc(var(--media-spacing) * 3.5);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 3);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
display: none !important;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end, .media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
.media-time-current-value {
cursor: pointer;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
border-radius: .25rem;
outline: 2px solid #0000;
transition-property: outline-color, outline-offset;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: none;
}
.media-time-current-value:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color);
}
@supports (corner-shape: squircle) {
.media-time-current-value {
corner-shape: squircle;
border-radius: 1rem;
}
}
@media (prefers-reduced-motion: reduce) {
.media-time-current-value {
transition-duration: 50ms;
}
}
@container media-root (width >= 42.001rem) {
.media-time-current-value {
display: inline;
}
}
.media-time-duration-value {
font-variant-numeric: tabular-nums;
}
@container media-root (width >= 42.001rem) {
.media-time-duration-value {
color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-duration-value {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-group {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-time-separator {
display: none;
}
@container media-root (width >= 42.001rem) {
.media-time-separator {
color: currentColor;
display: inline;
}
@supports (color: color-mix(in lab, red, red)) {
.media-time-separator {
color: color-mix(in oklab, currentcolor 60%, transparent);
}
}
}
.media-time-slider-group {
min-width: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 3);
flex-direction: row-reverse;
flex: 1;
display: flex;
container: media-time-controls / inline-size;
}
@container media-root (width >= 42.001rem) {
.media-time-slider-group {
flex-direction: row;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--audio) {
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
}
@layer utilities;
Default live video skin
The live skins swap the duration and current-time displays for a Live button. They build on the live presets, so the player reports live-edge state.
'use client';
import { type SVGProps, type ComponentProps, type ReactElement, type ReactNode, type CSSProperties } from 'react';
import { SpinnerIcon as SpinnerIconPrimitive, CaptionsOnIcon as CaptionsOnIconPrimitive, CaptionsOffIcon as CaptionsOffIconPrimitive, FullscreenEnterIcon as FullscreenEnterIconPrimitive, FullscreenExitIcon as FullscreenExitIconPrimitive, PipEnterIcon as PipEnterIconPrimitive, PipExitIcon as PipExitIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeOffIcon as VolumeOffIconPrimitive, AirPlayEnterIcon as AirPlayEnterIconPrimitive, AirPlayExitIcon as AirPlayExitIconPrimitive, CastEnterIcon as CastEnterIconPrimitive, CastExitIcon as CastExitIconPrimitive, RestartIcon as RestartIconPrimitive, CheckIcon as CheckIconPrimitive } from '@videojs/react/icons';
import { SpinnerIcon as SpinnerIconPrimitive2, CaptionsOnIcon as CaptionsOnIconPrimitive2, CaptionsOffIcon as CaptionsOffIconPrimitive2, FullscreenEnterIcon as FullscreenEnterIconPrimitive2, FullscreenExitIcon as FullscreenExitIconPrimitive2, PipEnterIcon as PipEnterIconPrimitive2, PipExitIcon as PipExitIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeOffIcon as VolumeOffIconPrimitive2, AirPlayEnterIcon as AirPlayEnterIconPrimitive2, AirPlayExitIcon as AirPlayExitIconPrimitive2, CastEnterIcon as CastEnterIconPrimitive2, CastExitIcon as CastExitIconPrimitive2, RestartIcon as RestartIconPrimitive2, CheckIcon as CheckIconPrimitive2 } from '@videojs/react/icons/minimal';
import { BufferingIndicator as BufferingIndicatorPrimitive, ErrorDialog as ErrorDialogPrimitive, Container as ContainerPrimitive, Poster as PosterPrimitive, Gesture, Hotkey, StatusAnnouncer as StatusAnnouncerPrimitive, StatusIndicator as StatusIndicatorPrimitive, VolumeIndicator as VolumeIndicatorPrimitive, Tooltip, AirPlayButton as AirPlayButtonPrimitive, CastButton as CastButtonPrimitive, FullscreenButton as FullscreenButtonPrimitive, LiveButton as LiveButtonPrimitive, PiPButton as PiPButtonPrimitive, PlayButton as PlayButtonPrimitive, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, Menu, CaptionsRadioGroup, Controls } from '@videojs/react';
import { HlsJsVideo } from '@videojs/react/media/hlsjs-video';
import './player.css';
import { Player } from './player';
import { type VolumeSliderProps as CoreVolumeSliderProps, type MenuProps } from '@videojs/core';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface PosterProps extends Omit<PosterPrimitive.Props, 'children' | 'render'> {
children?: PosterPrimitive.Props['render'];
}
function Poster({ children, className, src, ...props }: PosterProps = {}) {
return (
<PosterPrimitive
render={children}
className={(state) => `media-poster ${resolveClassName(className, state)}`}
src={src}
{...props}
/>
);
}
interface DefaultLiveVideoSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
poster?: string | undefined;
poster?: string | NonNullable<ComponentProps<typeof Poster>>['children'];
}
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type ErrorDialogProps = Omit<ErrorDialogPrimitive.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
type LiveButtonProps = Omit<LiveButtonPrimitive.Props, 'children'>;
function LiveButton({ className, ...props }: LiveButtonProps = {}) {
return (
<LiveButtonPrimitive
render={<Button />}
className={(state) => `media-live-button ${resolveClassName(className, state)}`}
{...props}
/>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
interface CaptionsMenuProps extends MenuProps {
className?: ClassValue;
triggerClassName?: ClassValue;
}
type RadioItemProps = Menu.RadioItemProps;
function RadioItem({ children, className, ...props }: RadioItemProps) {
return (
<Menu.RadioItem className={(state) => `media-menu-radio-item ${resolveClassName(className, state)}`} {...props}>
{children}
<Menu.ItemIndicator forceMount className={'media-menu-item-indicator'}>
<>
<span className="contents theme-minimal:hidden">
<CheckIconPrimitive className={'media-menu-radio-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CheckIconPrimitive2 className={'media-menu-radio-item-icon'} />
</span>
</>
</Menu.ItemIndicator>
</Menu.RadioItem>
);
}
function CaptionsMenu({ className, triggerClassName, ...props }: CaptionsMenuProps = {}) {
return (
<Menu.Root side="top" align="center" boundary="viewport" {...props}>
<CaptionsRadioGroup.Root>
<ButtonTooltip side="top">
<Menu.Trigger
render={<Button />}
aria-label="Enable captions"
className={`media-captions-button ${triggerClassName}`}
>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-button-icon media-captions-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-button-icon media-captions-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-button-icon media-captions-button-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-button-icon media-captions-button-on-icon'} />
</span>
</>
</Menu.Trigger>
</ButtonTooltip>
<Menu.Popup className={(state) => `media-menu-popup ${resolveClassName(className, state)}`}>
<Menu.Content className={'media-menu-content'}>
<CaptionsRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></CaptionsRadioGroup.Options>
</Menu.Content>
</Menu.Popup>
</CaptionsRadioGroup.Root>
</Menu.Root>
);
}
type CastButtonProps = Omit<CastButtonPrimitive.Props, 'children'>;
function CastButton({ className, ...props }: CastButtonProps = {}) {
return (
<ButtonTooltip side="top">
<CastButtonPrimitive
render={<Button />}
className={(state) => `media-cast-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<CastEnterIconPrimitive className={'media-button-icon media-cast-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastEnterIconPrimitive2 className={'media-button-icon media-cast-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CastExitIconPrimitive className={'media-button-icon media-cast-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastExitIconPrimitive2 className={'media-button-icon media-cast-button-exit-icon'} />
</span>
</>
</CastButtonPrimitive>
</ButtonTooltip>
);
}
type AirPlayButtonProps = Omit<AirPlayButtonPrimitive.Props, 'children'>;
function AirPlayButton({ className, ...props }: AirPlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<AirPlayButtonPrimitive
render={<Button />}
className={(state) => `media-airplay-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<AirPlayEnterIconPrimitive className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayEnterIconPrimitive2 className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<AirPlayExitIconPrimitive className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayExitIconPrimitive2 className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
</>
</AirPlayButtonPrimitive>
</ButtonTooltip>
);
}
type PiPButtonProps = Omit<PiPButtonPrimitive.Props, 'children'>;
function PiPButton({ className, ...props }: PiPButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PiPButtonPrimitive
render={<Button />}
className={(state) => `media-pip-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-button-icon media-pip-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-button-icon media-pip-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-button-icon media-pip-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-button-icon media-pip-button-exit-icon'} />
</span>
</>
</PiPButtonPrimitive>
</ButtonTooltip>
);
}
type FullscreenButtonProps = Omit<FullscreenButtonPrimitive.Props, 'children'>;
function FullscreenButton({ className, ...props }: FullscreenButtonProps = {}) {
return (
<ButtonTooltip side="top">
<FullscreenButtonPrimitive
render={<Button />}
className={(state) => `media-fullscreen-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
</>
</FullscreenButtonPrimitive>
</ButtonTooltip>
);
}
function DefaultLiveVideoControls() {
return (
<Controls.Root>
<Controls.Backdrop className={'media-controls__backdrop'} />
<Controls.Content className={'media-controls media-controls'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-primary'}>
<PlayButton />
<LiveButton />
<div aria-hidden="true" className={'media-controls-spacer'} />
<VolumePopover />
<CaptionsMenu triggerClassName={'media-controls-captions-menu'} />
<CastButton />
<AirPlayButton />
<PiPButton />
<FullscreenButton />
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface LiveVideoHotkeysProps {
disabled?: boolean | undefined;
}
interface LivePlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function LivePlaybackHotkeys({ disabled = false }: LivePlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
</>
);
}
function LiveVideoHotkeys({ disabled = false }: LiveVideoHotkeysProps = {}) {
return (
<>
<LivePlaybackHotkeys disabled={disabled} />
<Hotkey disabled={disabled} keys="f" action="toggleFullscreen" />
<Hotkey disabled={disabled} keys="c" action="toggleSubtitles" />
<Hotkey disabled={disabled} keys="i" action="togglePictureInPicture" />
</>
);
}
interface LiveVideoGesturesProps {
disabled?: boolean | undefined;
}
function LiveVideoGestures({ disabled = false }: LiveVideoGesturesProps = {}) {
return (
<>
<Gesture disabled={disabled} type="tap" action="togglePaused" pointer="mouse" region="center" />
<Gesture disabled={disabled} type="tap" action="toggleControls" pointer="touch" />
<Gesture disabled={disabled} type="doubletap" action="toggleFullscreen" region="center" />
</>
);
}
type LiveVideoStatusIndicatorsProps = Omit<ComponentProps<'div'>, 'children'>;
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
type VolumeIndicatorProps = Omit<VolumeIndicatorPrimitive.RootProps, 'children'>;
function VolumeIndicator({ className, ...props }: VolumeIndicatorProps = {}) {
return (
<VolumeIndicatorPrimitive.Root
className={(state) => `media-volume-indicator ${resolveClassName(className, state)}`}
{...props}
>
<VolumeIndicatorPrimitive.Fill className={'media-volume-indicator-fill'}>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-volume-indicator-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-volume-indicator-high-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-volume-indicator-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-volume-indicator-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-volume-indicator-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-volume-indicator-off-icon'} />
</span>
</>
<VolumeIndicatorPrimitive.Value className={'media-volume-indicator-value'} />
</VolumeIndicatorPrimitive.Fill>
</VolumeIndicatorPrimitive.Root>
);
}
type StatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const TOP_STATUS_ACTIONS = ['toggleSubtitles', 'toggleFullscreen', 'togglePictureInPicture'] as const;
function StatusIndicator({ className, ...props }: StatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={TOP_STATUS_ACTIONS}
className={(state) => `media-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-status-indicator-content'}>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-status-indicator-captions-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-status-indicator-captions-on-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-status-indicator-captions-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-status-indicator-captions-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-status-indicator-pip-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-status-indicator-pip-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-status-indicator-pip-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-status-indicator-pip-exit-icon'} />
</span>
</>
<StatusIndicatorPrimitive.Value className={'media-status-indicator-value'} />
</div>
</StatusIndicatorPrimitive.Root>
);
}
type PlaybackStatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const PLAYBACK_STATUS_ACTIONS = ['togglePaused'] as const;
function PlaybackStatusIndicator({ className, ...props }: PlaybackStatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={PLAYBACK_STATUS_ACTIONS}
className={(state) => `media-playback-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-playback-status-indicator-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-playback-status-indicator-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-playback-status-indicator-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-playback-status-indicator-pause-icon'} />
</span>
</>
</StatusIndicatorPrimitive.Root>
);
}
function LiveVideoStatusIndicators({ className, ...props }: LiveVideoStatusIndicatorsProps = {}) {
return (
<>
<StatusAnnouncer />
<div className={`media-video-status-indicators ${className ?? ''}`} {...props}>
<VolumeIndicator />
<StatusIndicator />
<PlaybackStatusIndicator />
</div>
</>
);
}
function DefaultLiveVideoSkin({ children, className, poster, ...props }: DefaultLiveVideoSkinProps = {}) {
const isPosterString = typeof poster === 'string';
return (
<Container className={`media-skin media-skin--live-video ${className ?? ''}`} {...props}>
{children}
<Poster src={isPosterString ? poster : undefined}>{isPosterString ? undefined : poster}</Poster>
<BufferingIndicator />
<ErrorDialog />
<DefaultLiveVideoControls />
<LiveVideoHotkeys />
<LiveVideoGestures />
<LiveVideoStatusIndicators />
</Container>
);
}
const Skin = DefaultLiveVideoSkin;
// ================================================================
// Player
// ================================================================
export interface LiveVideoPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
renderPoster?: Poster.Props['render'];
}
export function LiveVideoSkin({ renderPoster, ...props }: LiveVideoSkinProps) {
return <Skin poster={renderPoster} {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
// ================================================================
// Error Dialog
// ================================================================
function ErrorDialog({ className, ...props }: ErrorDialogProps = {}) {
return (
<ErrorDialogPrimitive.Root>
<ErrorDialogPrimitive.Backdrop className={'media-dialog-backdrop'} />
<ErrorDialogPrimitive.Popup
className={(state) => `media-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-dialog-content'}>
<ErrorDialogPrimitive.Title className={'media-dialog-title'} />
<ErrorDialogPrimitive.Description className={'media-dialog-description'} />
</div>
<div className={'media-dialog-actions'}>
<ErrorDialogPrimitive.Close render={<Button />} className={'media-dialog-close'} />
</div>
</ErrorDialogPrimitive.Popup>
</ErrorDialogPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { liveVideoFeatures } from '@videojs/react/live-video';
export const { Player } = createPlayer({ features: liveVideoFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--live-video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--live-video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--live-video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--live-video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--live-video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--live-video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--live-video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--live-video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--live-video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--live-video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--live-video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-controls {
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: .75rem;
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: contents;
}
@container media-root (width >= 32rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
align-items: center;
gap: 1px;
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
.media-controls:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 3);
bottom: calc(var(--media-spacing) * 3);
}
}
@container media-root (width >= 32rem) {
@media (forced-colors: active) {
.media-controls {
color: canvastext;
background-color: canvas;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
background-image: linear-gradient(to top, oklab(0% none none / .5) 0%, oklab(0% none none / .3) 25%, #0000 100%);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
@container media-root (width < 32rem) {
.media-controls-captions-menu {
display: none;
}
}
.media-controls-primary {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
transform-origin: bottom;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
align-items: center;
gap: 1px;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls-primary:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width < 32rem) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
}
}
@container media-root (width >= 32rem) {
.media-controls-primary {
backdrop-filter: none;
background-color: #0000;
border-radius: 0;
display: contents;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000;
}
.media-controls-primary:after {
content: "";
display: none;
}
}
@media (forced-colors: active) {
.media-controls-primary {
color: canvastext;
background-color: canvas;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@container media-root (width < 32rem) {
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
filter: blur(8px);
}
}
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-spacer {
flex: 1;
}
}
@scope (.media-skin--live-video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]) {
visibility: hidden;
}
}
@scope (.media-skin--live-video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--live-video) {
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/live-video.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/media/hlsjs-video.js"></script>
<link rel="stylesheet" href="./player.css">
<live-video-player poster="https://image.mux.com/v69RSHhFelSm4701snP22dYz2jICy4E4FUyk02rW4gxRM/thumbnail.webp">
<media-container class="media-container media-skin media-skin--live-video">
<slot>
</slot>
<media-poster class="media-poster">
<img alt="" decoding="async" />
</media-poster>
<media-buffering-indicator class="media-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-error-dialog class="media-dialog-root">
<media-dialog-backdrop class="media-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-dialog-popup">
<div class="media-dialog-content">
<media-dialog-title class="media-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-dialog-description">
</media-dialog-description>
</div>
<div class="media-dialog-actions">
<media-dialog-close class="media-button media-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls>
<media-controls-backdrop class="media-controls__backdrop">
</media-controls-backdrop>
<media-controls-content class="media-controls media-controls">
<media-tooltip-group>
<media-controls-group class="media-controls-primary">
<media-play-button class="media-button media-play-button" id="vjs-yjy2eOcg-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-live-button class="media-button media-live-button">
</media-live-button>
<div aria-hidden="true" class="media-controls-spacer">
</div>
<media-mute-button class="media-button media-mute-button" commandfor="vjs-Mbw9SQuc-q1-popup" id="vjs-yjy2eOcg-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-2-trigger" delay="0" disabled sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="top" class="media-volume-popover" id="vjs-Mbw9SQuc-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="vertical">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
<button commandfor="vjs-M2vTTHCL-zr-popup" aria-label="Enable captions" class="media-button media-captions-button media-controls-captions-menu" id="vjs-yjy2eOcg-ev-3-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
</button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-3-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-menu side="top" align="center" boundary="viewport" class="media-menu-popup" id="vjs-M2vTTHCL-zr-popup">
<media-menu-content class="media-menu-content">
<media-captions-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-captions-radio-group>
</media-menu-content>
</media-menu>
<media-cast-button class="media-button media-cast-button" id="vjs-yjy2eOcg-ev-4-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
</media-cast-button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-4-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-airplay-button class="media-button media-airplay-button" id="vjs-yjy2eOcg-ev-5-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
</media-airplay-button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-5-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-pip-button class="media-button media-pip-button" id="vjs-yjy2eOcg-ev-6-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
</media-pip-button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-6-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-fullscreen-button class="media-button media-fullscreen-button" id="vjs-yjy2eOcg-ev-7-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
</media-fullscreen-button>
<media-tooltip trigger="vjs-yjy2eOcg-ev-7-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-hotkey keys="f" action="toggleFullscreen">
</media-hotkey>
<media-hotkey keys="c" action="toggleSubtitles">
</media-hotkey>
<media-hotkey keys="i" action="togglePictureInPicture">
</media-hotkey>
<media-gesture type="tap" action="togglePaused" pointer="mouse" region="center">
</media-gesture>
<media-gesture type="tap" action="toggleControls" pointer="touch">
</media-gesture>
<media-gesture type="doubletap" action="toggleFullscreen" region="center">
</media-gesture>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
<div class="media-video-status-indicators">
<media-volume-indicator class="media-volume-indicator">
<media-volume-indicator-fill class="media-volume-indicator-fill">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<media-volume-indicator-value class="media-volume-indicator-value">
</media-volume-indicator-value>
</media-volume-indicator-fill>
</media-volume-indicator>
<media-status-indicator actions="toggleSubtitles,toggleFullscreen,togglePictureInPicture" class="media-status-indicator">
<div class="media-status-indicator-content">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<media-status-indicator-value class="media-status-indicator-value">
</media-status-indicator-value>
</div>
</media-status-indicator>
<media-status-indicator actions="togglePaused" class="media-playback-status-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
</media-status-indicator>
</div>
</media-container>
</live-video-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--live-video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--live-video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--live-video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster ::slotted(img) {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster ::slotted(img:not([src]):not([srcset])) {
visibility: hidden;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]), .media-poster > slot > img:not([src]):not([srcset]) {
visibility: hidden;
}
}
@scope (.media-skin--live-video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--live-video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--live-video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--live-video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--live-video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--live-video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--live-video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--live-video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--live-video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-controls {
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: .75rem;
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: contents;
}
@container media-root (width >= 32rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
align-items: center;
gap: 1px;
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
.media-controls:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 3);
bottom: calc(var(--media-spacing) * 3);
}
}
@container media-root (width >= 32rem) {
@media (forced-colors: active) {
.media-controls {
color: canvastext;
background-color: canvas;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
background-image: linear-gradient(to top, oklab(0% none none / .5) 0%, oklab(0% none none / .3) 25%, #0000 100%);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
@container media-root (width < 32rem) {
.media-controls-captions-menu {
display: none;
}
}
.media-controls-primary {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
z-index: 10;
transform-origin: bottom;
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
transition-property: filter, opacity, scale, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
align-items: center;
gap: 1px;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls-primary:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@container media-root (width < 32rem) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
translate: 0 calc(var(--media-spacing) * 1);
scale: .95;
}
}
}
}
@container media-root (width >= 32rem) {
.media-controls-primary {
backdrop-filter: none;
background-color: #0000;
border-radius: 0;
display: contents;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000;
}
.media-controls-primary:after {
content: "";
display: none;
}
}
@media (forced-colors: active) {
.media-controls-primary {
color: canvastext;
background-color: canvas;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@container media-root (width < 32rem) {
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
@scope (.media-controls) {
&:not([data-visible]) .media-controls-primary {
filter: blur(8px);
}
}
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-primary {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-primary:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-spacer {
flex: 1;
}
}
@scope (.media-skin--live-video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--live-video) {
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
@scope (.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
}
@layer utilities;
Default live audio skin
'use client';
import { StatusAnnouncer as StatusAnnouncerPrimitive, Container as ContainerPrimitive, ErrorDialog, Hotkey, LiveButton as LiveButtonPrimitive, Tooltip, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, PlayButton as PlayButtonPrimitive, BufferingIndicator as BufferingIndicatorPrimitive, Controls } from '@videojs/react';
import { MuxAudio } from '@videojs/react/media/mux-audio';
import './player.css';
import { Player } from './player';
import { type ComponentProps, type ReactElement, type ReactNode, type SVGProps, type CSSProperties } from 'react';
import { VolumeOffIcon as VolumeOffIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, RestartIcon as RestartIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, SpinnerIcon as SpinnerIconPrimitive } from '@videojs/react/icons';
import { VolumeOffIcon as VolumeOffIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, RestartIcon as RestartIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, SpinnerIcon as SpinnerIconPrimitive2 } from '@videojs/react/icons/minimal';
import { type VolumeSliderProps as CoreVolumeSliderProps } from '@videojs/core';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface DefaultLiveAudioSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
}
type AudioErrorDialogProps = Omit<ErrorDialog.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
function AudioErrorDialog({ className, ...props }: AudioErrorDialogProps = {}) {
return (
<ErrorDialog.Root>
<ErrorDialog.Backdrop className={'media-audio-dialog-backdrop'} />
<ErrorDialog.Popup
className={(state) => `media-audio-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-audio-dialog-content'}>
<ErrorDialog.Title className={'media-audio-dialog-title'} />
<ErrorDialog.Description className={'media-audio-dialog-description'} />
</div>
<div className={'media-audio-dialog-actions'}>
<ErrorDialog.Close render={<Button />} className={'media-audio-dialog-close'} />
</div>
</ErrorDialog.Popup>
</ErrorDialog.Root>
);
}
type AudioPlayButtonProps = Omit<ComponentProps<'div'>, 'children'>;
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
function AudioPlayButton({ className, ...props }: AudioPlayButtonProps = {}) {
return (
<div className={`media-audio-play-button ${className ?? ''}`} {...props}>
<BufferingIndicator className={'media-audio-play-button-buffering-indicator'} />
<PlayButton />
</div>
);
}
type LiveButtonProps = Omit<LiveButtonPrimitive.Props, 'children'>;
function LiveButton({ className, ...props }: LiveButtonProps = {}) {
return (
<LiveButtonPrimitive
render={<Button />}
className={(state) => `media-live-button ${resolveClassName(className, state)}`}
{...props}
/>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
function DefaultLiveAudioControls() {
return (
<Controls.Root visibility="always">
<Controls.Content className={'media-controls media-controls-content'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-start'}>
<AudioPlayButton />
<LiveButton />
</Controls.Group>
<div aria-hidden="true" className={'media-controls-spacer'} />
<Controls.Group className={'media-controls-end'}>
<VolumePopover />
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface LivePlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function LivePlaybackHotkeys({ disabled = false }: LivePlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
</>
);
}
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
function DefaultLiveAudioSkin({ children, className, ...props }: DefaultLiveAudioSkinProps = {}) {
return (
<Container className={`media-skin media-skin--live-audio media-audio-skin ${className ?? ''}`} {...props}>
{children}
<AudioErrorDialog />
<DefaultLiveAudioControls />
<LivePlaybackHotkeys />
<StatusAnnouncer />
</Container>
);
}
const Skin = DefaultLiveAudioSkin;
// ================================================================
// Player
// ================================================================
export interface LiveAudioPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
}
export function LiveAudioSkin(props: LiveAudioSkinProps) {
return <Skin {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { liveAudioFeatures } from '@videojs/react/live-audio';
export const { Player } = createPlayer({ features: liveAudioFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--live-audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 3);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 5);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--live-audio) {
.media-controls-content {
z-index: 20;
border-radius: var(--media-control-radius);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
align-items: center;
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end {
align-items: center;
gap: 1px;
display: flex;
}
.media-controls-spacer {
flex: 1;
}
.media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
}
@scope (.media-skin--live-audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--live-audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--live-audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--live-audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--live-audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--live-audio) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--live-audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--live-audio) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--live-audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--live-audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--live-audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--live-audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/live-audio.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/media/mux-audio.js"></script>
<link rel="stylesheet" href="./player.css">
<live-audio-player>
<media-container class="media-container media-skin media-skin--live-audio media-audio-skin">
<slot>
</slot>
<media-error-dialog class="media-audio-dialog-root">
<media-dialog-backdrop class="media-audio-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-audio-dialog-popup">
<div class="media-audio-dialog-content">
<media-dialog-title class="media-audio-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-audio-dialog-description">
</media-dialog-description>
</div>
<div class="media-audio-dialog-actions">
<media-dialog-close class="media-button media-audio-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls visibility="always">
<media-controls-content class="media-controls media-controls-content">
<media-tooltip-group>
<media-controls-group class="media-controls-start">
<div class="media-audio-play-button">
<media-buffering-indicator class="media-buffering-indicator media-audio-play-button-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-play-button class="media-button media-play-button" id="vjs-h9sGcDi3-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-h9sGcDi3-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</div>
<media-live-button class="media-button media-live-button">
</media-live-button>
</media-controls-group>
<div aria-hidden="true" class="media-controls-spacer">
</div>
<media-controls-group class="media-controls-end">
<media-mute-button class="media-button media-mute-button" commandfor="vjs-GlyGgBq9-q1-popup" id="vjs-h9sGcDi3-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-h9sGcDi3-ev-2-trigger" delay="0" disabled sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="top" class="media-volume-popover" id="vjs-GlyGgBq9-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="vertical">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
</media-container>
</live-audio-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--live-audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 3);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 5);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--live-audio) {
.media-controls-content {
z-index: 20;
border-radius: var(--media-control-radius);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
align-items: center;
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end {
align-items: center;
gap: 1px;
display: flex;
}
.media-controls-spacer {
flex: 1;
}
.media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
}
@scope (.media-skin--live-audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--live-audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--live-audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--live-audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--live-audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--live-audio) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--live-audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--live-audio) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--live-audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--live-audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--live-audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--live-audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--live-audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
}
@layer utilities;
Minimal live video skin
'use client';
import { type SVGProps, type ComponentProps, type ReactElement, type ReactNode, type CSSProperties } from 'react';
import { SpinnerIcon as SpinnerIconPrimitive, CaptionsOnIcon as CaptionsOnIconPrimitive, CaptionsOffIcon as CaptionsOffIconPrimitive, FullscreenEnterIcon as FullscreenEnterIconPrimitive, FullscreenExitIcon as FullscreenExitIconPrimitive, PipEnterIcon as PipEnterIconPrimitive, PipExitIcon as PipExitIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeOffIcon as VolumeOffIconPrimitive, AirPlayEnterIcon as AirPlayEnterIconPrimitive, AirPlayExitIcon as AirPlayExitIconPrimitive, CastEnterIcon as CastEnterIconPrimitive, CastExitIcon as CastExitIconPrimitive, RestartIcon as RestartIconPrimitive, CheckIcon as CheckIconPrimitive } from '@videojs/react/icons';
import { SpinnerIcon as SpinnerIconPrimitive2, CaptionsOnIcon as CaptionsOnIconPrimitive2, CaptionsOffIcon as CaptionsOffIconPrimitive2, FullscreenEnterIcon as FullscreenEnterIconPrimitive2, FullscreenExitIcon as FullscreenExitIconPrimitive2, PipEnterIcon as PipEnterIconPrimitive2, PipExitIcon as PipExitIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeOffIcon as VolumeOffIconPrimitive2, AirPlayEnterIcon as AirPlayEnterIconPrimitive2, AirPlayExitIcon as AirPlayExitIconPrimitive2, CastEnterIcon as CastEnterIconPrimitive2, CastExitIcon as CastExitIconPrimitive2, RestartIcon as RestartIconPrimitive2, CheckIcon as CheckIconPrimitive2 } from '@videojs/react/icons/minimal';
import { BufferingIndicator as BufferingIndicatorPrimitive, ErrorDialog as ErrorDialogPrimitive, Container as ContainerPrimitive, Poster as PosterPrimitive, Gesture, Hotkey, StatusAnnouncer as StatusAnnouncerPrimitive, StatusIndicator as StatusIndicatorPrimitive, VolumeIndicator as VolumeIndicatorPrimitive, Tooltip, AirPlayButton as AirPlayButtonPrimitive, CastButton as CastButtonPrimitive, FullscreenButton as FullscreenButtonPrimitive, LiveButton as LiveButtonPrimitive, PiPButton as PiPButtonPrimitive, PlayButton as PlayButtonPrimitive, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, Menu, CaptionsRadioGroup, Controls } from '@videojs/react';
import { HlsJsVideo } from '@videojs/react/media/hlsjs-video';
import './player.css';
import { Player } from './player';
import { type VolumeSliderProps as CoreVolumeSliderProps, type MenuProps } from '@videojs/core';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface PosterProps extends Omit<PosterPrimitive.Props, 'children' | 'render'> {
children?: PosterPrimitive.Props['render'];
}
function Poster({ children, className, src, ...props }: PosterProps = {}) {
return (
<PosterPrimitive
render={children}
className={(state) => `media-poster ${resolveClassName(className, state)}`}
src={src}
{...props}
/>
);
}
interface MinimalLiveVideoSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
poster?: string | undefined;
poster?: string | NonNullable<ComponentProps<typeof Poster>>['children'];
}
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type ErrorDialogProps = Omit<ErrorDialogPrimitive.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
type LiveButtonProps = Omit<LiveButtonPrimitive.Props, 'children'>;
function LiveButton({ className, ...props }: LiveButtonProps = {}) {
return (
<LiveButtonPrimitive
render={<Button />}
className={(state) => `media-live-button ${resolveClassName(className, state)}`}
{...props}
/>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
interface CaptionsMenuProps extends MenuProps {
className?: ClassValue;
triggerClassName?: ClassValue;
}
type RadioItemProps = Menu.RadioItemProps;
function RadioItem({ children, className, ...props }: RadioItemProps) {
return (
<Menu.RadioItem className={(state) => `media-menu-radio-item ${resolveClassName(className, state)}`} {...props}>
{children}
<Menu.ItemIndicator forceMount className={'media-menu-item-indicator'}>
<>
<span className="contents theme-minimal:hidden">
<CheckIconPrimitive className={'media-menu-radio-item-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CheckIconPrimitive2 className={'media-menu-radio-item-icon'} />
</span>
</>
</Menu.ItemIndicator>
</Menu.RadioItem>
);
}
function CaptionsMenu({ className, triggerClassName, ...props }: CaptionsMenuProps = {}) {
return (
<Menu.Root side="top" align="center" boundary="viewport" {...props}>
<CaptionsRadioGroup.Root>
<ButtonTooltip side="top">
<Menu.Trigger
render={<Button />}
aria-label="Enable captions"
className={`media-captions-button ${triggerClassName}`}
>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-button-icon media-captions-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-button-icon media-captions-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-button-icon media-captions-button-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-button-icon media-captions-button-on-icon'} />
</span>
</>
</Menu.Trigger>
</ButtonTooltip>
<Menu.Popup className={(state) => `media-menu-popup ${resolveClassName(className, state)}`}>
<Menu.Content className={'media-menu-content'}>
<CaptionsRadioGroup.Options
className={'media-menu-radio-group'}
renderItem={(props, item) => (
<RadioItem {...props}>
<span>{item.label}</span>
</RadioItem>
)}
></CaptionsRadioGroup.Options>
</Menu.Content>
</Menu.Popup>
</CaptionsRadioGroup.Root>
</Menu.Root>
);
}
type CastButtonProps = Omit<CastButtonPrimitive.Props, 'children'>;
function CastButton({ className, ...props }: CastButtonProps = {}) {
return (
<ButtonTooltip side="top">
<CastButtonPrimitive
render={<Button />}
className={(state) => `media-cast-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<CastEnterIconPrimitive className={'media-button-icon media-cast-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastEnterIconPrimitive2 className={'media-button-icon media-cast-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CastExitIconPrimitive className={'media-button-icon media-cast-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CastExitIconPrimitive2 className={'media-button-icon media-cast-button-exit-icon'} />
</span>
</>
</CastButtonPrimitive>
</ButtonTooltip>
);
}
type AirPlayButtonProps = Omit<AirPlayButtonPrimitive.Props, 'children'>;
function AirPlayButton({ className, ...props }: AirPlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<AirPlayButtonPrimitive
render={<Button />}
className={(state) => `media-airplay-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<AirPlayEnterIconPrimitive className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayEnterIconPrimitive2 className={'media-button-icon media-airplay-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<AirPlayExitIconPrimitive className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<AirPlayExitIconPrimitive2 className={'media-button-icon media-airplay-button-exit-icon'} />
</span>
</>
</AirPlayButtonPrimitive>
</ButtonTooltip>
);
}
type PiPButtonProps = Omit<PiPButtonPrimitive.Props, 'children'>;
function PiPButton({ className, ...props }: PiPButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PiPButtonPrimitive
render={<Button />}
className={(state) => `media-pip-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-button-icon media-pip-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-button-icon media-pip-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-button-icon media-pip-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-button-icon media-pip-button-exit-icon'} />
</span>
</>
</PiPButtonPrimitive>
</ButtonTooltip>
);
}
type FullscreenButtonProps = Omit<FullscreenButtonPrimitive.Props, 'children'>;
function FullscreenButton({ className, ...props }: FullscreenButtonProps = {}) {
return (
<ButtonTooltip side="top">
<FullscreenButtonPrimitive
render={<Button />}
className={(state) => `media-fullscreen-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-button-icon media-fullscreen-button-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-button-icon media-fullscreen-button-exit-icon'} />
</span>
</>
</FullscreenButtonPrimitive>
</ButtonTooltip>
);
}
function MinimalLiveVideoControls() {
return (
<Controls.Root>
<Controls.Backdrop className={'media-controls__backdrop'} />
<Controls.Content className={'media-controls media-controls'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-start'}>
<PlayButton />
<LiveButton />
<VolumePopover showTooltip side="right" orientation="horizontal" />
</Controls.Group>
<div aria-hidden="true" className={'media-controls-spacer'} />
<Controls.Group className={'media-controls-end'}>
<CaptionsMenu />
<CastButton />
<AirPlayButton />
<PiPButton />
<FullscreenButton />
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface LiveVideoHotkeysProps {
disabled?: boolean | undefined;
}
interface LivePlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function LivePlaybackHotkeys({ disabled = false }: LivePlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
</>
);
}
function LiveVideoHotkeys({ disabled = false }: LiveVideoHotkeysProps = {}) {
return (
<>
<LivePlaybackHotkeys disabled={disabled} />
<Hotkey disabled={disabled} keys="f" action="toggleFullscreen" />
<Hotkey disabled={disabled} keys="c" action="toggleSubtitles" />
<Hotkey disabled={disabled} keys="i" action="togglePictureInPicture" />
</>
);
}
interface LiveVideoGesturesProps {
disabled?: boolean | undefined;
}
function LiveVideoGestures({ disabled = false }: LiveVideoGesturesProps = {}) {
return (
<>
<Gesture disabled={disabled} type="tap" action="togglePaused" pointer="mouse" region="center" />
<Gesture disabled={disabled} type="tap" action="toggleControls" pointer="touch" />
<Gesture disabled={disabled} type="doubletap" action="toggleFullscreen" region="center" />
</>
);
}
type LiveVideoStatusIndicatorsProps = Omit<ComponentProps<'div'>, 'children'>;
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
type VolumeIndicatorProps = Omit<VolumeIndicatorPrimitive.RootProps, 'children'>;
function VolumeIndicator({ className, ...props }: VolumeIndicatorProps = {}) {
return (
<VolumeIndicatorPrimitive.Root
className={(state) => `media-volume-indicator ${resolveClassName(className, state)}`}
{...props}
>
<VolumeIndicatorPrimitive.Fill className={'media-volume-indicator-fill'}>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-volume-indicator-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-volume-indicator-high-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-volume-indicator-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-volume-indicator-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-volume-indicator-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-volume-indicator-off-icon'} />
</span>
</>
<VolumeIndicatorPrimitive.Value className={'media-volume-indicator-value'} />
</VolumeIndicatorPrimitive.Fill>
</VolumeIndicatorPrimitive.Root>
);
}
type StatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const TOP_STATUS_ACTIONS = ['toggleSubtitles', 'toggleFullscreen', 'togglePictureInPicture'] as const;
function StatusIndicator({ className, ...props }: StatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={TOP_STATUS_ACTIONS}
className={(state) => `media-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-status-indicator-content'}>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOnIconPrimitive className={'media-status-indicator-captions-on-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOnIconPrimitive2 className={'media-status-indicator-captions-on-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<CaptionsOffIconPrimitive className={'media-status-indicator-captions-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<CaptionsOffIconPrimitive2 className={'media-status-indicator-captions-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenEnterIconPrimitive className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenEnterIconPrimitive2 className={'media-status-indicator-fullscreen-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<FullscreenExitIconPrimitive className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<FullscreenExitIconPrimitive2 className={'media-status-indicator-fullscreen-exit-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipEnterIconPrimitive className={'media-status-indicator-pip-enter-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipEnterIconPrimitive2 className={'media-status-indicator-pip-enter-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PipExitIconPrimitive className={'media-status-indicator-pip-exit-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PipExitIconPrimitive2 className={'media-status-indicator-pip-exit-icon'} />
</span>
</>
<StatusIndicatorPrimitive.Value className={'media-status-indicator-value'} />
</div>
</StatusIndicatorPrimitive.Root>
);
}
type PlaybackStatusIndicatorProps = Omit<StatusIndicatorPrimitive.RootProps, 'children'>;
const PLAYBACK_STATUS_ACTIONS = ['togglePaused'] as const;
function PlaybackStatusIndicator({ className, ...props }: PlaybackStatusIndicatorProps = {}) {
return (
<StatusIndicatorPrimitive.Root
actions={PLAYBACK_STATUS_ACTIONS}
className={(state) => `media-playback-status-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-playback-status-indicator-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-playback-status-indicator-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-playback-status-indicator-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-playback-status-indicator-pause-icon'} />
</span>
</>
</StatusIndicatorPrimitive.Root>
);
}
function LiveVideoStatusIndicators({ className, ...props }: LiveVideoStatusIndicatorsProps = {}) {
return (
<>
<StatusAnnouncer />
<div className={`media-video-status-indicators ${className ?? ''}`} {...props}>
<VolumeIndicator />
<StatusIndicator />
<PlaybackStatusIndicator />
</div>
</>
);
}
function MinimalLiveVideoSkin({ children, className, poster, ...props }: MinimalLiveVideoSkinProps = {}) {
const isPosterString = typeof poster === 'string';
return (
<Container className={`media-skin media-skin--minimal media-skin--live-video ${className ?? ''}`} {...props}>
{children}
<Poster src={isPosterString ? poster : undefined}>{isPosterString ? undefined : poster}</Poster>
<BufferingIndicator />
<ErrorDialog />
<MinimalLiveVideoControls />
<LiveVideoHotkeys />
<LiveVideoGestures />
<LiveVideoStatusIndicators />
</Container>
);
}
const Skin = MinimalLiveVideoSkin;
// ================================================================
// Player
// ================================================================
export interface LiveVideoPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
renderPoster?: Poster.Props['render'];
}
export function MinimalLiveVideoSkin({ renderPoster, ...props }: MinimalLiveVideoSkinProps) {
return <Skin poster={renderPoster} {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
// ================================================================
// Error Dialog
// ================================================================
function ErrorDialog({ className, ...props }: ErrorDialogProps = {}) {
return (
<ErrorDialogPrimitive.Root>
<ErrorDialogPrimitive.Backdrop className={'media-dialog-backdrop'} />
<ErrorDialogPrimitive.Popup
className={(state) => `media-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-dialog-content'}>
<ErrorDialogPrimitive.Title className={'media-dialog-title'} />
<ErrorDialogPrimitive.Description className={'media-dialog-description'} />
</div>
<div className={'media-dialog-actions'}>
<ErrorDialogPrimitive.Close render={<Button />} className={'media-dialog-close'} />
</div>
</ErrorDialogPrimitive.Popup>
</ErrorDialogPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { liveVideoFeatures } from '@videojs/react/live-video';
export const { Player } = createPlayer({ features: liveVideoFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 1);
bottom: calc(var(--media-spacing) * 1);
z-index: 20;
align-items: center;
column-gap: calc(var(--media-spacing) * 2);
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 5);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
background-color: #0000;
border-radius: .75rem;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 100%;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: #000;
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: #000;
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
background-image: linear-gradient(to top, oklab(0% none none / .7) 0.0%, oklab(0% none none / .5) calc(var(--media-spacing) * 30), transparent 100.0%);
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
.media-controls-end {
align-items: center;
gap: 1px;
transition: mask-position 50ms ease-out;
display: flex;
mask-position: 100% 0;
mask-size: 400% 100%;
mask-repeat: no-repeat;
}
@scope (.media-controls) {
&:has([data-volume-level][aria-expanded="true"]) .media-controls-end {
mask-image: linear-gradient(to right, #0000 10%, #000 25% 100%);
mask-position: 0 0;
}
}
.media-controls-spacer {
flex: 1;
}
.media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]) {
visibility: hidden;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/live-video-minimal.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/media/hlsjs-video.js"></script>
<link rel="stylesheet" href="./player.css">
<live-video-player poster="https://image.mux.com/v69RSHhFelSm4701snP22dYz2jICy4E4FUyk02rW4gxRM/thumbnail.webp">
<media-container class="media-container media-skin media-skin--minimal media-skin--live-video">
<slot>
</slot>
<media-poster class="media-poster">
<img alt="" decoding="async" />
</media-poster>
<media-buffering-indicator class="media-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-error-dialog class="media-dialog-root">
<media-dialog-backdrop class="media-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-dialog-popup">
<div class="media-dialog-content">
<media-dialog-title class="media-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-dialog-description">
</media-dialog-description>
</div>
<div class="media-dialog-actions">
<media-dialog-close class="media-button media-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls>
<media-controls-backdrop class="media-controls__backdrop">
</media-controls-backdrop>
<media-controls-content class="media-controls media-controls">
<media-tooltip-group>
<media-controls-group class="media-controls-start">
<media-play-button class="media-button media-play-button" id="vjs-FgWNhaGF-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-live-button class="media-button media-live-button">
</media-live-button>
<media-mute-button class="media-button media-mute-button" commandfor="vjs-gCaBPTLY-q1-popup" id="vjs-FgWNhaGF-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-2-trigger" delay="0" sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="right" class="media-volume-popover" id="vjs-gCaBPTLY-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="horizontal">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
</media-controls-group>
<div aria-hidden="true" class="media-controls-spacer">
</div>
<media-controls-group class="media-controls-end">
<button commandfor="vjs-VdSu30vL-zr-popup" aria-label="Enable captions" class="media-button media-captions-button" id="vjs-FgWNhaGF-ev-3-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-button-icon media-captions-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-button-icon media-captions-button-on-icon">
</media-icon>
</span>
</button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-3-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-menu side="top" align="center" boundary="viewport" class="media-menu-popup" id="vjs-VdSu30vL-zr-popup">
<media-menu-content class="media-menu-content">
<media-captions-radio-group class="media-menu-radio-group">
<template>
<media-menu-radio-item class="media-menu-radio-item">
<span data-part="label">
</span>
<media-menu-item-indicator force-mount class="media-menu-item-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="check" class="media-menu-radio-item-icon">
</media-icon>
</span>
</media-menu-item-indicator>
</media-menu-radio-item>
</template>
</media-captions-radio-group>
</media-menu-content>
</media-menu>
<media-cast-button class="media-button media-cast-button" id="vjs-FgWNhaGF-ev-4-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-enter" class="media-button-icon media-cast-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="cast-exit" class="media-button-icon media-cast-button-exit-icon">
</media-icon>
</span>
</media-cast-button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-4-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-airplay-button class="media-button media-airplay-button" id="vjs-FgWNhaGF-ev-5-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-enter" class="media-button-icon media-airplay-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="airplay-exit" class="media-button-icon media-airplay-button-exit-icon">
</media-icon>
</span>
</media-airplay-button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-5-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-pip-button class="media-button media-pip-button" id="vjs-FgWNhaGF-ev-6-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-button-icon media-pip-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-button-icon media-pip-button-exit-icon">
</media-icon>
</span>
</media-pip-button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-6-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-fullscreen-button class="media-button media-fullscreen-button" id="vjs-FgWNhaGF-ev-7-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-button-icon media-fullscreen-button-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-button-icon media-fullscreen-button-exit-icon">
</media-icon>
</span>
</media-fullscreen-button>
<media-tooltip trigger="vjs-FgWNhaGF-ev-7-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-hotkey keys="f" action="toggleFullscreen">
</media-hotkey>
<media-hotkey keys="c" action="toggleSubtitles">
</media-hotkey>
<media-hotkey keys="i" action="togglePictureInPicture">
</media-hotkey>
<media-gesture type="tap" action="togglePaused" pointer="mouse" region="center">
</media-gesture>
<media-gesture type="tap" action="toggleControls" pointer="touch">
</media-gesture>
<media-gesture type="doubletap" action="toggleFullscreen" region="center">
</media-gesture>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
<div class="media-video-status-indicators">
<media-volume-indicator class="media-volume-indicator">
<media-volume-indicator-fill class="media-volume-indicator-fill">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-volume-indicator-high-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-volume-indicator-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-volume-indicator-off-icon">
</media-icon>
</span>
<media-volume-indicator-value class="media-volume-indicator-value">
</media-volume-indicator-value>
</media-volume-indicator-fill>
</media-volume-indicator>
<media-status-indicator actions="toggleSubtitles,toggleFullscreen,togglePictureInPicture" class="media-status-indicator">
<div class="media-status-indicator-content">
<span class="contents theme-minimal:hidden">
<media-icon name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-on" class="media-status-indicator-captions-on-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="captions-off" class="media-status-indicator-captions-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-enter" class="media-status-indicator-fullscreen-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="fullscreen-exit" class="media-status-indicator-fullscreen-exit-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-enter" class="media-status-indicator-pip-enter-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pip-exit" class="media-status-indicator-pip-exit-icon">
</media-icon>
</span>
<media-status-indicator-value class="media-status-indicator-value">
</media-status-indicator-value>
</div>
</media-status-indicator>
<media-status-indicator actions="togglePaused" class="media-playback-status-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-playback-status-indicator-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-playback-status-indicator-pause-icon">
</media-icon>
</span>
</media-status-indicator>
</div>
</media-container>
</live-video-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-menu-content {
max-height: inherit;
overscroll-behavior: none;
transition-property: translate, filter;
transition-duration: var(--media-menu-transition-duration);
anchor-scope: --media-menu-item-highlight-anchor;
outline-style: none;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
overflow: auto;
}
.media-menu-content:not([data-submenu]) {
inset-inline: calc(var(--media-spacing) * 1);
top: calc(var(--media-spacing) * 1);
gap: calc(var(--media-spacing) * .5);
flex-direction: column;
display: flex;
}
.media-menu-content[data-submenu] {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
z-index: 10;
max-height: inherit;
padding: calc(var(--media-spacing) * 1);
}
.media-menu-content[data-submenu][data-ending-style], .media-menu-content[data-submenu][data-starting-style] {
pointer-events: none;
filter: blur(8px);
overflow: hidden;
translate: 100%;
}
.media-menu-content:not([data-submenu])[data-child-open] {
filter: blur(8px);
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:before {
content: "";
display: none;
}
@supports (top: anchor(top)) {
.media-menu-content:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-content:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
.media-menu-content[data-submenu][data-ending-style]:dir(rtl), .media-menu-content[data-submenu][data-starting-style]:dir(rtl) {
translate: -100%;
}
.media-menu-content:not([data-submenu])[data-child-open]:dir(rtl) {
translate: 100%;
}
.media-menu-popup {
margin: calc(var(--media-spacing) * 0);
height: var(--media-menu-height);
max-height: min(var(--media-menu-available-height, calc(var(--media-spacing) * 56)), calc(var(--media-spacing) * 56));
width: var(--media-menu-width);
max-width: var(--media-menu-available-width);
min-width: calc(var(--media-spacing) * 44);
overscroll-behavior: none;
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale, width, height;
transition-duration: .1s, .1s, .1s, .1s, .25s, .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
overflow: hidden !important;
}
.media-menu-popup:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-menu-popup:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-menu-popup[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transform: none;
}
.media-menu-popup[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
}
.media-menu-popup[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-menu-popup[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-menu-popup[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-menu-popup[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-menu-popup[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-menu-popup[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup {
--media-menu-transition-duration: 0s;
transition-duration: 0s !important;
}
.media-menu-popup[data-ending-style], .media-menu-popup[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-menu-popup {
color: canvastext;
background-color: canvas;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-menu-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
border-radius: calc(var(--media-spacing) * 3);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2.5);
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-menu-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-menu-popup:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-menu-popup {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-menu-popup:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-menu-radio-group {
max-height: inherit;
gap: calc(var(--media-spacing) * .5);
anchor-scope: --media-menu-item-highlight-anchor;
flex-direction: column;
display: flex;
}
@supports (top: anchor(top)) {
.media-menu-radio-group:before {
pointer-events: none;
inset: anchor(inside);
border-radius: var(--media-menu-item-border-radius);
background-color: var(--media-accent);
overflow-anchor: none;
content: "";
position-anchor: --media-menu-item-highlight-anchor;
transition-property: inset;
transition-duration: .1s;
transition-timing-function: ease-in-out;
position: absolute;
}
.media-menu-radio-group:has([data-highlighted=""]):before {
content: "";
transition-duration: 0s;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-captions-button-off-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&:not([data-active]) .media-captions-button-off-icon {
opacity: 1;
scale: 1;
}
}
.media-captions-button-on-icon {
opacity: 0;
}
@scope (.media-captions-button) {
&[data-active] .media-captions-button-on-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-volume-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-volume-indicator[data-ending-style], .media-volume-indicator[data-starting-style] {
opacity: 0;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
width: min(80%, 12rem);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
transform: translateX(0);
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-volume-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-volume-indicator-fill {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: inherit;
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
}
.media-volume-indicator-fill:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-image: linear-gradient(currentColor, currentColor);
background-size: var(--media-volume-fill, 0.0%) 100.0%;
background-position: 0;
background-repeat: no-repeat;
width: 100%;
transition-property: background-size;
transition-duration: .2s;
transition-timing-function: linear;
display: flex;
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
grid-template-columns: auto minmax(0, 1fr) auto;
width: min(80%, 14rem);
display: grid;
transform: translateX(0);
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
height: calc(var(--media-spacing) * .75);
content: "";
width: 100%;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 1px 0 var(--media-shadow-subtle-current-color);
background-color: currentColor;
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):before {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *):after {
height: calc(var(--media-spacing) * .75);
width: var(--media-volume-fill, 0.0%);
background-color: var(--media-primary);
content: "";
border-radius: 9999px;
grid-row-start: 1;
grid-column-start: 2;
justify-self: flex-start;
transition-property: width;
transition-duration: .2s;
transition-timing-function: linear;
}
@media (prefers-reduced-motion: no-preference) {
@scope (.media-volume-indicator) {
&:is([data-min], [data-max]):not([data-starting-style], [data-ending-style]) .media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
transition: transform .3s linear(0,-24 20.0%,16 40.0%,-8 60%,4 80.0%,1);
transform: translateX(.25px);
}
}
}
@media (prefers-contrast: more) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-indicator-fill:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-volume-indicator-high-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="high"] .media-volume-indicator-high-icon {
display: block;
}
}
.media-volume-indicator-high-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-high-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-low-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="low"] .media-volume-indicator-low-icon {
display: block;
}
}
.media-volume-indicator-low-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-low-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-volume-indicator) {
&[data-level="off"] .media-volume-indicator-off-icon {
display: block;
}
}
.media-volume-indicator-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-volume-indicator-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
}
.media-volume-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
margin-left: auto;
}
.media-volume-indicator-value:where(.media-skin--minimal, .media-skin--minimal *) {
grid-row-start: 1;
grid-column-start: 3;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 1);
bottom: calc(var(--media-spacing) * 1);
z-index: 20;
align-items: center;
column-gap: calc(var(--media-spacing) * 2);
padding: calc(var(--media-spacing) * 1);
color: #fff;
transition-property: filter, opacity, translate;
transition-duration: calc(var(--media-controls-transition-duration) / 2);
--media-popover-boundary-offset: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 5);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
background-color: #0000;
border-radius: .75rem;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
}
.media-controls:not([data-visible]) {
pointer-events: none;
opacity: 0;
transition-duration: var(--media-controls-transition-duration);
}
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
translate: 0 100%;
}
}
@media (prefers-contrast: more) {
.media-controls {
background-color: #000;
}
}
@container media-root (width >= 42rem) {
.media-controls {
inset-inline: calc(var(--media-spacing) * 2);
bottom: calc(var(--media-spacing) * 2);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-controls:not([data-visible]) {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls {
background-color: #000;
}
}
.media-controls__backdrop {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
background-image: linear-gradient(to top, oklab(0% none none / .7) 0.0%, oklab(0% none none / .5) calc(var(--media-spacing) * 30), transparent 100.0%);
transition-property: opacity;
transition-duration: var(--media-controls-transition-duration);
transition-timing-function: cubic-bezier(0, 0, .2, 1);
position: absolute;
}
.media-controls__backdrop:not([data-visible]) {
opacity: 0;
}
.media-controls-end {
align-items: center;
gap: 1px;
transition: mask-position 50ms ease-out;
display: flex;
mask-position: 100% 0;
mask-size: 400% 100%;
mask-repeat: no-repeat;
}
@scope (.media-controls) {
&:has([data-volume-level][aria-expanded="true"]) .media-controls-end {
mask-image: linear-gradient(to right, #0000 10%, #000 25% 100%);
mask-position: 0 0;
}
}
.media-controls-spacer {
flex: 1;
}
.media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-video-status-indicators {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
grid-template-columns: repeat(3, minmax(0, 1fr));
place-items: center;
display: grid;
position: absolute;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-playback-status-indicator {
padding: calc(var(--media-spacing) * 4);
text-align: center;
grid-row-start: 1;
grid-column-start: 2;
place-content: center;
transition-property: opacity, scale;
transition-duration: .2s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
.media-playback-status-indicator[data-ending-style] {
opacity: 0;
transition-duration: .1s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
scale: .85;
}
.media-playback-status-indicator[data-starting-style] {
opacity: 0;
scale: .85;
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
.media-playback-status-indicator[data-ending-style], .media-playback-status-indicator[data-starting-style] {
scale: 1;
}
}
.media-playback-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
border-radius: 9999px;
}
.media-playback-status-indicator-pause-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="pause"] .media-playback-status-indicator-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-pause-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-pause-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
.media-playback-status-indicator-pause-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-playback-status-indicator-play-icon {
opacity: 0;
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
scale: 0;
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-playback-status-indicator-play-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
scale: 1;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 1.5);
}
@scope (.media-playback-status-indicator) {
&[data-status="play"] .media-playback-status-indicator-play-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
translate: 1px;
}
}
.media-playback-status-indicator-play-icon:where(.media-skin--minimal, .media-skin--minimal *) {
width: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
height: calc(var(--media-icon-size, calc(var(--media-spacing) * 4.5)) * 2);
}
.media-status-indicator {
pointer-events: none;
transform-origin: top;
color: inherit;
position: absolute;
}
.media-status-indicator[data-ending-style], .media-status-indicator[data-starting-style] {
opacity: 0;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
top: calc(var(--media-spacing) * 3);
background-color: oklab(0% none none / .25);
background-color: var(--media-popover);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-radius: 9999px;
font-weight: 500;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
translate: 0 -25%;
}
}
@media (prefers-contrast: more) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,opacity;
transition-property: scale, translate, opacity;
}
}
@media (pointer: fine) {
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
will-change: scale,translate,filter,opacity;
transition-property: scale, translate, filter, opacity;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style], .media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-starting-style] {
filter: blur(8px);
scale: .9;
}
}
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
inset-inline: calc(var(--media-spacing) * 0);
top: calc(var(--media-spacing) * 0);
background-image: linear-gradient(to bottom,oklch(0% 0 0 / .35),oklch(0% 0 0 / .2) calc(var(--media-spacing) * 12),transparent);
padding-top: calc(var(--media-spacing) * 3);
padding-bottom: calc(var(--media-spacing) * 32);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
justify-content: center;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
}
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
transition-duration: .4s;
transition-timing-function: cubic-bezier(.4, 0, 1, 1);
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
translate: 0 -100%;
}
}
@media (pointer: coarse) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,opacity;
transition-property: translate, opacity;
}
}
@media (pointer: fine) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *) {
will-change: translate,filter,opacity;
transition-property: translate, filter, opacity;
}
@media (prefers-reduced-motion: no-preference) {
.media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style], .media-status-indicator:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: blur(8px);
}
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-status-indicator:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-status-indicator-captions-off-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-off"] .media-status-indicator-captions-off-icon {
display: block;
}
}
.media-status-indicator-captions-off-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-off-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-captions-on-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="captions-on"] .media-status-indicator-captions-on-icon {
display: block;
}
}
.media-status-indicator-captions-on-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-captions-on-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-content {
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
display: flex;
}
.media-status-indicator-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: 100%;
}
@media (prefers-contrast: more) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-status-indicator-content:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
background-color: #000;
}
}
.media-status-indicator-fullscreen-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="fullscreen"] .media-status-indicator-fullscreen-enter-icon {
display: block;
}
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-fullscreen-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-fullscreen"] .media-status-indicator-fullscreen-exit-icon {
display: block;
}
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-fullscreen-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-enter-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="pip"] .media-status-indicator-pip-enter-icon {
display: block;
}
}
.media-status-indicator-pip-enter-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-enter-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-pip-exit-icon {
flex-shrink: 0;
display: none;
}
@scope (.media-status-indicator) {
&[data-status="exit-pip"] .media-status-indicator-pip-exit-icon {
display: block;
}
}
.media-status-indicator-pip-exit-icon:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
.media-status-indicator-pip-exit-icon:where(.media-skin--minimal, .media-skin--minimal *) {
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
}
.media-status-indicator-value {
margin-left: auto;
}
.media-status-indicator-value:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
mix-blend-mode: difference;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-dialog-backdrop {
inset: calc(var(--media-spacing) * 0);
z-index: 40;
opacity: 1;
backdrop-filter: blur(16px) saturate(150%);
background-color: oklab(0% none none / .2);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s;
position: absolute;
}
.media-dialog-backdrop:not([data-open]) {
display: none;
}
.media-dialog-backdrop[data-ending-style] {
opacity: 0;
transition-delay: 0s;
}
.media-dialog-backdrop[data-starting-style] {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
transition-duration: .35s;
}
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *) {
backdrop-filter: saturate(120%);
transition-duration: .15s;
}
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-backdrop:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
.media-dialog-close {
height: var(--media-control-size);
width: 100%;
padding-inline: calc(var(--media-spacing) * 4);
padding-block: calc(var(--media-spacing) * 2);
flex: 1;
font-weight: 500;
background-color: var(--media-primary) !important;
color: var(--media-accent-foreground) !important;
}
.media-dialog-content {
min-height: calc(var(--media-spacing) * 0);
gap: calc(var(--media-spacing) * 2);
flex-direction: column;
display: flex;
overflow-y: auto;
}
.media-dialog-content:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2);
padding-top: calc(var(--media-spacing) * 2);
padding-bottom: calc(var(--media-spacing) * 1.5);
}
.media-dialog-content:where(.media-skin--minimal, .media-skin--minimal *) {
padding-block: calc(var(--media-spacing) * 1.5);
}
.media-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-dialog-popup {
z-index: 50;
gap: calc(var(--media-spacing) * 3);
outline-style: none;
flex-direction: column;
max-height: calc(100% - .5rem);
transition: opacity .15s cubic-bezier(0, 0, .2, 1) .1s, scale .15s cubic-bezier(0, 0, .2, 1) .1s;
display: flex;
position: absolute;
top: 50%;
left: 50%;
translate: -50% -50%;
}
.media-dialog-popup:not([data-open]) {
display: none;
}
.media-dialog-popup[data-ending-style] {
opacity: 0;
transition-delay: 0s;
scale: .95;
}
.media-dialog-popup[data-starting-style] {
opacity: 0;
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup {
transition-duration: 50ms;
transition-delay: 0s;
}
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
width: calc(100% - 1.5rem);
max-width: calc(var(--media-spacing) * 72);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 3);
color: #fff;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
text-shadow: 0 1px #00000040;
border-radius: 1.75rem;
transition-duration: .35s;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: .25s;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-contrast: more) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
color: canvastext;
background-color: canvas;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *) {
width: 100%;
max-width: calc(var(--media-spacing) * 64);
padding: calc(var(--media-spacing) * 4);
color: #fff;
text-shadow: 0 1px #00000080;
transition-duration: .15s;
}
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
@media (prefers-reduced-motion: reduce) {
.media-dialog-popup:where(.media-skin--minimal, .media-skin--minimal *)[data-ending-style] {
transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-dialog-popup:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-cast-button-enter-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&:not([data-cast-state="connected"]) .media-cast-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-cast-button-exit-icon {
opacity: 0;
}
@scope (.media-cast-button) {
&[data-cast-state="connected"] .media-cast-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-poster {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
transition-property: opacity;
transition-duration: .25s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
position: absolute;
}
.media-poster:not([data-visible]) {
opacity: 0;
}
.media-poster ::slotted(img) {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster ::slotted(img:not([src]):not([srcset])) {
visibility: hidden;
}
.media-poster img {
inset: calc(var(--media-spacing) * 0);
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
height: 100%;
position: absolute;
}
.media-poster:is(img):not([src]):not([srcset]), .media-poster > slot > img:not([src]):not([srcset]) {
visibility: hidden;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-airplay-button:not([data-airplay-state="connected"]) {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
@media (prefers-reduced-motion: reduce) {
.media-airplay-button {
--media-icon-airplay-fill-animation: none;
--media-icon-airplay-triangle-animation: none;
}
}
.media-airplay-button-enter-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&:not([data-airplay-state="connected"]) .media-airplay-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-airplay-button-exit-icon {
opacity: 0;
}
@scope (.media-airplay-button) {
&[data-airplay-state="connected"] .media-airplay-button-exit-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-menu-item-indicator {
opacity: 0;
flex-shrink: 0;
margin-inline-start: auto;
margin-inline-end: calc(var(--media-spacing) * -1);
}
@scope (.media-menu-radio-item) {
&[aria-checked="true"] .media-menu-item-indicator {
opacity: 1;
}
}
.media-menu-radio-item {
cursor: pointer;
justify-content: space-between;
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
border-radius: var(--media-menu-item-border-radius);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1.5);
text-align: start;
white-space: nowrap;
color: inherit;
font-variant-numeric: tabular-nums;
outline-offset: -2px;
-webkit-user-select: none;
user-select: none;
text-shadow: 0 1px 0 var(--media-shadow-current-color);
outline: 2px solid #0000;
transition-property: background-color, color;
transition-duration: .1s;
transition-timing-function: ease-in-out;
display: flex;
position: relative;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-menu-radio-item:focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
.media-menu-radio-item[aria-disabled="true"] {
pointer-events: none;
cursor: not-allowed;
opacity: .5;
}
.media-menu-radio-item[data-highlighted] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-menu-radio-item[data-availability="unavailable"], .media-menu-radio-item[data-availability="unsupported"] {
display: none;
}
@supports (top: anchor(top)) {
.media-menu-radio-item {
transition-duration: 50ms;
}
@media (hover: hover) {
.media-menu-radio-item:hover {
transition-duration: .2s;
}
}
.media-menu-radio-item[data-highlighted] {
anchor-name: --media-menu-item-highlight-anchor;
background-color: #0000;
transition-duration: .2s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-menu-radio-item {
transition-duration: 50ms;
}
}
.media-menu-radio-item-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
color: var(--media-muted-foreground);
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
flex-shrink: 0;
}
@media (hover: hover) {
@scope (.media-menu-radio-item) {
&:hover .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-menu-radio-item) {
&[data-highlighted] .media-menu-radio-item-icon {
color: inherit;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-fullscreen-button-enter-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&:not([data-fullscreen]) .media-fullscreen-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-fullscreen-button-exit-icon {
opacity: 0;
}
@scope (.media-fullscreen-button) {
&[data-fullscreen] .media-fullscreen-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--live-video) {
@media (prefers-reduced-motion: reduce) {
}
.media-pip-button-enter-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&:not([data-pip]) .media-pip-button-enter-icon {
opacity: 1;
scale: 1;
}
}
.media-pip-button-exit-icon {
opacity: 0;
}
@scope (.media-pip-button) {
&[data-pip] .media-pip-button-exit-icon {
opacity: 1;
scale: 1;
}
}
}
}
@layer utilities;
Minimal live audio skin
'use client';
import { StatusAnnouncer as StatusAnnouncerPrimitive, Container as ContainerPrimitive, ErrorDialog, Hotkey, LiveButton as LiveButtonPrimitive, Tooltip, MuteButton as MuteButtonPrimitive, VolumeSlider as VolumeSliderPrimitive, VolumePopover as VolumePopoverPrimitive, PlayButton as PlayButtonPrimitive, BufferingIndicator as BufferingIndicatorPrimitive, Controls } from '@videojs/react';
import { MuxAudio } from '@videojs/react/media/mux-audio';
import './player.css';
import { Player } from './player';
import { type ComponentProps, type ReactElement, type ReactNode, type SVGProps, type CSSProperties } from 'react';
import { VolumeOffIcon as VolumeOffIconPrimitive, VolumeLowIcon as VolumeLowIconPrimitive, VolumeHighIcon as VolumeHighIconPrimitive, RestartIcon as RestartIconPrimitive, PlayIcon as PlayIconPrimitive, PauseIcon as PauseIconPrimitive, SpinnerIcon as SpinnerIconPrimitive } from '@videojs/react/icons';
import { VolumeOffIcon as VolumeOffIconPrimitive2, VolumeLowIcon as VolumeLowIconPrimitive2, VolumeHighIcon as VolumeHighIconPrimitive2, RestartIcon as RestartIconPrimitive2, PlayIcon as PlayIconPrimitive2, PauseIcon as PauseIconPrimitive2, SpinnerIcon as SpinnerIconPrimitive2 } from '@videojs/react/icons/minimal';
import { type VolumeSliderProps as CoreVolumeSliderProps } from '@videojs/core';
import { type Poster } from '@videojs/react';
type ContainerProps = ContainerPrimitive.Props;
function Container({ children, className, ...props }: ContainerProps) {
return (
<ContainerPrimitive className={`media-container ${className ?? ''}`} {...props}>
{children}
</ContainerPrimitive>
);
}
interface MinimalLiveAudioSkinProps extends Omit<NonNullable<ComponentProps<typeof Container>>, 'children'> {
src: string;
}
type AudioErrorDialogProps = Omit<ErrorDialog.PopupProps, 'children'>;
type ButtonProps = ComponentProps<'button'>;
function AudioErrorDialog({ className, ...props }: AudioErrorDialogProps = {}) {
return (
<ErrorDialog.Root>
<ErrorDialog.Backdrop className={'media-audio-dialog-backdrop'} />
<ErrorDialog.Popup
className={(state) => `media-audio-dialog-popup ${resolveClassName(className, state)}`}
{...props}
>
<div className={'media-audio-dialog-content'}>
<ErrorDialog.Title className={'media-audio-dialog-title'} />
<ErrorDialog.Description className={'media-audio-dialog-description'} />
</div>
<div className={'media-audio-dialog-actions'}>
<ErrorDialog.Close render={<Button />} className={'media-audio-dialog-close'} />
</div>
</ErrorDialog.Popup>
</ErrorDialog.Root>
);
}
type AudioPlayButtonProps = Omit<ComponentProps<'div'>, 'children'>;
type BufferingIndicatorProps = Omit<BufferingIndicatorPrimitive.Props, 'children'>;
function BufferingIndicator({ className, ...props }: BufferingIndicatorProps = {}) {
return (
<BufferingIndicatorPrimitive
className={(state) => `media-buffering-indicator ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<SpinnerIconPrimitive className={'media-buffering-indicator-spinner-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<SpinnerIconPrimitive2 className={'media-buffering-indicator-spinner-icon'} />
</span>
</>
</BufferingIndicatorPrimitive>
);
}
type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;
interface ButtonTooltipProps extends Tooltip.RootProps {
children: ReactElement;
label?: ReactNode;
}
function ButtonTooltip({ children, label, ...props }: ButtonTooltipProps) {
return (
<Tooltip.Root {...props}>
<Tooltip.Trigger render={children} />
<Tooltip.Popup className={'media-tooltip'}>
{label ?? <Tooltip.Label />}
{!label && <Tooltip.Shortcut className={'media-tooltip-shortcut'} />}
</Tooltip.Popup>
</Tooltip.Root>
);
}
function PlayButton({ className, ...props }: PlayButtonProps = {}) {
return (
<ButtonTooltip side="top">
<PlayButtonPrimitive
render={<Button />}
className={(state) => `media-play-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<RestartIconPrimitive className={'media-button-icon media-play-button-restart-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<RestartIconPrimitive2 className={'media-button-icon media-play-button-restart-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PlayIconPrimitive className={'media-button-icon media-play-button-play-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PlayIconPrimitive2 className={'media-button-icon media-play-button-play-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<PauseIconPrimitive className={'media-button-icon media-play-button-pause-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<PauseIconPrimitive2 className={'media-button-icon media-play-button-pause-icon'} />
</span>
</>
</PlayButtonPrimitive>
</ButtonTooltip>
);
}
function AudioPlayButton({ className, ...props }: AudioPlayButtonProps = {}) {
return (
<div className={`media-audio-play-button ${className ?? ''}`} {...props}>
<BufferingIndicator className={'media-audio-play-button-buffering-indicator'} />
<PlayButton />
</div>
);
}
type LiveButtonProps = Omit<LiveButtonPrimitive.Props, 'children'>;
function LiveButton({ className, ...props }: LiveButtonProps = {}) {
return (
<LiveButtonPrimitive
render={<Button />}
className={(state) => `media-live-button ${resolveClassName(className, state)}`}
{...props}
/>
);
}
interface VolumePopoverProps extends Omit<VolumePopoverPrimitive.RootProps, 'children'> {
className?: string | undefined;
orientation?: CoreVolumeSliderProps['orientation'];
showTooltip?: boolean;
popupClassName?: ClassValue;
}
type MuteButtonProps = Omit<MuteButtonPrimitive.Props, 'children'>;
function MuteButton({ className, ...props }: MuteButtonProps = {}) {
return (
<MuteButtonPrimitive
render={<Button />}
className={(state) => `media-mute-button ${resolveClassName(className, state)}`}
{...props}
>
<>
<span className="contents theme-minimal:hidden">
<VolumeOffIconPrimitive className={'media-button-icon media-mute-button-off-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeOffIconPrimitive2 className={'media-button-icon media-mute-button-off-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeLowIconPrimitive className={'media-button-icon media-mute-button-low-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeLowIconPrimitive2 className={'media-button-icon media-mute-button-low-icon'} />
</span>
</>
<>
<span className="contents theme-minimal:hidden">
<VolumeHighIconPrimitive className={'media-button-icon media-mute-button-high-icon'} />
</span>
<span className="hidden theme-minimal:contents">
<VolumeHighIconPrimitive2 className={'media-button-icon media-mute-button-high-icon'} />
</span>
</>
</MuteButtonPrimitive>
);
}
type VolumeSliderProps = Omit<VolumeSliderPrimitive.RootProps, 'children'>;
function VolumeSlider({ className, ...props }: VolumeSliderProps = {}) {
return (
<VolumeSliderPrimitive.Root
className={(state) => `media-slider media-volume-slider ${resolveClassName(className, state)}`}
thumbAlignment="edge"
{...props}
>
<VolumeSliderPrimitive.Track render={<SliderTrack />}>
<VolumeSliderPrimitive.Fill render={<SliderFill />} />
</VolumeSliderPrimitive.Track>
<VolumeSliderPrimitive.Thumb render={<SliderThumb />} className={'media-volume-slider-thumb'} />
</VolumeSliderPrimitive.Root>
);
}
function MinimalLiveAudioControls() {
return (
<Controls.Root visibility="always">
<Controls.Content className={'media-controls media-controls-content'}>
<Tooltip.Provider>
<Controls.Group className={'media-controls-start'}>
<AudioPlayButton />
<LiveButton />
</Controls.Group>
<div aria-hidden="true" className={'media-controls-spacer'} />
<Controls.Group className={'media-controls-end'}>
<VolumePopover
popupClassName={'media-audio-volume-popover'}
showTooltip
side="left"
orientation="horizontal"
/>
</Controls.Group>
</Tooltip.Provider>
</Controls.Content>
</Controls.Root>
);
}
interface LivePlaybackHotkeysProps {
disabled?: boolean | undefined;
}
function LivePlaybackHotkeys({ disabled = false }: LivePlaybackHotkeysProps = {}) {
return (
<>
<Hotkey disabled={disabled} keys="Space" action="togglePaused" />
<Hotkey disabled={disabled} keys="k" action="togglePaused" />
<Hotkey disabled={disabled} keys="m" action="toggleMuted" />
<Hotkey disabled={disabled} keys="ArrowUp" action="volumeStep" value={0.05} />
<Hotkey disabled={disabled} keys="ArrowDown" action="volumeStep" value={-0.05} />
</>
);
}
type StatusAnnouncerProps = Omit<StatusAnnouncerPrimitive.Props, 'children'>;
function StatusAnnouncer({ className, ...props }: StatusAnnouncerProps = {}) {
return (
<StatusAnnouncerPrimitive
className={(state) => `media-status-announcer ${resolveClassName(className, state)}`}
{...props}
/>
);
}
function MinimalLiveAudioSkin({ children, className, ...props }: MinimalLiveAudioSkinProps = {}) {
return (
<Container
className={`media-skin media-skin--minimal media-skin--live-audio media-audio-skin ${className ?? ''}`}
{...props}
>
{children}
<AudioErrorDialog />
<MinimalLiveAudioControls />
<LivePlaybackHotkeys />
<StatusAnnouncer />
</Container>
);
}
const Skin = MinimalLiveAudioSkin;
// ================================================================
// Player
// ================================================================
export interface LiveAudioPlayerProps {
children?: ReactNode;
style?: CSSProperties;
className?: string;
}
export function MinimalLiveAudioSkin(props: MinimalLiveAudioSkinProps) {
return <Skin {...props} />;
}
// ================================================================
// Components
// ================================================================
function Button({ className, ...props }: ButtonProps) {
return <button className={`media-button ${className ?? ''}`} {...props} />;
}
type SliderTrackProps = ComponentProps<'div'>;
function SliderTrack({ className, ...props }: SliderTrackProps) {
return <div className={`media-slider-track ${className ?? ''}`} {...props} />;
}
type SliderFillProps = ComponentProps<'div'>;
function SliderFill({ className, ...props }: SliderFillProps) {
return <div className={`media-slider-fill ${className ?? ''}`} {...props} />;
}
type SliderThumbProps = ComponentProps<'div'>;
function SliderThumb({ className, ...props }: SliderThumbProps) {
return <div className={`media-slider-thumb ${className ?? ''}`} {...props} />;
}
function VolumePopover({
className,
popupClassName,
showTooltip = false,
side = 'top',
orientation = 'vertical',
...props
}: VolumePopoverProps = {}) {
return (
<VolumePopoverPrimitive.Root openOnHover delay={200} closeDelay={100} side={side} {...props}>
<ButtonTooltip delay={0} disabled={!showTooltip} sticky side="top">
<VolumePopoverPrimitive.Trigger render={<MuteButton className={className} />} />
</ButtonTooltip>
<VolumePopoverPrimitive.Popup className={`media-volume-popover ${popupClassName}`}>
<VolumeSlider orientation={orientation} />
</VolumePopoverPrimitive.Popup>
</VolumePopoverPrimitive.Root>
);
}
import { createPlayer } from '@videojs/react';
import { liveAudioFeatures } from '@videojs/react/live-audio';
export const { Player } = createPlayer({ features: liveAudioFeatures });
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-controls-content {
z-index: 20;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: calc(var(--media-spacing) * 3.5);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 3);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
display: none !important;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end {
align-items: center;
gap: 1px;
display: flex;
}
.media-controls-spacer {
flex: 1;
}
.media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 4);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 3);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: none;
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter, scale;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-volume-popover[data-starting-style] {
filter: none;
}
.media-audio-volume-popover[data-side="left"] {
background-image: linear-gradient(to left, var(--media-controls) 80.0%, transparent 100.0%);
padding-block: calc(var(--media-spacing) * 0);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
border-style: solid;
border-width: 0;
border-radius: 0;
padding-inline-start: calc(var(--media-spacing) * 16);
padding-inline-end: calc(var(--media-spacing) * 2);
background-color: #0000 !important;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-audio-volume-popover[data-side="left"]:after {
content: "";
display: none;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
}
@layer utilities;
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/live-audio-minimal.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/media/mux-audio.js"></script>
<link rel="stylesheet" href="./player.css">
<live-audio-player>
<media-container class="media-container media-skin media-skin--minimal media-skin--live-audio media-audio-skin">
<slot>
</slot>
<media-error-dialog class="media-audio-dialog-root">
<media-dialog-backdrop class="media-audio-dialog-backdrop">
</media-dialog-backdrop>
<media-dialog-popup class="media-audio-dialog-popup">
<div class="media-audio-dialog-content">
<media-dialog-title class="media-audio-dialog-title">
</media-dialog-title>
<media-dialog-description class="media-audio-dialog-description">
</media-dialog-description>
</div>
<div class="media-audio-dialog-actions">
<media-dialog-close class="media-button media-audio-dialog-close">
</media-dialog-close>
</div>
</media-dialog-popup>
</media-error-dialog>
<media-controls visibility="always">
<media-controls-content class="media-controls media-controls-content">
<media-tooltip-group>
<media-controls-group class="media-controls-start">
<div class="media-audio-play-button">
<media-buffering-indicator class="media-buffering-indicator media-audio-play-button-buffering-indicator">
<span class="contents theme-minimal:hidden">
<media-icon name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="spinner" class="media-buffering-indicator-spinner-icon">
</media-icon>
</span>
</media-buffering-indicator>
<media-play-button class="media-button media-play-button" id="vjs-JRh80Kgq-ev-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="restart" class="media-button-icon media-play-button-restart-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="play" class="media-button-icon media-play-button-play-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="pause" class="media-button-icon media-play-button-pause-icon">
</media-icon>
</span>
</media-play-button>
<media-tooltip trigger="vjs-JRh80Kgq-ev-trigger" side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
</div>
<media-live-button class="media-button media-live-button">
</media-live-button>
</media-controls-group>
<div aria-hidden="true" class="media-controls-spacer">
</div>
<media-controls-group class="media-controls-end">
<media-mute-button class="media-button media-mute-button" commandfor="vjs-qqNBsqBN-q1-popup" id="vjs-JRh80Kgq-ev-2-trigger">
<span class="contents theme-minimal:hidden">
<media-icon name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-off" class="media-button-icon media-mute-button-off-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-low" class="media-button-icon media-mute-button-low-icon">
</media-icon>
</span>
<span class="contents theme-minimal:hidden">
<media-icon name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
<span class="hidden theme-minimal:contents">
<media-icon family="minimal" name="volume-high" class="media-button-icon media-mute-button-high-icon">
</media-icon>
</span>
</media-mute-button>
<media-tooltip trigger="vjs-JRh80Kgq-ev-2-trigger" delay="0" sticky side="top" class="media-tooltip">
<media-tooltip-label>
</media-tooltip-label>
<media-tooltip-shortcut class="media-tooltip-shortcut">
</media-tooltip-shortcut>
</media-tooltip>
<media-volume-popover open-on-hover delay="200" close-delay="100" side="left" class="media-volume-popover media-audio-volume-popover" id="vjs-qqNBsqBN-q1-popup">
<media-volume-slider class="media-slider media-volume-slider" thumb-alignment="edge" orientation="horizontal">
<media-slider-track class="media-slider-track">
<media-slider-fill class="media-slider-fill">
</media-slider-fill>
</media-slider-track>
<media-slider-thumb class="media-slider-thumb media-volume-slider-thumb">
</media-slider-thumb>
</media-volume-slider>
</media-volume-popover>
</media-controls-group>
</media-tooltip-group>
</media-controls-content>
</media-controls>
<media-hotkey keys="Space" action="togglePaused">
</media-hotkey>
<media-hotkey keys="k" action="togglePaused">
</media-hotkey>
<media-hotkey keys="m" action="toggleMuted">
</media-hotkey>
<media-hotkey keys="ArrowUp" action="volumeStep" value="0.05">
</media-hotkey>
<media-hotkey keys="ArrowDown" action="volumeStep" value="-0.05">
</media-hotkey>
<media-status-announcer class="media-status-announcer">
</media-status-announcer>
</media-container>
</live-audio-player>/* -------------------------------------------------------------------------- */
/* Global styles for the host document, outside of the Shadow DOM */
/* -------------------------------------------------------------------------- */
video-player,
live-video-player,
media-i18n,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
/*
Required to override any default video and image styles (such as
Tailwind's CSS reset) and ensure they fill the container as expected.
*/
media-container video,
media-container [slot="poster"] {
display: block;
width: 100%;
height: 100%;
}
media-container video::-webkit-media-text-track-container {
z-index: 1;
font-family: inherit;
scale: 0.98;
translate: 0 var(--media-caption-track-y, 0);
transition: translate var(--media-caption-track-duration, 0) ease-out;
transition-delay: var(--media-caption-track-delay, 0);
}
/* -------------------------------------------------------------------------- */
/* Shared styles for all HTML skins */
/* -------------------------------------------------------------------------- */
media-tooltip-group,
media-dialog,
media-alert-dialog,
media-error-dialog,
media-controls {
display: contents;
}
:host {
/* `display:grid` fixes a weird issue with Safari when setting aspect-ratio */
display: grid;
width: 100%;
}
media-container {
min-width: 0;
min-height: 0;
}
/* Hide the volume popover when its slider is unavailable. */
.media-popover--volume:has(media-volume-slider[data-hidden]) {
display: none;
}
@layer base {
.media-skin {
--media-background: oklch(0% 0 0);
--media-foreground: oklch(100% 0 0);
--media-controls: oklch(0% 0 0 / .35);
--media-controls-foreground: var(--media-foreground);
--media-popover: oklch(100% 0 0 / .1);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-default-accent-color));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-default-accent-color))));
--media-accent: var(--media-accent-color, color-mix(in oklab, var(--media-default-accent-color) 10%, transparent));
--media-accent-foreground: var(--media-accent-text-color, contrast-color(var(--media-accent-color, var(--media-internal-accent-text-base, oklch(0% 0 0)))));
--media-muted: oklch(100% 0 0 / .15);
--media-muted-foreground: oklch(100% 0 0 / .65);
--media-border: oklch(0% 0 0 / .1);
--media-ring: var(--media-focus-ring-color, oklch(100% 0 0));
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .15);
--media-caption-controls-y: calc(var(--media-spacing) * -14);
--media-control-corner-shape: round;
--media-control-radius: calc(infinity * 1px);
--media-control-size: calc(var(--media-spacing) * 9);
--media-controls-transition-duration: .1s;
--media-default-accent-color: oklch(100% 0 0);
--media-focus-ring-color: oklch(100% 0 0);
--media-menu-item-border-radius: calc(var(--media-spacing) * 2);
--media-menu-transition-duration: .25s;
--media-popup-translate-distance: calc(var(--media-scale-unit, 16px) * .5);
--media-video-border-radius: var(--media-border-radius, 28px);
--media-scale: 1;
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .3);
--media-spacing: calc(var(--media-scale-unit, 16px) * var(--media-scale) / 4);
scrollbar-color: var(--media-scrollbar-thumb-color) transparent;
scrollbar-width: thin;
}
.media-skin::-webkit-scrollbar-thumb {
background: var(--media-scrollbar-thumb-color);
border-radius: 9999px;
}
.media-skin--minimal {
--media-caption-controls-y: calc(var(--media-spacing) * -18);
--media-control-corner-shape: squircle;
--media-control-radius: calc(var(--media-spacing) * 2);
--media-control-size: calc(var(--media-spacing) * 9.5);
--media-popover: oklch(0% 0 0 / .5);
--media-border: oklch(100% 0 0 / .1);
--media-shadow-sm: 0 1px 2px oklch(0% 0 0 / .2);
--media-menu-item-border-radius: calc(var(--media-spacing) * 1.5);
--media-popup-translate-distance: calc(var(--media-spacing) * 2);
--media-video-border-radius: var(--media-border-radius, 12px);
}
:is(.media-skin--audio, .media-skin--live-audio) {
--media-background: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-foreground: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-controls: light-dark(oklch(100% 0 0 / .5), oklch(0% 0 0 / .4));
--media-controls-foreground: var(--media-foreground);
--media-popover: var(--media-controls);
--media-popover-foreground: var(--media-foreground);
--media-primary: var(--media-accent-color, var(--media-foreground));
--media-primary-foreground: var(--media-accent-text-color, contrast-color(var(--media-primary)));
--media-border: light-dark(oklch(0% 0 0 / .1), oklch(100% 0 0 / .1));
--media-ring: var(--media-foreground);
--media-default-accent-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
--media-internal-accent-text-base: light-dark(oklch(100% 0 0), oklch(0% 0 0));
--media-focus-ring-color: light-dark(oklch(0% 0 0), oklch(100% 0 0));
}
:is(.media-skin--audio, .media-skin--live-audio).media-skin--minimal {
--media-controls: var(--media-background);
--media-popover: var(--media-background);
}
@media (pointer: fine) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .3s;
}
}
@media (pointer: coarse) {
.media-skin:not([data-controls-visible]) {
--media-controls-transition-duration: .15s;
}
}
@media (prefers-reduced-motion: reduce) {
.media-skin {
--media-controls-transition-duration: 50ms;
}
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
.media-skin {
--media-scrollbar-thumb-color: oklch(from currentColor l c h / .8);
scrollbar-width: auto;
}
}
@scope (.media-skin) {
:scope, *, :before, :after {
box-sizing: border-box;
}
button {
font: inherit;
color: inherit;
text-transform: none;
letter-spacing: inherit;
appearance: none;
background: none;
margin: 0;
}
img, svg, media-icon {
max-width: 100%;
margin: 0;
display: block;
}
svg[fill="currentColor"] {
fill: currentColor;
}
svg[fill="none"] {
fill: none;
}
svg[stroke="currentColor"] {
stroke: currentColor;
}
video {
border-radius: inherit;
object-fit: var(--media-object-fit, contain);
object-position: var(--media-object-position, center);
width: 100%;
max-width: 100%;
height: 100%;
display: block;
}
media-icon > svg {
width: 100%;
height: 100%;
}
media-tooltip-group, media-dialog, media-alert-dialog, media-error-dialog, media-controls {
display: contents;
}
[hidden][hidden] {
display: none !important;
}
}
@media (prefers-reduced-motion: no-preference) {
.media-skin {
interpolate-size: allow-keywords;
}
}
}
@layer components {
@scope (.media-skin) {
:scope {
--media-caption-track-duration: var(--media-controls-transition-duration);
--media-caption-track-delay: 25ms;
--media-caption-track-y: calc(var(--media-spacing) * -2);
}
video::-webkit-media-text-track-container {
z-index: 1;
scale: .98;
translate: 0 var(--media-caption-track-y);
transition: translate var(--media-caption-track-duration) ease-out;
transition-delay: var(--media-caption-track-delay);
font-family: inherit;
}
:scope[data-controls-visible] {
--media-caption-track-y: var(--media-caption-controls-y);
}
@container media-root (width > 672px) {
:scope.media-skin--minimal[data-controls-visible] {
--media-caption-track-y: calc(var(--media-spacing) * -12);
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-button-icon {
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
grid-row-start: 1;
grid-column-start: 1;
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
.media-button-icon {
transition-property: opacity;
transition-duration: 50ms;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
.media-play-button-pause-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-started]:not([data-paused]):not([data-ended]) .media-play-button-pause-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-pause-icon {
scale: 1;
}
}
.media-play-button-play-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&:not([data-ended]):not([data-started]) .media-play-button-play-icon, &:not([data-ended])[data-paused] .media-play-button-play-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-play-icon {
scale: 1;
}
}
.media-play-button-restart-icon {
opacity: 0;
scale: 0;
}
@scope (.media-play-button) {
&[data-ended] .media-play-button-restart-icon {
opacity: 1;
scale: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.media-play-button-restart-icon {
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-controls-content {
z-index: 20;
align-items: center;
gap: calc(var(--media-spacing) * 2);
border-radius: calc(var(--media-spacing) * 3.5);
background-color: var(--media-controls);
background-color: var(--media-popover);
padding: calc(var(--media-spacing) * 1);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
--media-popover-boundary-offset: calc(var(--media-spacing) * 3);
--media-popover-side-offset: calc(var(--media-spacing) * 3);
--media-tooltip-boundary-offset: var(--media-popover-boundary-offset);
--media-tooltip-side-offset: var(--media-popover-side-offset);
text-shadow: 0 1px 0 var(--media-shadow-current-color);
display: flex;
position: relative;
}
.media-controls-content:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
display: none !important;
}
@media (prefers-contrast: more) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-controls-content {
color: canvastext;
background-color: canvas;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-controls-content {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-controls-content:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-controls-end {
align-items: center;
gap: 1px;
display: flex;
}
.media-controls-spacer {
flex: 1;
}
.media-controls-start {
align-items: center;
gap: 1px;
display: flex;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-dialog-actions {
gap: calc(var(--media-spacing) * 2);
flex-shrink: 0;
display: flex;
}
.media-audio-dialog-backdrop {
display: none;
}
.media-audio-dialog-close {
height: var(--media-control-size);
background-color: var(--media-primary);
width: auto;
padding-inline: calc(var(--media-spacing) * 3);
color: var(--media-accent-foreground);
flex: none;
font-weight: 500;
}
.media-audio-dialog-content {
min-height: calc(var(--media-spacing) * 0);
align-items: center;
gap: calc(var(--media-spacing) * 2);
flex-direction: row;
flex: 1;
display: flex;
overflow: visible;
}
.media-audio-dialog-description {
margin: calc(var(--media-spacing) * 0);
overflow-wrap: anywhere;
opacity: .7;
}
.media-audio-dialog-popup {
inset: calc(var(--media-spacing) * 0);
z-index: 50;
align-items: center;
gap: calc(var(--media-spacing) * 4);
background-color: var(--media-background);
width: 100%;
height: 100%;
max-height: none;
padding-inline: calc(var(--media-spacing) * 3);
padding-block: calc(var(--media-spacing) * 0);
color: var(--media-controls-foreground);
backdrop-filter: none;
border-radius: 99px;
outline-style: none;
flex-direction: row;
padding-inline-end: calc(var(--media-spacing) * 1);
transition-property: opacity, filter, scale;
transition-duration: .25s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: flex;
position: absolute;
translate: none;
}
.media-audio-dialog-popup:not([data-open]) {
display: none;
}
.media-audio-dialog-popup[data-ending-style], .media-audio-dialog-popup[data-starting-style] {
opacity: 0;
filter: blur(4px);
}
.media-audio-dialog-popup:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
.media-audio-dialog-title {
margin: calc(var(--media-spacing) * 0);
font-size: calc(var(--media-spacing) * 3.75);
font-weight: 600;
line-height: 1.25;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-tooltip {
margin: calc(var(--media-spacing) * 0);
background-color: var(--media-popover);
font-size: calc(var(--media-spacing) * 3.25);
white-space: nowrap;
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-tooltip:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-tooltip:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-tooltip[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-tooltip[data-open] {
align-items: center;
gap: calc(var(--media-spacing) * 1);
display: flex;
}
.media-tooltip[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-tooltip[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
bottom: 100%;
}
.media-tooltip[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
left: 100%;
}
.media-tooltip[data-side="right"] {
transform-origin: 0;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-tooltip[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-tooltip-side-offset);
right: 100%;
}
.media-tooltip[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-tooltip[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-tooltip-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip {
transition-duration: 0s !important;
}
.media-tooltip[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-tooltip[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-tooltip {
color: canvastext;
background-color: canvas;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-tooltip:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
padding-inline: calc(var(--media-spacing) * 2.5);
padding-block: calc(var(--media-spacing) * 1);
border-radius: 9999px;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *) {
border-radius: calc(var(--media-spacing) * 2);
padding-inline: calc(var(--media-spacing) * 2);
padding-block: calc(var(--media-spacing) * 1);
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-tooltip:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-tooltip:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-tooltip {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-tooltip:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
.media-tooltip-shortcut {
border-radius: calc(var(--media-spacing) * 1);
background-color: var(--media-muted);
text-align: center;
min-width: 1.5em;
font-family: inherit;
font-size: calc(var(--media-spacing) * 2.75);
padding: .1em;
font-weight: 600;
line-height: 1.25;
}
.media-tooltip-shortcut:where(.media-skin--minimal, .media-skin--minimal *) {
margin-inline-end: calc(var(--media-spacing) * -1);
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-play-button {
display: inline-flex;
position: relative;
}
.media-audio-play-button-buffering-indicator {
z-index: 20;
border-radius: var(--media-control-radius);
color: inherit !important;
}
.media-audio-play-button-buffering-indicator:before {
content: "";
display: none !important;
}
.media-audio-play-button-buffering-indicator[data-visible] {
background-color: var(--media-controls);
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-skin, :scope.media-audio-skin {
background-color: #0000 !important;
height: auto !important;
overflow: visible !important;
container-type: inline-size !important;
}
.media-audio-skin:after, :scope.media-audio-skin:after {
content: "";
display: none !important;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-live-button {
align-items: center;
gap: calc(var(--media-spacing) * 1.5);
font-size: calc(var(--media-spacing) * 2.75);
letter-spacing: .05em;
text-transform: uppercase;
font-weight: 600;
line-height: 1;
width: auto !important;
padding-inline: calc(var(--media-spacing) * 3) !important;
padding-block: calc(var(--media-spacing) * 2) !important;
display: inline-flex !important;
}
.media-live-button:before {
width: calc(var(--media-spacing) * 2);
height: calc(var(--media-spacing) * 2);
content: "";
background-color: currentColor;
border-radius: 99px;
flex-shrink: 0;
transition-property: background-color;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: inline-block;
}
@supports (color: color-mix(in lab, red, red)) {
.media-live-button:before {
background-color: color-mix(in oklab, currentcolor 40.0%, transparent);
}
}
.media-live-button[data-live-edge]:before {
content: "";
background-color: oklch(65% .22 27);
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
@media (prefers-reduced-motion: reduce) {
}
.media-mute-button-high-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted]):not([data-volume-level="low"]) .media-mute-button-high-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-low-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&:not([data-muted])[data-volume-level="low"] .media-mute-button-low-icon {
opacity: 1;
scale: 1;
}
}
.media-mute-button-off-icon {
opacity: 0;
}
@scope (.media-mute-button) {
&[data-muted] .media-mute-button-off-icon {
opacity: 1;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-status-announcer {
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
overflow: hidden;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-audio-volume-popover[data-starting-style] {
filter: none;
}
.media-audio-volume-popover[data-side="left"] {
background-image: linear-gradient(to left, var(--media-controls) 80.0%, transparent 100.0%);
padding-block: calc(var(--media-spacing) * 0);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
border-style: solid;
border-width: 0;
border-radius: 0;
padding-inline-start: calc(var(--media-spacing) * 16);
padding-inline-end: calc(var(--media-spacing) * 2);
background-color: #0000 !important;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-audio-volume-popover[data-side="left"]:after {
content: "";
display: none;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-container, :scope.media-container {
isolation: isolate;
border-radius: var(--media-video-border-radius);
background-color: var(--media-background);
width: 100%;
height: 100%;
font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif;
font-size: calc(var(--media-spacing) * 3.25);
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
outline-offset: -4px;
--media-shadow-current-color: oklch(from currentColor 0 0 0/clamp(0, calc((l - .5) * .5), .15));
--media-shadow-subtle-current-color: oklch(from var(--media-shadow-current-color) l c h/calc(alpha * .4));
--spacing: var(--media-spacing);
outline: 2px solid #0000;
line-height: 1.5;
transition-property: outline-offset, outline-color;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: block;
position: relative;
overflow: clip;
container: media-root / size;
}
.media-container:after, :scope.media-container:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px var(--media-border);
position: absolute;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, light-dark(#000, #fff));
}
@media (prefers-reduced-motion: reduce) {
.media-container, :scope.media-container {
transition-duration: 50ms;
}
}
@media (forced-colors: active) {
.media-container:after, :scope.media-container:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 0 0 1px canvastext;
}
.media-container:focus-visible, :scope.media-container:focus-visible {
outline-color: canvastext;
}
}
@media (pointer: fine) {
.media-container:not([data-controls-visible]), :scope.media-container:not([data-controls-visible]) {
cursor: none;
}
}
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-object-fit: contain;
--media-video-border-radius: 0;
}
.media-container:fullscreen:after, :scope.media-container:fullscreen:after {
content: "";
display: none;
}
@media (width >= 1280px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.25;
}
}
@media (width >= 1536px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.5;
}
}
@media (width >= 1920px) {
.media-container:fullscreen, :scope.media-container:fullscreen {
--media-scale: 1.75;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-button {
width: var(--media-control-size);
height: var(--media-control-size);
min-height: calc(var(--media-spacing) * 0);
cursor: pointer;
touch-action: manipulation;
border-radius: var(--media-control-radius);
padding: calc(var(--media-spacing) * 0);
text-align: center;
color: inherit;
outline-offset: -2px;
will-change: scale;
-webkit-user-select: none;
user-select: none;
corner-shape: var(--media-control-corner-shape);
text-shadow: inherit;
background-color: #0000;
border-style: solid;
border-width: 0;
outline: 2px solid #0000;
flex-shrink: 0;
place-items: center;
transition-property: background-color, color, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
display: grid;
}
@media (hover: hover) {
.media-button:not([aria-disabled="true"]):hover {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
}
.media-button:focus-visible {
outline-offset: 2px;
outline-color: var(--media-focus-ring-color, white);
}
.media-button:not([aria-disabled="true"]):focus-visible {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
.media-button:not([aria-disabled="true"]):active {
scale: .97;
}
.media-button[aria-disabled="true"] {
cursor: not-allowed;
opacity: .5;
}
.media-button:not([aria-disabled="true"])[aria-expanded="true"] {
background-color: var(--media-accent);
color: var(--media-accent-foreground);
}
@media (prefers-reduced-motion: reduce) {
.media-button {
will-change: auto;
transition-property: background-color, color;
scale: 1;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-slider {
cursor: pointer;
border-radius: 99px;
outline-style: none;
flex: 1;
justify-content: center;
align-items: center;
display: flex;
position: relative;
}
.media-slider[data-orientation="horizontal"] {
height: var(--media-slider-height, calc(var(--media-spacing) * 8));
min-width: calc(var(--media-spacing) * 20);
}
.media-slider[data-orientation="vertical"] {
height: calc(var(--media-spacing) * 20);
width: calc(var(--media-spacing) * 8);
min-width: calc(var(--media-spacing) * 0);
}
.media-volume-slider-thumb {
width: calc(var(--media-spacing) * 3);
height: calc(var(--media-spacing) * 3);
opacity: 1;
scale: 1;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *) {
outline-offset: -4px;
outline: 4px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #0000001a, 0 1px 3px #00000059, 0 1px 2px -1px #00000059;
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
pointer-events: none;
inset: calc(var(--media-spacing) * -1);
border-radius: inherit;
opacity: 0;
content: "";
position: absolute;
scale: .5;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 2px;
}
@media (hover: hover) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):hover {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-offset: 0px;
outline-color: currentColor;
}
@supports (color: color-mix(in lab, red, red)) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible {
outline-color: color-mix(in oklab, currentcolor 15%, transparent);
}
}
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):focus-visible:after {
content: "";
opacity: 1;
scale: 1;
}
@media (prefers-reduced-motion: no-preference) {
.media-volume-slider-thumb:where(.media-skin:not(.media-skin--minimal), .media-skin:not(.media-skin--minimal) *):after {
content: "";
transition-property: opacity, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *) {
outline-offset: -2px;
outline: 2px solid #0000;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 1px #00000026, 0 1px 3px #00000026, 0 1px 2px -1px #00000026;
}
.media-volume-slider-thumb:where(.media-skin--minimal, .media-skin--minimal *):focus-visible {
outline-offset: 2px;
outline-color: #fff;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-volume-popover {
margin: calc(var(--media-spacing) * 0);
border-radius: var(--media-control-radius);
background-color: var(--media-popover);
padding-inline: calc(var(--media-spacing) * 0);
padding-block: calc(var(--media-spacing) * 3);
color: var(--media-popover-foreground);
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 0 calc(1px + 0px) var(--media-border), 0 0 #0000;
box-shadow: var(--media-shadow-sm);
backdrop-filter: blur(16px) saturate(150%);
border-style: solid;
border-width: 0;
transition-property: opacity, filter, transform, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
overflow: visible;
}
.media-volume-popover:before {
pointer-events: auto;
content: "";
position: absolute;
}
.media-volume-popover:after {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
z-index: 10;
border-radius: inherit;
content: "";
position: absolute;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff1a, inset 0 0 0 1px #ffffff0d;
}
.media-volume-popover[data-ending-style] {
opacity: 0;
filter: blur(4px);
transition-duration: 50ms;
transform: none;
}
.media-volume-popover[data-starting-style] {
transform: translate(var(--media-popup-translate-x-distance, 0),var(--media-popup-translate-y-distance, 0));
opacity: 0;
filter: blur(4px);
}
.media-volume-popover[data-side="bottom"] {
transform-origin: top;
--media-popup-translate-y-distance: calc(var(--media-popup-translate-distance) * -1);
}
.media-volume-popover[data-side="bottom"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
bottom: 100%;
}
.media-volume-popover[data-side="left"] {
transform-origin: 100%;
--media-popup-translate-x-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="left"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
left: 100%;
}
.media-volume-popover[data-side="right"] {
transform-origin: 0;
padding: calc(var(--media-spacing) * 0);
padding-inline: calc(var(--media-spacing) * 3);
backdrop-filter: none;
--media-popover-side-offset: 0rem;
--media-popup-translate-x-distance: calc(var(--media-popup-translate-distance) * -1);
background-color: #0000;
border-radius: 0;
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0, 0 0 #0000 !important;
}
.media-volume-popover[data-side="right"]:before {
inset-block: calc(var(--media-spacing) * 0);
content: "";
width: var(--media-popover-side-offset);
right: 100%;
}
.media-volume-popover[data-side="right"]:after {
content: "";
display: none;
}
.media-volume-popover[data-side="top"] {
transform-origin: bottom;
--media-popup-translate-y-distance: var(--media-popup-translate-distance);
}
.media-volume-popover[data-side="top"]:before {
inset-inline: calc(var(--media-spacing) * 0);
content: "";
height: var(--media-popover-side-offset);
top: 100%;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover {
transition-duration: 0s !important;
}
.media-volume-popover[data-ending-style] {
filter: none !important;
transition-duration: 0s !important;
transform: none !important;
}
.media-volume-popover[data-starting-style] {
filter: none !important;
transform: none !important;
}
}
@media (prefers-contrast: more) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
@media (forced-colors: active) {
.media-volume-popover {
color: canvastext;
background-color: canvas;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px canvastext, inset 0 0 0 1px canvastext;
}
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *):after {
content: "";
display: none;
}
.media-volume-popover:where(.media-skin--minimal, .media-skin--minimal *)[data-starting-style] {
filter: none;
}
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: .95;
}
@media (prefers-reduced-motion: reduce) {
.media-volume-popover:is([data-starting-style], [data-ending-style]) {
scale: 1 !important;
}
}
@media (prefers-reduced-transparency: reduce) {
.media-volume-popover {
background-color: var(--media-background);
backdrop-filter: none;
}
.media-volume-popover:after {
content: "";
box-shadow: 0 0 #0000, 0 0 #0000, 0 0 #0000, 0 0 #0000, inset 0 1px #ffffff40, inset 0 0 0 1px #ffffff20;
}
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-buffering-indicator {
pointer-events: none;
inset: calc(var(--media-spacing) * 0);
color: #fff;
place-content: center;
display: none;
position: absolute;
}
.media-buffering-indicator:not([data-visible]) {
--media-spinner-animation: none;
}
.media-buffering-indicator:before {
inset: calc(var(--media-spacing) * 0);
content: "";
backdrop-filter: blur(8px);
background-color: oklab(0% none none / .35);
position: absolute;
}
.media-buffering-indicator[data-visible] {
display: grid;
}
@media (prefers-reduced-motion: reduce) {
.media-buffering-indicator {
--media-spinner-animation: none;
}
}
.media-buffering-indicator-spinner-icon {
z-index: 30;
width: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
height: var(--media-icon-size, calc(var(--media-spacing) * 4.5));
filter: drop-shadow(0 1px 0 var(--media-shadow-current-color));
position: relative;
}
}
@scope (.media-skin--minimal.media-skin--live-audio) {
.media-slider-buffer {
pointer-events: none;
border-radius: inherit;
background-color: currentColor;
position: absolute;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-buffer {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-buffer, &[data-seeking] .media-slider-buffer {
transition-duration: 0s;
}
}
.media-slider-buffer[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-buffer)) 0 0 round 99px);
}
.media-slider-buffer[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-buffer)) 0 0 0 round 99px);
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-buffer {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-fill {
pointer-events: none;
border-radius: inherit;
background-color: var(--media-primary);
position: absolute;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill, &[data-seeking] .media-slider-fill {
transition-duration: 0s;
}
}
.media-slider-fill[data-orientation="horizontal"] {
inset-block: calc(var(--media-spacing) * 0);
left: calc(var(--media-spacing) * 0);
width: 100%;
clip-path: inset(0 calc(100.0% - var(--media-slider-fill)) 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="horizontal"] {
clip-path: inset(0 calc(100.0% - var(--media-slider-pointer)) 0 0 round 99px);
}
}
.media-slider-fill[data-orientation="vertical"] {
inset-inline: calc(var(--media-spacing) * 0);
bottom: calc(var(--media-spacing) * 0);
height: 100%;
clip-path: inset(calc(100.0% - var(--media-slider-fill)) 0 0 0 round 99px);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-fill[data-orientation="vertical"] {
clip-path: inset(calc(100.0% - var(--media-slider-pointer)) 0 0 0 round 99px);
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-fill {
transition-property: clip-path;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
}
.media-slider-thumb {
top: 50%;
left: var(--media-slider-fill);
z-index: 10;
border-radius: var(--media-control-radius);
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
transition-property: none;
position: absolute;
translate: -50% -50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
scale: .9;
}
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="horizontal"] {
left: var(--media-slider-pointer);
}
}
.media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-fill));
left: 50%;
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb[data-orientation="vertical"] {
top: calc(100.0% - var(--media-slider-pointer));
}
}
@media (prefers-reduced-motion: no-preference) {
.media-slider-thumb {
transition-property: opacity, height, width, outline-offset, left, top, scale;
transition-duration: .1s;
transition-timing-function: cubic-bezier(0, 0, .2, 1);
}
@scope (.media-slider) {
&[data-dragging] .media-slider-thumb {
transition-property: opacity, height, width, outline-offset, scale;
transition-duration: .15s;
transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}
}
}
.media-slider-track {
isolation: isolate;
-webkit-user-select: none;
user-select: none;
background-color: currentColor;
border-radius: 99px;
width: 100%;
position: relative;
overflow: hidden;
}
@supports (color: color-mix(in lab, red, red)) {
.media-slider-track {
background-color: color-mix(in oklab, currentcolor 20.0%, transparent);
}
}
.media-slider-track[data-orientation="horizontal"] {
height: calc(var(--media-spacing) * 1);
}
.media-slider-track[data-orientation="vertical"] {
height: 100%;
width: calc(var(--media-spacing) * 1);
}
}
}
@layer utilities;