Files
v10/packages/skins/__old__/default/css/video.css
T

305 lines
8.4 KiB
CSS

@import "./components/reset.css";
@import "./components/root.css";
@import "./components/surface.css";
@import "./components/media.css";
@import "./components/overlay.css";
@import "./components/buffering.css";
@import "./components/error.css";
@import "./components/controls.css";
@import "./components/time.css";
@import "./components/button.css";
@import "./components/button-group.css";
@import "./components/badge.css";
@import "./components/icons.css";
@import "./components/poster.css";
@import "./components/thumbnail.css";
@import "./components/slider.css";
@import "./components/popup.css";
@import "./components/menus.css";
@import "./components/captions.css";
@import "./components/input-feedback.css";
@import "../../shared/css/video/icon-state.css";
@import "../../shared/global/video/keyframes.css";
@import "../../shared/global/video/properties.css";
/* ==========================================================================
Root
========================================================================== */
.media-default-skin--video {
--media-spring-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-border-color: oklch(0 0 0 / 0.1);
--media-surface-background-color: oklch(1 0 0 / 0.1);
--media-surface-inner-border-color: oklch(1 0 0 / 0.05);
--media-surface-outer-border-color: oklch(0 0 0 / 0.1);
--media-surface-shadow-color: oklch(0 0 0 / 0.15);
--media-surface-backdrop-filter: blur(16px) saturate(1.5);
--media-video-border-radius: var(--media-border-radius, 2rem);
--media-controls-transition-duration: 100ms;
--media-controls-transition-timing-function: ease-out;
--media-error-dialog-transition-duration: 350ms;
--media-error-dialog-transition-delay: 100ms;
--media-error-dialog-transition-timing-function: var(--media-spring-timing-function);
--media-popup-transition-duration: 100ms;
--media-popup-transition-timing-function: ease-out;
--media-tooltip-side-offset: 0.75rem;
--media-tooltip-boundary-offset: 0.5rem;
--media-popover-side-offset: 0.5rem;
--media-popover-boundary-offset: 0.5rem;
overflow: clip;
background: oklch(0 0 0);
@media (prefers-reduced-motion: reduce) {
--media-error-dialog-transition-duration: 50ms;
--media-error-dialog-transition-delay: 0ms;
--media-error-dialog-transition-timing-function: ease-out;
--media-popup-transition-duration: 0ms;
}
@media (prefers-color-scheme: dark) {
--media-border-color: oklch(1 0 0 / 0.15);
}
@media (prefers-reduced-transparency: reduce) or (prefers-contrast: more) {
--media-surface-background-color: oklch(0 0 0);
--media-surface-inner-border-color: oklch(1 0 0 / 0.25);
--media-surface-outer-border-color: transparent;
}
&:has(.media-controls:not([data-visible])) {
/* Slight delay to hide controls on non-touch devices after interaction */
@media (pointer: fine) {
--media-controls-transition-duration: 300ms;
}
@media (pointer: coarse) {
--media-controls-transition-duration: 150ms;
}
@media (prefers-reduced-motion: reduce) {
--media-controls-transition-duration: 50ms;
}
}
/* Inner border ring */
&::after {
position: absolute;
inset: 0;
z-index: 10;
pointer-events: none;
content: "";
border-radius: inherit;
box-shadow: inset 0 0 0 1px var(--media-border-color);
}
&:fullscreen {
--media-border-radius: 0;
}
}
/* ==========================================================================
Error Dialog
========================================================================== */
.media-default-skin--video .media-error {
position: absolute;
inset: 0;
z-index: 20;
display: flex;
align-items: center;
justify-content: center;
}
.media-default-skin--video .media-error__dialog {
display: flex;
flex-direction: column;
gap: 0.75rem;
max-width: 18rem;
padding: 0.75rem;
color: oklch(1 0 0);
text-shadow: 0 1px 0 oklch(0 0 0 / 0.25);
border-radius: 1.75rem;
transition-delay: var(--media-error-dialog-transition-delay);
transition-timing-function: var(--media-error-dialog-transition-timing-function);
transition-duration: var(--media-error-dialog-transition-duration);
transition-property: opacity, scale;
}
.media-default-skin--video .media-error[data-starting-style] .media-error__dialog,
.media-default-skin--video .media-error[data-ending-style] .media-error__dialog {
opacity: 0;
scale: 0.5;
}
.media-default-skin--video .media-error[data-ending-style] .media-error__dialog {
transition-delay: 0ms;
}
.media-default-skin--video .media-error__content {
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: 0.5rem 0.5rem 0.375rem;
text-shadow: inherit;
}
.media-default-skin--video .media-error__title {
font-size: 1rem;
}
/* ==========================================================================
Controls (hide/show behavior)
========================================================================== */
.media-default-skin--video .media-controls {
position: absolute;
inset-inline: 0.5rem;
bottom: 0.5rem;
z-index: 10;
flex-wrap: wrap;
color: var(--media-color-primary, oklch(1 0 0));
transform-origin: bottom;
transition-timing-function: var(--media-controls-transition-timing-function);
transition-duration: var(--media-controls-transition-duration);
@media (pointer: fine) {
transition-property: scale, filter, opacity;
will-change: scale, filter, opacity;
}
@media (pointer: coarse) {
transition-property: scale, opacity;
will-change: scale, opacity;
}
&:not([data-visible]) {
pointer-events: none;
opacity: 0;
scale: 0.95;
@media (pointer: fine) and (prefers-reduced-motion: no-preference) {
filter: blur(8px);
}
@media (prefers-reduced-motion: reduce) {
scale: 1;
}
}
& .media-time-controls {
flex: 0 0 100%;
order: -1;
padding-inline: 0.625rem;
}
& .media-button-group:first-child {
flex: 1;
text-align: left;
}
& .media-button-group:last-child {
flex: 1;
justify-content: end;
}
@container media-root (width > 42rem) {
inset-inline: 0.75rem;
bottom: 0.75rem;
flex-wrap: nowrap;
column-gap: 0.125rem;
padding: 0.25rem;
& .media-time-controls {
flex: 1;
order: unset;
}
& .media-button-group:first-child,
& .media-button-group:last-child {
flex: 0 0 auto;
}
}
}
.media-default-skin--video .media-error[data-open] ~ .media-controls {
display: none;
}
/* Hide cursor when controls are hidden */
.media-default-skin--video:has(.media-controls:not([data-visible])) {
cursor: none;
}
/* ==========================================================================
Sliders
========================================================================== */
.media-default-skin--video .media-slider__track {
background-color: oklch(1 0 0 / 0.2);
box-shadow: 0 0 0 1px oklch(0 0 0 / 0.05);
}
.media-default-skin--video .media-slider__thumbnail {
--media-slider-thumbnail-max-width: 11rem;
--media-slider-thumbnail-padding: -1.125rem;
/**
Inset is the difference between the container width and the slider (100%) width.
Divided by 2 as we render the time on both sides.
*/
--media-slider-thumbnail-inset: calc((100cqi - 100%) / 2);
position: absolute;
bottom: calc(100% + 1.2rem);
left: clamp(
calc(
var(--media-slider-thumbnail-max-width) /
2 +
var(--media-slider-thumbnail-padding) -
var(--media-slider-thumbnail-inset)
),
var(--media-slider-pointer),
calc(
100% -
var(--media-slider-thumbnail-max-width) /
2 -
var(--media-slider-thumbnail-padding) +
var(--media-slider-thumbnail-inset)
)
);
pointer-events: none;
opacity: 0;
filter: blur(8px);
transform-origin: bottom;
scale: 0.8;
translate: -50%;
transition-timing-function: ease-out;
transition-duration: 150ms;
transition-property: scale, opacity, filter;
& .media-thumbnail__image {
max-width: var(--media-slider-thumbnail-max-width);
}
&:has(.media-thumbnail__image[data-loading]) {
max-height: 6rem;
}
}
.media-default-skin--video .media-slider[data-pointing] .media-slider__thumbnail:has([role="img"]:not([data-hidden])) {
opacity: 1;
filter: blur(0);
scale: 1;
}
.media-default-skin--video
.media-slider__thumbnail:has([role="img"]:not([data-hidden]))
+ .media-slider__preview
.media-slider__value {
display: none;
}