/* ========================================================================== Reset ========================================================================== */ .media-minimal-skin *, .media-minimal-skin *::before, .media-minimal-skin *::after { box-sizing: border-box; margin: 0; } .media-minimal-skin img, .media-minimal-skin video, .media-minimal-skin svg { display: block; max-width: 100%; } .media-minimal-skin button { font: inherit; } @media (prefers-reduced-motion: no-preference) { .media-minimal-skin { interpolate-size: allow-keywords; } } /* ========================================================================== Root Container ========================================================================== */ .media-minimal-skin { position: relative; isolation: isolate; container: media-root / inline-size; overflow: clip; border-radius: var(--media-border-radius, 0.75rem); background: oklch(0 0 0); font-family: Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif; font-size: 0.8125rem; line-height: 1.5; letter-spacing: normal; -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto; } /* Border ring */ .media-minimal-skin::after { content: ""; position: absolute; inset: 0; z-index: 10; border-radius: inherit; box-shadow: inset 0 0 0 1px oklch(0 0 0 / 0.15); pointer-events: none; } @media (prefers-color-scheme: dark) { .media-minimal-skin::after { box-shadow: inset 0 0 0 1px oklch(1 0 0 / 0.15); } } /* Fullscreen */ .media-minimal-skin:fullscreen { border-radius: 0; } /* ========================================================================== Media Element ========================================================================== */ .media-minimal-skin > video { width: 100%; height: 100%; } /* ========================================================================== Poster Image ========================================================================== */ .media-minimal-skin > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: opacity 0.25s; pointer-events: none; } .media-minimal-skin > img:not([data-visible]) { opacity: 0; } /* ========================================================================== Overlay / Scrim ========================================================================== */ .media-minimal-skin .media-overlay { position: absolute; inset: 0; z-index: 1; border-radius: inherit; background-image: linear-gradient(to top, oklch(0 0 0 / 0.7), oklch(0 0 0 / 0.5) 7.5rem, oklch(0 0 0 / 0)); backdrop-filter: blur(0) saturate(1.2) brightness(0.9); opacity: 0; transition-property: opacity, backdrop-filter; transition-duration: 500ms; transition-delay: 500ms; transition-timing-function: ease-out; pointer-events: none; } @media (prefers-reduced-motion: reduce) { .media-minimal-skin .media-overlay { transition-duration: 100ms; } } .media-minimal-skin .media-controls[data-visible] ~ .media-overlay, .media-minimal-skin .media-error[data-visible] ~ .media-overlay { opacity: 1; transition-duration: 150ms; transition-delay: 0ms; } .media-minimal-skin .media-error[data-visible] ~ .media-overlay { backdrop-filter: blur(8px) saturate(1.2) brightness(0.9); } /* ========================================================================== Buffering Indicator ========================================================================== */ .media-minimal-skin .media-buffering-indicator { position: absolute; inset: 0; z-index: 10; display: flex; align-items: center; justify-content: center; color: oklch(1 0 0); pointer-events: none; } /* ========================================================================== Error Dialog ========================================================================== */ .media-minimal-skin .media-error { display: none; } .media-minimal-skin .media-error[data-visible] { position: absolute; inset: 0; z-index: 20; display: flex; align-items: center; justify-content: center; pointer-events: none; } .media-minimal-skin .media-error__dialog { display: none; transition-property: display, opacity, transform; transition-duration: 500ms; transition-delay: 100ms; transition-behavior: allow-discrete; transition-timing-function: linear( 0, 0.034 1.5%, 0.763 9.7%, 1.066 13.9%, 1.198 19.9%, 1.184 21.8%, 0.963 37.5%, 0.997 50.9%, 1 ); } .media-minimal-skin .media-error[data-visible] .media-error__dialog { display: flex; flex-direction: column; gap: 0.75rem; max-width: 16rem; padding: 1rem; color: oklch(1 0 0); font-size: 0.875rem; text-shadow: 0 1px 0 oklch(0 0 0 / 0.5); pointer-events: auto; transform: scale(1); opacity: 1; color: oklch(1 0 0); @starting-style { transform: scale(0.5); opacity: 0; } } .media-minimal-skin .media-error__content { display: flex; flex-direction: column; gap: 0.5rem; padding: 0.375rem 0; } .media-minimal-skin .media-error__title { font-weight: 600; line-height: 1.25; } .media-minimal-skin .media-error__actions { display: flex; gap: 0.5rem; } .media-minimal-skin .media-error__actions > * { flex: 1; } /* ========================================================================== Controls ========================================================================== */ .media-minimal-skin .media-controls { position: absolute; bottom: 0; inset-inline: 0; z-index: 10; container: media-controls / inline-size; display: flex; align-items: center; gap: 0.5rem; padding: 2rem 0.375rem 0.375rem 0.375rem; color: oklch(1 0 0); will-change: transform, filter, opacity; transition-property: transform, filter, opacity; transition-duration: 75ms; transition-delay: 0ms; transition-timing-function: ease-out; } .media-minimal-skin .media-controls:not([data-visible]) { opacity: 0; transform: translateY(100%); filter: blur(8px); transition-duration: 500ms; transition-delay: 500ms; pointer-events: none; } @media (prefers-reduced-motion: reduce) { .media-minimal-skin .media-controls:not([data-visible]) { scale: 1; transform: translateY(0); filter: blur(0); transition-duration: 100ms; } } @container media-root (width > 40rem) { .media-minimal-skin .media-controls { gap: 0.875rem; padding: 2.5rem 0.75rem 0.75rem 0.75rem; } } /* ========================================================================== Time Controls & Display ========================================================================== */ .media-minimal-skin .media-time-controls { display: flex; flex-direction: row-reverse; align-items: center; flex: 1; gap: 0.75rem; } .media-minimal-skin .media-time { display: flex; align-items: center; gap: 0.25rem; } .media-minimal-skin .media-time__value { font-variant-numeric: tabular-nums; text-shadow: 0 1px 0 oklch(0 0 0 / 0.2); } .media-minimal-skin .media-time__value--current, .media-minimal-skin .media-time__separator { display: none; } @container media-controls (width > 28rem) { .media-minimal-skin .media-time-controls { flex-direction: row; } .media-minimal-skin .media-time__value--duration, .media-minimal-skin .media-time__separator { color: oklch(1 0 0 / 0.5); } .media-minimal-skin .media-time__value--current, .media-minimal-skin .media-time__separator { display: inline; } } /* ========================================================================== Button Groups ========================================================================== */ .media-minimal-skin .media-button-group { display: flex; align-items: center; gap: 0.075rem; } @container media-root (width > 40rem) { .media-minimal-skin .media-button-group { gap: 0.125rem; } } /* ========================================================================== Buttons ========================================================================== */ /* Base button */ .media-minimal-skin .media-button { display: flex; align-items: center; justify-content: center; flex-shrink: 0; padding: 0.5rem 1rem; background: oklch(1 0 0); border: none; border-radius: 0.5rem; outline: 2px solid transparent; outline-offset: -2px; color: oklch(0 0 0); font-weight: 500; transition-property: background-color, color, outline-offset; transition-duration: 150ms; transition-timing-function: ease-out; cursor: pointer; user-select: none; } .media-minimal-skin .media-button:focus-visible { outline-color: oklch(1 0 0); outline-offset: 2px; } .media-minimal-skin .media-button[disabled] { opacity: 0.5; filter: grayscale(1); cursor: not-allowed; } /* Icon button variant */ .media-minimal-skin .media-button--icon { display: grid; width: 2.375rem; padding: 0; aspect-ratio: 1; background: transparent; color: oklch(1 0 0); } .media-minimal-skin .media-button--icon:hover, .media-minimal-skin .media-button--icon:focus-visible, .media-minimal-skin .media-button--icon[aria-expanded="true"] { color: oklch(1 0 0 / 0.8); text-decoration: none; } .media-minimal-skin .media-button--icon .media-icon { filter: drop-shadow(0 1px 0 oklch(0 0 0 / 0.25)); } /* Seek button variant — hidden at small sizes */ @container media-controls (width < 28rem) { .media-minimal-skin .media-button--seek { display: none; } } /* Playback rate button */ .media-minimal-skin .media-button--playback-rate { padding: 0; } .media-minimal-skin .media-button--playback-rate span { width: 4ch; font-variant-numeric: tabular-nums; } /* ========================================================================== Icons ========================================================================== */ .media-minimal-skin .media-icon__container { position: relative; } .media-minimal-skin .media-icon { flex-shrink: 0; grid-area: 1 / 1; width: 18px; height: 18px; transition-behavior: allow-discrete; transition-property: display, opacity; transition-duration: 150ms; transition-timing-function: ease-out; } .media-minimal-skin .media-icon--hidden { display: none; opacity: 0; } .media-minimal-skin .media-icon--flipped { scale: -1 1; } /* Seek icon label positioning */ .media-minimal-skin .media-icon--seek ~ .media-icon__label { position: absolute; right: 0; bottom: -3px; font-size: 0.75em; font-weight: 480; font-variant-numeric: tabular-nums; } .media-minimal-skin .media-icon--seek.media-icon--flipped ~ .media-icon__label { right: unset; left: 0; } /* ========================================================================== Slider ========================================================================== */ .media-minimal-skin .media-slider { position: relative; display: flex; align-items: center; justify-content: center; flex: 1; border-radius: calc(infinity * 1px); outline: none; } /* Horizontal orientation */ .media-minimal-skin .media-slider[data-orientation="horizontal"] { min-width: 5rem; width: 100%; height: 1.25rem; } /* Vertical orientation */ .media-minimal-skin .media-slider[data-orientation="vertical"] { width: 1.25rem; height: 4.5rem; } /* Track */ .media-minimal-skin .media-slider__track { position: relative; isolation: isolate; overflow: hidden; background-color: oklch(1 0 0 / 0.2); border-radius: inherit; box-shadow: 0 0 0 1px oklch(0 0 0 / 0.05); user-select: none; } .media-minimal-skin .media-slider__track[data-orientation="horizontal"] { width: 100%; height: 0.1875rem; } .media-minimal-skin .media-slider__track[data-orientation="vertical"] { width: 0.1875rem; height: 100%; } /* Thumb */ .media-minimal-skin .media-slider__thumb { position: absolute; transform: translate(-50%, -50%); z-index: 10; width: 0.75rem; height: 0.75rem; background-color: oklch(1 0 0); border-radius: calc(infinity * 1px); box-shadow: 0 0 0 1px oklch(0 0 0 / 0.1), 0 1px 3px 0 oklch(0 0 0 / 0.15), 0 1px 2px -1px oklch(0 0 0 / 0.15); opacity: 0; scale: 0.7; transform-origin: center; transition-property: opacity, scale, outline-offset; transition-duration: 150ms; transition-timing-function: ease-out; user-select: none; outline: 2px solid transparent; outline-offset: -2px; } .media-minimal-skin .media-slider__thumb[data-orientation="horizontal"] { top: 50%; left: var(--media-slider-fill); } .media-minimal-skin .media-slider__thumb[data-orientation="vertical"] { left: 50%; top: calc(100% - var(--media-slider-fill)); } .media-minimal-skin .media-slider__thumb:focus-visible { outline-color: oklch(1 0 0); outline-offset: 2px; } .media-minimal-skin .media-slider:hover .media-slider__thumb, .media-minimal-skin .media-slider:focus-within .media-slider__thumb, .media-minimal-skin .media-slider__thumb--persistent { opacity: 1; scale: 1; } /* Shared track fills */ .media-minimal-skin .media-slider__buffer, .media-minimal-skin .media-slider__fill { position: absolute; border-radius: inherit; pointer-events: none; } .media-minimal-skin .media-slider__buffer[data-orientation="horizontal"], .media-minimal-skin .media-slider__fill[data-orientation="horizontal"] { inset-block: 0; left: 0; } .media-minimal-skin .media-slider__buffer[data-orientation="vertical"], .media-minimal-skin .media-slider__fill[data-orientation="vertical"] { inset-inline: 0; bottom: 0; } /* Buffer */ .media-minimal-skin .media-slider__buffer { background-color: oklch(1 0 0 / 0.2); width: var(--media-slider-buffer, 0%); transition-duration: 0.25s; transition-timing-function: ease-out; } .media-default-skin .media-slider__buffer[data-orientation="horizontal"] { width: var(--media-slider-buffer); transition-property: width; } .media-default-skin .media-slider__buffer[data-orientation="vertical"] { height: var(--media-slider-buffer); transition-property: height; } /* Fill */ .media-minimal-skin .media-slider__fill { background-color: oklch(1 0 0); } .media-minimal-skin .media-slider__fill[data-orientation="horizontal"] { width: var(--media-slider-fill); } .media-minimal-skin .media-slider__fill[data-orientation="vertical"] { height: var(--media-slider-fill); } /* Time display within slider */ .media-minimal-skin .media-slider__time-display { font-variant-numeric: tabular-nums; } /* ========================================================================== Popups & Animations ========================================================================== */ .media-minimal-skin .media-popup-animation { opacity: 1; transform: scale(1); transform-origin: bottom; filter: blur(0px); transition-property: transform, scale, opacity, filter; transition-duration: 200ms; } .media-minimal-skin .media-popup-animation[data-starting-style], .media-minimal-skin .media-popup-animation[data-ending-style] { opacity: 0; transform: scale(0); filter: blur(8px); } .media-minimal-skin .media-popup-animation[data-instant] { transition-duration: 0ms; } .media-minimal-skin .media-popup { margin: 0; border: 0; background: transparent; --media-popover-side-offset: 0.5rem; } .media-minimal-skin .media-popup--volume { padding: 0.25rem; } /* ========================================================================== Tooltips ========================================================================== */ .media-minimal-skin .media-tooltip { white-space: nowrap; } .media-minimal-skin .media-tooltip-popup { padding: 0.25rem 0.5rem; border-radius: 0.25rem; background-color: oklch(1 0 0 / 0.1); backdrop-filter: blur(64px) brightness(0.9) saturate(1.5); box-shadow: 0 4px 6px -1px oklch(0 0 0 / 0.1), 0 2px 4px -2px oklch(0 0 0 / 0.1); color: oklch(1 0 0); font-size: 0.75rem; } @media (prefers-reduced-transparency: reduce) { .media-minimal-skin .media-tooltip-popup { background-color: oklch(0 0 0 / 0.7); } } @media (prefers-contrast: more) { .media-minimal-skin .media-tooltip-popup { background-color: oklch(0 0 0 / 0.9); } } /* ========================================================================== Captions ========================================================================== */ .media-minimal-skin .media-captions { position: absolute; inset: auto 1rem 1.5rem 1rem; z-index: 20; font-size: 1rem; text-wrap: balance; pointer-events: none; } .media-minimal-skin .media-captions__container { display: flex; flex-direction: column; align-items: center; max-width: 42ch; margin: 0 auto; text-align: center; } .media-minimal-skin .media-captions__text { display: block; padding: 0.125rem 0.5rem; color: oklch(1 0 0); text-shadow: 0 0 1px oklch(0 0 0 / 0.7), 0 0 8px oklch(0 0 0 / 0.7); text-align: center; white-space: pre-wrap; line-height: 1.2; } @media (prefers-contrast: more) { .media-minimal-skin .media-captions__text { background: oklch(0 0 0 / 0.7); text-shadow: none; box-decoration-break: clone; } } .media-minimal-skin .media-captions__text > * { display: inline; } /* Responsive caption sizing */ @container media-root (width > 20rem) { .media-minimal-skin .media-captions { font-size: 1.5rem; } } @container media-root (width > 48rem) { .media-minimal-skin .media-captions { font-size: 1.875rem; } } @container media-root (width > 80rem) { .media-minimal-skin .media-captions { font-size: 2.25rem; } } /* Caption shifting styles (custom and native) */ .media-minimal-skin { --media-caption-track-delay: 600ms; --media-caption-track-y: -0.5rem; } .media-minimal-skin:has(.media-controls[data-visible]) { --media-caption-track-delay: 25ms; --media-caption-track-y: -3rem; } .media-minimal-skin .media-captions, .media-minimal-skin video::-webkit-media-text-track-container { /* NOTE: The delay must account for the controls delay/duration */ transition: transform 150ms ease-out; transition-delay: var(--media-caption-track-delay); } .media-minimal-skin video::-webkit-media-text-track-container { transform: translateY(var(--media-caption-track-y)) scale(0.98); z-index: 1; font-family: inherit; } /* When controls are visible, shift captions up to avoid overlap */ .media-minimal-skin .media-controls[data-visible] ~ .media-captions { transform: translateY(calc(var(--media-caption-track-y) - 0.5rem)); } @media (prefers-reduced-motion: reduce) { .media-minimal-skin .media-captions, .media-minimal-skin video::-webkit-media-text-track-container { transition-duration: 50ms; } }