UNPKG

@7sage/vidstack

Version:

UI component library for building high-quality, accessible video and audio experiences on the web.

1,875 lines (1,576 loc) 66.5 kB
/* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Player * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ [data-media-player] { width: 100%; display: inline-flex; align-items: center; position: relative; contain: style; box-sizing: border-box; user-select: none; } [data-media-player] * { box-sizing: border-box; } :where([data-media-player][data-view-type='video']) { aspect-ratio: 16 / 9; } [data-media-player]:focus, [data-media-player]:focus-visible { outline: none; } [data-media-player][data-view-type='video'][data-started]:not([data-controls]) { pointer-events: auto; cursor: none; } [data-media-player] slot { display: contents; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Provider * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ [data-media-provider] { display: flex; position: relative; box-sizing: border-box; align-items: center; border-radius: inherit; width: 100%; aspect-ratio: inherit; overflow: hidden; } [data-media-player]:not([data-view-type='audio']) [data-media-provider], [data-media-player][data-fullscreen] [data-media-provider] { height: 100%; } [data-media-player][data-view-type='audio'] [data-media-provider] { display: contents; background-color: unset; } [data-media-provider] audio { width: 100%; } :where(video:not([width]):not([height]), iframe:not([width]):not([height])) { width: 100%; aspect-ratio: 16 / 9; } :where([data-media-provider] video), :where([data-media-provider] iframe) { aspect-ratio: inherit; display: inline-block; height: auto; object-fit: contain; touch-action: manipulation; border-radius: inherit; width: 100%; } [data-media-provider] iframe { height: 100%; } [data-media-player][data-view-type='audio'] video, [data-media-player][data-view-type='audio'] iframe { display: none; } [data-media-player][data-fullscreen] video { height: 100%; } [data-media-provider] iframe:not([src]) { display: none; } iframe.vds-youtube[data-no-controls] { height: 1000%; } .vds-blocker { position: absolute; inset: 0; width: 100%; height: auto; aspect-ratio: inherit; pointer-events: auto; border-radius: inherit; z-index: 1; } [data-ended] .vds-blocker { background-color: black; } .vds-icon:focus { outline: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Google Cast * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ .vds-google-cast { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; flex-direction: column; color: #dedede; font-family: sans-serif; font-weight: 500; } .vds-google-cast svg { --size: max(18%, 40px); width: var(--size); height: var(--size); margin-bottom: 8px; } .vds-google-cast-info { font-size: calc(var(--media-height) / 100 * 6); } :where(.vds-buffering-indicator) { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; pointer-events: none; z-index: 1; } :where(.vds-buffering-indicator) :where(.vds-buffering-icon, .vds-buffering-spinner) { opacity: 0; pointer-events: none; transition: var(--media-buffering-transition, opacity 200ms ease); } :where(.vds-buffering-indicator) :where(.vds-buffering-icon, svg.vds-buffering-spinner, .vds-buffering-spinner svg) { width: var(--media-buffering-size, 96px); height: var(--media-buffering-size, 96px); } :where(.vds-buffering-indicator) :where(.vds-buffering-track, circle[data-part='track']) { color: var(--media-buffering-track-color, #f5f5f5); opacity: var(--media-buffering-track-opacity, 0.25); stroke-width: var(--media-buffering-track-width, 8); } :where(.vds-buffering-indicator) :where(.vds-buffering-track-fill, circle[data-part='track-fill']) { color: var(--media-buffering-track-fill-color, var(--media-brand)); opacity: var(--media-buffering-track-fill-opacity, 0.75); stroke-width: var(--media-buffering-track-fill-width, 9); stroke-dasharray: 100; stroke-dashoffset: var(--media-buffering-track-fill-offset, 50); } :where([data-buffering]) :where(.vds-buffering-icon, .vds-buffering-spinner) { opacity: 1; animation: var(--media-buffering-animation, vds-buffering-spin 1s linear infinite); } @keyframes vds-buffering-spin { to { transform: rotate(360deg); } } @media (prefers-reduced-motion) { :where([data-buffering]) :where(.vds-buffering-icon, .vds-buffering-spinner) { animation-duration: 8s; } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Buttons * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-button) { -webkit-tap-highlight-color: transparent; position: relative; display: inline-flex; justify-content: center; align-items: center; user-select: none; appearance: none; background: none; outline: none; border: none; border-radius: var(--media-button-border-radius, 8px); width: var(--media-button-size, 40px); height: var(--media-button-size, 40px); transition: transform 0.2s ease-out; contain: layout style; cursor: pointer; -webkit-user-select: none; -webkit-tap-highlight-color: transparent; touch-action: manipulation; flex-shrink: 0; } .vds-button { border: var(--media-button-border); color: var(--media-button-color, var(--media-controls-color, #f5f5f5)); padding: var(--media-button-padding, 0px); } :where([data-fullscreen] .vds-button) { width: var(--media-fullscreen-button-size, 42px); height: var(--media-fullscreen-button-size, 42px); } @media screen and (max-width: 599px) { :where([data-fullscreen] .vds-button) { width: var(--media-sm-fullscreen-button-size, 42px); height: var(--media-sm-fullscreen-button-size, 42px); } } :where(.vds-button .vds-icon) { width: var(--media-button-icon-size, 80%); height: var(--media-button-icon-size, 80%); border-radius: var(--media-button-border-radius, 8px); } :where(.vds-menu-button .vds-icon) { display: flex !important; } :where(.vds-button[aria-hidden='true']) { display: none !important; } @media (hover: hover) and (pointer: fine) { .vds-button:hover { background-color: var(--media-button-hover-bg, rgb(255 255 255 / 0.2)); } .vds-button:hover { transform: var(--media-button-hover-transform, scale(1.05)); transition: var(--media-button-hover-transition, transform 0.2s ease-in); } .vds-button[aria-expanded='true'] { transform: unset; } } @media (pointer: coarse) { .vds-button:hover { border-radius: var(--media-button-touch-hover-border-radius, 100%); background-color: var(--media-button-touch-hover-bg, rgb(255 255 255 / 0.2)); } } :where(.vds-button:focus) { outline: none; } :where(.vds-button[data-focus], .vds-button:focus-visible) { box-shadow: var(--media-focus-ring); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Live Button * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-live-button) { min-width: auto; min-height: auto; width: var(--media-live-button-width, 40px); height: var(--media-live-button-height, 40px); padding: 0; display: flex; align-items: center; justify-content: center; cursor: pointer; user-select: none; appearance: none; background: none; outline: none; border: none; } :where(.vds-live-button-text) { font-family: var(--media-font-family, sans-serif); font-size: var(--media-live-button-font-size, 12px); font-weight: var(--media-live-button-font-weight, 600); letter-spacing: var(--media-live-button-letter-spacing, 1.5px); transition: color 0.3s ease; } .vds-live-button-text { background-color: var(--media-live-button-bg, #8a8a8a); border-radius: var(--media-live-button-border-radius, 2px); color: var(--media-live-button-color, #161616); padding: var(--media-live-button-padding, 1px 4px); } :where(.vds-live-button[data-focus] .vds-live-button-text) { box-shadow: var(--media-focus-ring); } :where(.vds-live-button[data-edge]) { cursor: unset; } .vds-live-button[data-edge] .vds-live-button-text { background-color: var(--media-live-button-edge-bg, #dc2626); color: var(--media-live-button-edge-color, #f5f5f5); } @media (pointer: fine) { :where(.vds-live-button:hover) { background-color: unset; } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * States * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* Play Button */ .vds-button:not([data-paused]) .vds-play-icon, .vds-button[data-ended] .vds-play-icon, .vds-button[data-paused] .vds-pause-icon, .vds-button[data-ended] .vds-pause-icon, .vds-button:not([data-ended]) .vds-replay-icon, /* PIP Button */ .vds-button[data-active] .vds-pip-enter-icon, .vds-button:not([data-active]) .vds-pip-exit-icon, /* Fullscreen Button */ .vds-button[data-active] .vds-fs-enter-icon, .vds-button:not([data-active]) .vds-fs-exit-icon, /* Caption Button */ .vds-button:not([data-active]) .vds-cc-on-icon, .vds-button[data-active] .vds-cc-off-icon, /* Mute Button */ .vds-button:not([data-muted]) .vds-mute-icon, .vds-button:not([data-state='low']) .vds-volume-low-icon, .vds-button:not([data-state='high']) .vds-volume-high-icon { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Captions * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-captions) { /* Recommended settings in the WebVTT spec (https://www.w3.org/TR/webvtt1). */ --overlay-padding: var(--media-captions-padding, 1%); --cue-color: var(--media-user-text-color, var(--media-cue-color, white)); --cue-bg-color: var(--media-user-text-bg, var(--media-cue-bg, rgba(0, 0, 0, 0.7))); --cue-default-font-size: var(--media-cue-font-size, calc(var(--overlay-height) / 100 * 4.5)); --cue-font-size: calc(var(--cue-default-font-size) * var(--media-user-font-size, 1)); --cue-line-height: var(--media-cue-line-height, calc(var(--cue-font-size) * 1.2)); --cue-padding-x: var(--media-cue-padding-x, calc(var(--cue-font-size) * 0.6)); --cue-padding-y: var(--media-cue-padding-x, calc(var(--cue-font-size) * 0.4)); --cue-padding: var(--cue-padding-y) var(--cue-padding-x); position: absolute; inset: 0; z-index: 1; contain: layout style; margin: var(--overlay-padding); font-size: var(--cue-font-size); font-family: var(--media-user-font-family, sans-serif); box-sizing: border-box; pointer-events: none; user-select: none; word-spacing: normal; word-break: break-word; } :where([data-fullscreen][data-orientation='portrait'] .vds-captions) { --cue-default-font-size: var(--media-cue-font-size, calc(var(--overlay-width) / 100 * 4.5)); } :where([data-view-type='audio'] .vds-captions) { position: relative; margin: 0; } :where(.vds-captions[aria-hidden='true']) { opacity: 0; visibility: hidden; } .vds-captions[data-example] { opacity: 1 !important; visibility: visible !important; } :where([data-view-type='video'] .vds-captions [data-part='cue-display'][data-example]) { --cue-text-align: center; --cue-width: 100%; --cue-top: 90%; --cue-left: 0%; } :where([data-view-type='audio'] .vds-captions [data-part='cue-display']) { --cue-width: 100%; position: relative !important; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * VTT Cues * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-captions [data-part='cue-display']) { position: absolute; direction: ltr; overflow: visible; contain: content; top: var(--cue-top); left: var(--cue-left); right: var(--cue-right); bottom: var(--cue-bottom); width: var(--cue-width, auto); height: var(--cue-height, auto); box-sizing: border-box; transform: var(--cue-transform); text-align: var(--cue-text-align); writing-mode: var(--cue-writing-mode, unset); white-space: pre-line; unicode-bidi: plaintext; min-width: min-content; min-height: min-content; background-color: var(--media-user-display-bg, var(--media-cue-display-bg)); border-radius: var(--media-cue-display-border-radius); } .vds-captions [data-part='cue-display'] { padding: var(--media-cue-display-padding); } :where(.vds-captions[data-dir='rtl'] [data-part='cue-display']) { direction: rtl; } :where(.vds-captions [data-part='cue']) { display: inline-block; contain: content; font-variant: var(--media-user-font-variant); border: var(--media-cue-border, unset); border-radius: var(--media-cue-border-radius, 2px); backdrop-filter: var(--media-cue-backdrop, blur(8px)); line-height: var(--cue-line-height); box-sizing: border-box; box-shadow: var(--media-cue-box-shadow, var(--cue-box-shadow)); white-space: var(--cue-white-space, pre-wrap); outline: var(--cue-outline); text-shadow: var(--media-user-text-shadow, var(--cue-text-shadow)); } .vds-captions [data-part='cue'] { background-color: var(--cue-bg-color); color: var(--cue-color); padding: var(--cue-padding); } :where(.vds-captions [data-part='cue-display'][data-vertical] [data-part='cue']) { --cue-padding: var(--cue-padding-x) var(--cue-padding-y); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * VTT Regions * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-captions [data-part='region']) { --anchor-x-percent: calc(var(--region-anchor-x) / 100); --anchor-x: calc(var(--region-width) * var(--anchor-x-percent)); --anchor-y-percent: calc(var(--region-anchor-y) / 100); --anchor-y: calc(var(--region-height) * var(--anchor-y-percent)); --vp-anchor-x: calc(var(--region-viewport-anchor-x) * 1%); --vp-anchor-y-percent: calc(var(--region-viewport-anchor-y) / 100); --vp-anchor-y: calc(var(--overlay-height) * var(--vp-anchor-y-percent)); position: absolute; display: inline-flex; flex-flow: column; justify-content: flex-start; width: var(--region-width); height: var(--region-height); min-height: 0px; max-height: var(--region-height); writing-mode: horizontal-tb; top: var(--region-top, calc(var(--vp-anchor-y) - var(--anchor-y))); left: var(--region-left, calc(var(--vp-anchor-x) - var(--anchor-x))); right: var(--region-right); bottom: var(--region-bottom); overflow: hidden; overflow-wrap: break-word; box-sizing: border-box; } :where(.vds-captions [data-part='region'][data-active]) { } :where(.vds-captions [data-part='region'][data-scroll='up']) { justify-content: end; } :where(.vds-captions [data-part='region'][data-active][data-scroll='up']) { transition: top 0.433s; } :where(.vds-captions [data-part='region'] > [data-part='cue-display']) { position: relative; width: auto; left: var(--cue-offset); height: var(--cue-height, auto); text-align: var(--cue-text-align); unicode-bidi: plaintext; margin-top: 2px; } :where(.vds-captions [data-part='region'] [data-part='cue']) { position: relative; border-radius: 0px; } :where(.vds-chapter-title) { --color: var(--media-chapter-title-color, rgba(255 255 255 / 0.64)); display: inline-block; font-family: var(--media-font-family, sans-serif); font-size: var(--media-chapter-title-font-size, 16px); font-weight: var(--media-chapter-title-font-weight, 400); color: var(--color); flex: 1 1 0%; padding-inline: 6px; overflow: hidden; text-align: start; white-space: nowrap; text-overflow: ellipsis; } .vds-chapter-title::before { content: var(--media-chapter-title-separator, '\2022'); display: inline-block; margin-right: var(--media-chapter-title-separator-gap, 6px); color: var(--media-chapter-title-separator-color, var(--color)); } .vds-chapter-title:empty::before { content: ''; margin: 0; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Controls * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-controls), :where(.vds-controls-group) { position: relative; display: inline-block; width: 100%; box-sizing: border-box; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Audio Controls * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where([data-view-type='audio'] .vds-controls) { display: inline-block; max-width: 100%; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Video Controls * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where([data-view-type='video'] .vds-controls) { display: flex; position: absolute; flex-direction: column; inset: 0; width: 100%; height: 100%; z-index: 10; opacity: 0; visibility: hidden; pointer-events: none; padding: var(--media-controls-padding, 0px); transition: var(--media-controls-out-transition, opacity 0.2s ease-out); } :where([data-view-type='video'] .vds-controls[data-visible]) { opacity: 1; visibility: visible; transition: var(--media-controls-in-transition, opacity 0.2s ease-in); } :where(.vds-controls-spacer) { flex: 1 1 0%; pointer-events: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Gesture * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-gestures) { display: contents; } :where(.vds-gesture) { position: absolute; display: block; contain: content; z-index: 0; opacity: 0; visibility: hidden; pointer-events: none !important; } :where(.vds-icon svg) { display: block; width: 100%; height: 100%; vertical-align: middle; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Keyboard Action * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-kb-action.hidden) { opacity: 0; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Keyboard Text * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-kb-text-wrapper) { text-align: center; position: absolute; left: 0; right: 0; top: var(--media-kb-text-top, 10%); z-index: 20; pointer-events: none; } :where(.vds-kb-text) { display: inline-block; font-size: var(--media-kb-text-size, 150%); font-family: var(--media-font-family, sans-serif); backdrop-filter: blur(2px); border-radius: var(--media-kb-border-radius, 2.5px); pointer-events: none; } .vds-kb-text { color: var(--media-kb-text-color, var(--default-color)); background-color: var(--media-kb-text-bg, var(--default-bg)); padding: var(--media-kb-text-padding, 10px 20px); } .light .vds-kb-text { --default-color: #1a1a1a; --default-bg: rgb(240 240 240 / 0.6); } .dark .vds-kb-text { --default-color: #f5f5f5; --default-bg: rgb(10 10 10 / 0.6); } :where(.vds-kb-text:empty) { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Keyboard Bezel * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-kb-bezel) { --size: var(--media-kb-bezel-size, 52px); position: absolute; left: 50%; top: 45%; display: flex; flex-direction: column; align-items: center; justify-content: center; width: var(--size); height: var(--size); margin-left: calc(-1 * calc(var(--size) / 2)); margin-right: calc(-1 * calc(var(--size) / 2)); z-index: 20; backdrop-filter: blur(2px); background-color: var(--media-kb-bezel-bg, var(--default-bg)); animation: var(--media-kb-bezel-animation, vds-bezel-fade 0.35s linear 1 normal forwards); border-radius: var(--media-kb-bezel-border-radius, calc(var(--size) / 2)); pointer-events: none; } .vds-kb-bezel:not(:has(svg)) { display: none !important; } .light .vds-kb-bezel { --default-bg: rgb(255 255 255 / 0.6); } .dark .vds-kb-bezel { --default-bg: rgb(10 10 10 / 0.6); } @media (prefers-reduced-motion) { :where(.vds-kb-bezel) { animation: none; } } :where(.vds-kb-bezel:has(slot:empty)) { opacity: 0; } :where(.vds-kb-action[data-action='seek-forward'] .vds-kb-bezel) { top: 45%; left: unset; right: 10%; } :where(.vds-kb-action[data-action='seek-backward'] .vds-kb-bezel) { top: 45%; left: 10%; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Keyboard Icon * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-kb-icon) { --size: var(--media-kb-icon-size, 38px); width: var(--size); height: var(--size); } .vds-kb-icon { color: var(--media-kb-icon-color, var(--default-color)); } .light .vds-kb-icon { --default-color: #1a1a1a; } .dark .vds-kb-icon { --default-color: #f5f5f5; } @keyframes vds-bezel-fade { 0% { opacity: 1; } 100% { opacity: 0; transform: scale(2); } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Theme * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-items) { --color-inverse: var(--media-menu-color-inverse, var(--default-inverse)); --color-gray-50: var(--media-menu-color-gray-50, var(--default-gray-50)); --color-gray-100: var(--media-menu-color-gray-100, var(--default-gray-100)); --color-gray-200: var(--media-menu-color-gray-200, var(--default-gray-200)); --color-gray-300: var(--media-menu-color-gray-300, var(--default-gray-300)); --color-gray-400: var(--media-menu-color-gray-400, var(--default-gray-400)); --text-color: var(--media-menu-text-color, var(--default-text)); --text-secondary-color: var(--media-menu-text-secondary-color, var(--default-text-secondary)); --root-border: var(--media-menu-border, var(--default-root-border)); } .light .vds-menu-items { --default-inverse: black; --default-gray-50: rgb(80 80 80 / 0.15); --default-gray-100: rgb(80 80 80 / 0.45); --default-gray-200: rgb(235 235 235 / 0.6); --default-gray-300: rgb(238 238 238); --default-gray-400: rgb(250 250 250); --default-text: #1a1a1a; --default-text-secondary: #6b6b6b; --default-root-border: 1px solid rgb(10 10 10 / 0.1); } .dark .vds-menu-items { --default-inverse: white; --default-gray-50: rgb(245 245 245 / 0.1); --default-gray-100: rgb(245 245 245 / 0.45); --default-gray-200: rgb(10 10 10 / 0.6); --default-gray-300: rgb(27 27 27); --default-gray-400: rgb(10 10 10); --default-text: #f5f5f5; --default-text-secondary: #8a8a8a; --default-root-border: 1px solid rgb(255 255 255 / 0.1); } :where(.vds-menu-items) { --font-family: var(--media-font-family, sans-serif); --font-size: var(--media-menu-font-size, 14px); --font-weight: var(--media-menu-font-weight, 500); --root-bg: var(--media-menu-bg, var(--color-gray-400)); --root-padding: var(--media-menu-padding, 12px); --root-border-radius: var(--media-menu-border-radius, 4px); --divider: var(--media-menu-divider, 1px solid var(--color-gray-50)); --section-bg: var(--media-menu-section-bg, var(--color-gray-300)); --section-border: var(--media-menu-section-border); --section-divider: var(--media-menu-section-divider, var(--divider)); --top-bar-bg: var(--media-menu-top-bar-bg, var(--color-gray-200)); --top-bar-divider: var(--media-menu-divider, transparent); --text-hint-color: var(--media-menu-hint-color, var(--text-secondary-color)); --chapter-divider: var(--media-chapters-divider, var(--divider)); --chapter-active-bg: var(--media-chapters-item-active-bg, var(--color-gray-50)); --chapter-active-border-left: var(--media-chapters-item-active-border-left); --chapter-progress-bg: var(--media-chapters-progress-bg, var(--color-inverse)); --chapter-time-font-size: var(--media-chapters-time-font-size, 12px); --chapter-time-font-weight: var(--media-chapters-time-font-weight, 500); --chapter-time-gap: var(--media-chapters-time-gap, 6px); --chapter-duration-bg: var(--media-chapters-duration-bg); --item-border: var(--media-menu-item-border, 0); --item-bg: var(--media-menu-item-bg, transparent); --item-hover-bg: var(--media-menu-item-hover-bg, var(--color-gray-50)); --item-icon-size: var(--media-menu-item-icon-size, 18px); --item-padding: var(--media-menu-item-padding, 10px); --item-min-height: var(--media-menu-item-height, 40px); --item-border-radius: var(--media-menu-item-border-radius, 2px); --scrollbar-track-bg: var(--media-menu-scrollbar-track-bg, transparent); --scrollbar-thumb-bg: var(--media-menu-scrollbar-thumb-bg, var(--color-gray-50)); --webkit-scrollbar-bg: var(--color-gray-400); --webkit-scrollbar-track-bg: var(--media-menu-scrollbar-track-bg, var(--color-gray-50)); --checkbox-bg: var(--media-menu-checkbox-bg, var(--color-gray-100)); --checkbox-active-bg: var(--media-menu-checkbox-bg-active, #1ba13f); --checkbox-handle-bg: var(--media-menu-checkbox-handle-bg, #f5f5f5); --checkbox-handle-border: var(--media-menu-checkbox-handle-border); --radio-icon-color: var(--media-menu-radio-icon-color, var(--text-color)); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu[data-root] media-menu[data-root]) { display: contents; } :where(.vds-menu) { font-family: var(--font-family); font-size: var(--font-size); font-weight: var(--font-weight); } :where(.vds-menu[data-disabled][data-root]) { display: none; } :where(.vds-menu[data-submenu]) { display: inline-block; } :where(.vds-menu-items:focus) { outline: none; } :where(.vds-menu-item:focus, .vds-radio:focus) { outline: none; } :where( .vds-menu-item:focus-visible, .vds-menu-item[data-focus], .vds-radio:focus-visible, .vds-radio[data-focus] ) { outline: none; box-shadow: var(--media-focus-ring); } :where(.vds-menu[data-open] .vds-tooltip-content) { display: none !important; } .vds-menu-items [data-hidden] { display: none !important; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Scroll * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @media (prefers-reduced-motion: no-preference) { :where(.vds-menu-items) { scroll-behavior: smooth; } } :where(.vds-menu-items) { box-sizing: border-box; min-width: var(--media-menu-min-width, 280px); scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-track-bg); transform: translate3d(0, 0, 0); } :where(.vds-menu-items)::-webkit-scrollbar { background-color: var(--webkit-scrollbar-bg); border-radius: var(--root-border-radius); height: 6px; width: 5px; } :where(.vds-menu-items)::-webkit-scrollbar-track { background-color: var(--webkit-scrollbar-track-bg); border-radius: 4px; } :where(.vds-menu-items)::-webkit-scrollbar-thumb { background-color: var(--scrollbar-thumb-bg); border-radius: 4px; } :where(.vds-menu-items)::-webkit-scrollbar-corner { background-color: var(--scrollbar-thumb-bg); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Button * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-button) { outline: none; box-sizing: border-box; } :where(.vds-menu-button .vds-rotate-icon) { transition: transform 0.2s ease-out; } :where(.vds-menu-button[aria-expanded='true'] .vds-rotate-icon) { transform: rotate(var(--media-menu-icon-rotate-deg, 90deg)); transition: transform 0.2s ease-in; } :where(.vds-menu-button) { display: inline-flex; align-items: center; justify-content: center; } @media (prefers-reduced-motion) { :where(.vds-menu-button .vds-rotate-icon) { transition: unset; } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Items * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-items) { display: flex; align-items: center; flex-direction: column; font-family: var(--font-family); font-size: var(--font-size); font-weight: var(--font-weight); transition: height 0.35s ease; } @media (prefers-reduced-motion) { :where(.vds-menu-items) { transition: unset; } } :where(.vds-menu-items[data-root]) { background-color: var(--root-bg); border-radius: var(--root-border-radius); box-shadow: var(--media-menu-box-shadow); backdrop-filter: blur(4px); height: var(--menu-height, auto); will-change: width, height; overflow-y: auto; overscroll-behavior: contain; opacity: 0; z-index: 9999999; box-sizing: border-box; max-height: var(--media-menu-max-height, 250px); filter: var( --media-menu-filter, drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06)) ); } .vds-menu-items[data-root] { border: var(--root-border); padding: var(--root-padding); } :where([data-view-type='video']) :where(.vds-menu-items[data-root]) { max-height: var(--media-menu-video-max-height, calc(var(--player-height) * 0.7)); } :where(.vds-menu-items[data-transition='height']) { --scrollbar-thumb-bg: rgba(0, 0, 0, 0); pointer-events: none; overflow: hidden; } .vds-menu-button[aria-disabled='true'], .vds-menu-item[aria-disabled='true'], .vds-menu-item[data-disabled] { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Items Animation * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-items[data-root]) { --enter-transform: translateY(0px); --exit-transform: translateY(12px); } /* Mobile Popup */ :where(.vds-menu-items[data-root]:not([data-placement])) { --enter-transform: translateY(-24px); } :where(.vds-menu-items[data-root][aria-hidden='true']) { animation: var(--media-menu-exit-animation, vds-menu-exit 0.2s ease-out); } :where(.vds-menu-items[data-root][aria-hidden='false']) { animation: var(--media-menu-enter-animation, vds-menu-enter 0.3s ease-out); animation-fill-mode: forwards; } /* Bottom */ :where(.vds-menu-items[data-placement~='bottom']) { --enter-transform: translateY(0); --exit-transform: translateY(-12px); } @keyframes vds-menu-enter { from { opacity: 0; transform: var(--exit-transform); } to { opacity: 1; transform: var(--enter-transform); } } @keyframes vds-menu-exit { from { opacity: 1; transform: var(--enter-transform); } to { opacity: 0; transform: var(--exit-transform); } } @media (prefers-reduced-motion) { :where(.vds-menu-items) { animation: none; opacity: 1; } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Portal * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(media-menu-portal) { display: contents; } :where(.vds-menu-items[data-root]:not([data-placement])) { position: fixed; left: 16px; right: 16px; top: unset; bottom: 0; max-height: var(--media-sm-menu-portrait-max-height, 40vh); max-height: var(--media-sm-menu-portrait-max-height, 40dvh); } :where(.vds-menu-items[data-root]:not([data-placement])) { max-width: 480px; margin: 0 auto; } @media (orientation: landscape) and (pointer: coarse) { :where(.vds-menu-items[data-root]:not([data-placement])) { max-height: var(--media-sm-menu-landscape-max-height, min(70vh, 400px)); max-height: var(--media-sm-menu-landscape-max-height, min(70dvh, 400px)); } } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Submenu * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu[data-submenu] .vds-menu-button) { display: flex; align-items: center; justify-content: flex-start; } :where(.vds-menu-items[data-submenu]) { width: 100%; } :where(.vds-menu[aria-hidden='true']), :where(.vds-menu-items[data-submenu][aria-hidden='true']) { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Item * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-item, .vds-radio) { position: relative; -webkit-tap-highlight-color: transparent; user-select: none; display: flex; align-items: center; justify-content: left; width: 100%; appearance: none; border: 0; border-radius: var(--item-border-radius); box-sizing: border-box; min-height: var(--item-min-height); font-size: var(--font-size); outline: none; } .vds-menu-item, .vds-radio { color: var(--text-color); background-color: var(--item-bg); padding: var(--item-padding); } .vds-menu-item:focus-visible, .vds-menu-item[data-focus], .vds-radio:focus-visible, .vds-radio[data-focus] { cursor: pointer; background-color: var(--item-hover-bg); } @media (hover: hover) and (pointer: fine) { .vds-menu-item[role]:hover, .vds-radio:hover { cursor: pointer; background-color: var(--item-hover-bg); } } :where(.vds-menu-items[data-submenu]) { align-items: flex-start; justify-content: center; flex-direction: column; } :where(.vds-menu-item[aria-expanded='true']) { font-weight: bold; border-radius: 0; border-top-left-radius: var(--item-border-radius); border-top-right-radius: var(--item-border-radius); } .vds-menu-item[aria-expanded='true'] { border-bottom: var(--top-bar-divider); } :where(.vds-menu-item[aria-expanded='true']) { position: sticky; top: calc(-1 * var(--root-padding)); left: 0; width: 100%; z-index: 10; backdrop-filter: blur(4px); margin-bottom: 4px; } .vds-menu-item[aria-expanded='true'] { background-color: var(--top-bar-bg); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Item Parts * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-item-label) { flex: 1 0 0%; text-align: start; } :where(.vds-menu-item .vds-icon, .vds-radio .vds-icon) { --size: var(--item-icon-size); width: var(--size); height: var(--size); margin-right: var(--media-menu-item-icon-spacing, 6px); } :where(.vds-menu-open-icon, .vds-menu-close-icon) { --size: var(--media-menu-arrow-icon-size, 18px); width: var(--size); height: var(--size); } :where(.vds-menu-item-hint, .vds-menu-open-icon, .vds-radio-hint) { color: var(--text-hint-color); font-size: var(--media-menu-hint-font-size, 13px); font-weight: var(--media-menu-hint-font-weight, 400); } :where(.vds-menu-items .vds-menu-open-icon) { margin-right: 0; } :where(.vds-menu-items) :where(.vds-menu-item-hint, .vds-menu-open-icon) { margin-left: auto; } :where(.vds-menu-items) :where(.vds-menu-item-hint + .vds-menu-open-icon), :where(.vds-menu-item-hint + media-icon .vds-menu-open-icon), :where(.vds-menu-item-hint + slot > .vds-menu-open-icon) { margin-left: 2px; } :where(.vds-menu-item[aria-hidden='true']), :where(.vds-menu-item[aria-expanded='true'] .vds-menu-open-icon) { display: none !important; } :where(.vds-menu-items) :where(.vds-menu-item[aria-disabled='true'], .vds-menu-item[data-disabled]) :where(.vds-menu-open-icon) { opacity: 0; } :where(.vds-menu-close-icon), :where(.vds-menu-item[aria-expanded='true'] > .vds-icon) { display: none !important; } :where(.vds-menu-item[aria-expanded='true'] .vds-menu-close-icon) { display: inline !important; margin-left: calc(-1 * var(--item-padding) / 2); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Checkbox * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-checkbox) { --checkbox-width: var(--media-menu-checkbox-width, 40px); --checkbox-height: var(--media-menu-checkbox-height, 18px); --checkbox-top: calc((var(--checkbox-height) - var(--checkbox-diameter)) / 2); --checkbox-diameter: var( --media-menu-checkbox-handle-diameter, calc(var(--checkbox-height) - 2px) ); --checkbox-gap: var(--media-menu-checkbox-gap, 2.5px); position: relative; display: inline-block; width: var(--checkbox-width); height: var(--checkbox-height); border-radius: calc(var(--checkbox-height) / 2); transition: 0.3s all ease-in-out; box-sizing: border-box; cursor: pointer; pointer-events: auto; } .vds-menu-checkbox { background-color: var(--checkbox-bg); } :where(.vds-menu-checkbox:focus-visible) { outline: none; box-shadow: var(--media-focus-ring); } .vds-menu-checkbox[aria-checked='true'] { background-color: var(--checkbox-active-bg); } :where(.vds-menu-checkbox)::after { content: ''; display: inline-block; width: var(--checkbox-diameter); height: var(--checkbox-diameter); border-radius: calc(var(--checkbox-diameter) / 2); position: absolute; top: var(--checkbox-top); transform: translateX(var(--checkbox-gap)); transition: 0.3s all ease-in-out; border: var(--checkbox-handle-border); box-sizing: border-box; } .vds-menu-checkbox::after { background-color: var(--checkbox-handle-bg); } :where(.vds-menu-checkbox[aria-checked='true'])::after { transform: translateX( calc(var(--checkbox-width) - var(--checkbox-diameter) - var(--checkbox-gap)) ); } @media (prefers-reduced-motion: no-preference) { :where(.vds-menu-checkbox[data-active])::after { width: calc(var(--checkbox-width) - calc(var(--checkbox-gap) * 2)); } } :where(.vds-menu-checkbox[aria-checked='true'][data-active])::after { transform: translateX(var(--checkbox-gap)); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Slider * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-items .vds-slider) { --media-slider-track-bg: var(--media-menu-slider-track-bg, var(--color-gray-50)); --media-slider-track-fill-bg: var(--media-menu-slider-track-fill-bg, var(--color-inverse)); --media-slider-height: var(--media-menu-slider-height, 32px); --track-focus-height: var(--track-height) !important; } :where(.vds-menu-items .vds-slider-thumb) { opacity: 1 !important; } :where(.vds-menu-slider-item.group) { flex-direction: column; } :where(.vds-menu-slider-title) { margin-top: 4px; } :where(.vds-menu-slider-body) { width: 100%; display: flex; align-items: center; margin-top: 6px; } :where(.vds-menu-slider-item .vds-icon) { margin: 0; color: var(--text-hint-color); } :where( .vds-menu-slider-item[data-min] .vds-icon.down, .vds-menu-slider-item[data-max] .vds-icon.up ) { color: var(--text-color); animation: 0.6s ease-in-out vds-slider-icon; transition: all 1.2s ease; } @keyframes vds-slider-icon { 0% { transform: scale(1); } 50% { transform: scale(1.25); } 100% { transform: scale(1); } } :where(.vds-menu-items .vds-slider-track-fill) { transition: opacity 0.3s ease; } :where(.vds-menu-items .vds-slider[data-active] .vds-slider-track-fill) { opacity: 0; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Radio * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-radio-group) { box-sizing: border-box; width: 100%; display: flex; flex-direction: column; } .vds-radio { cursor: pointer; contain: content; padding-left: calc(var(--item-icon-size) + var(--item-padding)); } .vds-radio[aria-checked='true'] { padding-left: 0; } .vds-radio .vds-icon { display: none; color: var(--radio-icon-color); } .vds-radio[aria-checked='true'] .vds-icon { display: inline-block; margin-left: 6px; } :where(.vds-radio-hint) { margin-left: auto; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Color Picker * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ .vds-color-picker { width: 32px; height: 32px; border: 0; background-color: transparent; outline: none; } .vds-color-picker::-webkit-color-swatch { border-radius: 2px; } .vds-color-picker::-moz-color-swatch { border-radius: 2px; } .vds-color-picker:focus-visible::-webkit-color-swatch { box-shadow: var(--media-focus-ring); } .vds-color-picker:focus-visible::-moz-color-swatch { box-shadow: var(--media-focus-ring); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Menu Section * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-menu-section) { width: 100%; } :where(.vds-menu-item + .vds-menu-section) { margin-top: 8px; } :where(.vds-menu-section + .vds-menu-section) { margin-top: 24px; } :where(.vds-menu-section:first-child) { margin-top: 8px; } :where(.vds-menu-section:last-child) { margin-bottom: 8px; } :where(.vds-menu-section-title), :where(.vds-menu-slider-title) { width: 100%; display: flex; align-items: center; justify-content: space-between; color: var(--text-secondary-color); font-size: var(--media-menu-section-header-font-size, 12px); font-weight: var(--media-menu-section-header-font-weight, 500); padding-inline: 2px; } :where(.vds-menu-section-body) { width: 100%; } :where(.vds-menu-section-title + .vds-menu-section-body) { margin-top: var(--media-menu-section-gap, 8px); } .vds-menu-section-body { background-color: var(--section-bg); border: var(--section-border); border-radius: var(--media-menu-section-border-radius, 2px); } :where(.vds-menu-section:not([data-open]) .vds-menu-item:not(:last-child)) { border-bottom: var(--section-divider); } :where(.vds-menu-section-body .vds-menu:last-child > .vds-menu-item) { border-bottom: unset; } .vds-menu-section[data-open], .vds-menu-section[data-open] > .vds-menu-section-body { display: contents !important; background-color: transparent !important; } .vds-menu-section[data-open] > .vds-menu-section-title, .vds-menu-section[data-open] > .vds-menu-section-body > :not([data-open]) { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Chapters Menu * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-chapters-menu-items) { min-width: var(--media-chapters-min-width, var(--media-menu-min-width, 220px)); } .vds-chapters-menu-items { padding: var(--media-chapters-padding, 0); } :where(.vds-menu-items:has(.vds-chapters-radio-group[data-thumbnails])) { min-width: var(--media-chapters-with-thumbnails-min-width, 300px); } :where(.vds-chapter-radio) { border-radius: 0; } .vds-chapter-radio { border-bottom: var(--chapter-divider); padding: var(--item-padding); } .vds-chapter-radio[aria-checked='true'] { padding-left: var(--item-padding); } :where(.vds-chapter-radio:last-child) { border-bottom: 0; } .vds-chapter-radio[aria-checked='true'] { background-color: var(--chapter-active-bg); border-left: var(--chapter-active-border-left); } :where(.vds-chapter-radio[aria-checked='true']):after { content: ' '; width: var(--progress); height: var(--media-chapters-progress-height, 4px); position: absolute; bottom: 0; left: 0; } .vds-chapter-radio[aria-checked='true']:after { border-radius: var(--media-chapters-progress-border-radius, 0); background-color: var(--chapter-progress-bg); } .vds-chapters-radio-group :where(.vds-thumbnail) { margin-right: var(--media-chapters-thumbnail-gap, 12px); flex-shrink: 0; min-width: var(--media-chapters-thumbnail-min-width, 100px); min-height: var(--media-chapters-thumbnail-min-height, 56px); max-width: var(--media-chapters-thumbnail-max-width, 120px); max-height: var(--media-chapters-thumbnail-max-height, 68px); } .vds-chapters-radio-group .vds-thumbnail { border: var(--media-chapters-thumbnail-border, 0); } :where(.vds-chapters-radio-group .vds-chapter-radio-label) { color: var(--text-secondary-color); font-size: var(--font-size); font-weight: var(--font-weight); white-space: nowrap; } :where(.vds-chapter-radio[aria-checked='true'] .vds-chapter-radio-label) { color: var(--text-color); } :where(.vds-chapters-radio-group .vds-chapter-radio-start-time) { display: inline-block; letter-spacing: var(--media-chapters-start-time-letter-spacing, 0.4px); border-radius: var(--media-chapters-start-time-border-radius, 2px); font-size: var(--chapter-time-font-size); font-weight: var(--chapter-time-font-weight); margin-top: var(--chapter-time-gap); } .vds-chapters-radio-group .vds-chapter-radio-start-time { color: var(--text-secondary-color); background-color: var(--section-bg); padding: var(--media-chapters-start-time-padding, 1px 4px); } :where(.vds-chapters-radio-group .vds-chapter-radio-duration) { color: var(--text-hint-color); font-size: var(--chapter-time-font-size); font-weight: var(--chapter-time-font-weight); margin-top: var(--chapter-time-gap); } .vds-chapters-radio-group .vds-chapter-radio-duration { background-color: var(--chapter-duration-bg); border-radius: var(--media-chapters-duration-border-radius, 2px); } .vds-chapters-radio-group:not([data-thumbnails]) :where(.vds-thumbnail, media-thumbnail) { display: none; } :where(.vds-chapter-radio-content) { display: flex; align-items: flex-start; flex-direction: column; } :where(.vds-chapters-radio-group:not([data-thumbnails]) .vds-chapter-radio-content) { width: 100%; flex-direction: row; display: flex; flex-wrap: wrap; align-items: center; } :where(.vds-chapters-radio-group:not([data-thumbnails]) .vds-chapter-radio-start-time) { margin-top: 0; margin-left: auto; } :where(.vds-chapters-radio-group:not([data-thumbnails]) .vds-chapter-radio-duration) { margin-top: 4px; flex-basis: 100%; } .vds-menu-items[data-keyboard] .vds-chapters-radio-group:focus-within { padding: var(--media-chapters-focus-padding, 4px); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Poster * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-poster) { display: block; contain: content; position: absolute; top: 50%; transform: translateY(-50%); left: 0; opacity: 0; width: 100%; height: 100%; z-index: 1; border: 0; pointer-events: none; box-sizing: border-box; transition: opacity 0.2s ease-out; background-color: var(--media-poster-bg, black); } :where(.vds-poster img) { object-fit: inherit; object-position: inherit; pointer-events: none; user-select: none; -webkit-user-select: none; box-sizing: border-box; } .vds-poster :where(img) { border: 0; width: 100%; height: 100%; object-fit: contain; } :where(.vds-poster[data-hidden]) { display: none; } :where(.vds-poster[data-visible]) { opacity: 1; } .vds-poster:not(:defined), .vds-poster img:not([src]) { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Sliders * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider) { --width: var(--media-slider-width, 100%); --height: var(--media-slider-height, 48px); --thumb-size: var(--media-slider-thumb-size, 15px); --thumb-focus-size: var(--media-slider-focused-thumb-size, calc(var(--thumb-size) * 1.1)); --track-width: var(--media-slider-track-width, 100%); --track-height: var(--media-slider-track-height, 5px); --track-focus-width: var(--media-slider-focused-track-width, var(--track-width)); --track-focus-height: var(--media-slider-focused-track-height, calc(var(--track-height) * 1.25)); display: inline-flex; align-items: center; width: var(--width); height: var(--height); /** Prevent thumb flowing out of slider. */ margin: 0 calc(var(--thumb-size) / 2); position: relative; contain: layout style; outline: none; pointer-events: auto; cursor: pointer; user-select: none; touch-action: none; -webkit-user-select: none; -webkit-tap-highlight-color: transparent; } :where(.vds-slider[aria-hidden='true']) { display: none !important; } :where(.vds-s