DocDoeAI / src /components /video /DocDoeMediaPlayer.module.css
asnannp's picture
deploy: sync backend to Space root (learn-lesson HF cache fix)
65d68f5
Raw History Blame Contribute Delete
6.56 kB
.player {
position: relative;
isolation: isolate;
overflow: hidden;
width: 100%;
background: #070908;
color: #f2f4f1;
outline: none;
}
.player:focus-visible {
box-shadow: inset 0 0 0 3px rgba(242, 244, 241, 0.9);
}
.video {
display: block;
object-fit: contain;
background: #070908;
cursor: pointer;
}
.player[data-caption-size="small"] video::cue { font-size: 0.82rem; }
.player[data-caption-size="medium"] video::cue { font-size: 1rem; }
.player[data-caption-size="large"] video::cue { font-size: 1.22rem; }
.player video::cue {
color: #fff;
background: rgba(5, 7, 6, 0.88);
text-shadow: 0 1px 4px rgba(0, 0, 0, 0.9);
}
.loading {
position: absolute;
inset: 0;
display: grid;
place-content: center;
justify-items: center;
gap: 0.65rem;
background: rgba(7, 9, 8, 0.3);
color: rgba(242, 244, 241, 0.9);
font-size: 0.75rem;
font-weight: 650;
letter-spacing: 0.01em;
pointer-events: none;
}
.error {
position: absolute;
left: 50%;
top: 50%;
width: min(88%, 28rem);
transform: translate(-50%, -50%);
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: 0.75rem;
background: rgba(11, 15, 14, 0.94);
padding: 1rem;
text-align: center;
font-size: 0.75rem;
line-height: 1.45;
}
.chrome {
position: absolute;
inset: auto 0 0;
z-index: 3;
padding: 3.5rem 0.75rem 0.7rem;
background: linear-gradient(to bottom, transparent, rgba(4, 6, 5, 0.86) 45%, rgba(4, 6, 5, 0.98));
opacity: 0;
transform: translateY(5px);
pointer-events: none;
transition: opacity 180ms ease, transform 180ms ease;
}
.chromeVisible {
opacity: 1;
transform: translateY(0);
pointer-events: auto;
}
.timelineRow {
display: grid;
grid-template-columns: 2.8rem minmax(0, 1fr) 2.8rem;
align-items: center;
gap: 0.55rem;
}
.time {
color: rgba(242, 244, 241, 0.78);
font-variant-numeric: tabular-nums;
font-size: 0.69rem;
font-weight: 650;
}
.time:last-child { text-align: right; }
.timeline,
.volume {
margin: 0;
appearance: none;
height: 1.35rem;
background: transparent;
cursor: pointer;
}
.timeline::-webkit-slider-runnable-track,
.volume::-webkit-slider-runnable-track {
height: 0.22rem;
border-radius: 999px;
background: linear-gradient(to right, #f2f4f1 var(--player-progress, 0%), rgba(255, 255, 255, 0.3) var(--player-progress, 0%));
}
.volume::-webkit-slider-runnable-track { background: rgba(255, 255, 255, 0.35); }
.timeline::-moz-range-track,
.volume::-moz-range-track {
height: 0.22rem;
border-radius: 999px;
background: rgba(255, 255, 255, 0.3);
}
.timeline::-moz-range-progress {
height: 0.22rem;
border-radius: 999px;
background: #f2f4f1;
}
.timeline::-webkit-slider-thumb,
.volume::-webkit-slider-thumb {
width: 0.78rem;
height: 0.78rem;
margin-top: -0.28rem;
appearance: none;
border: 0;
border-radius: 50%;
background: #f2f4f1;
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.45);
}
.timeline::-moz-range-thumb,
.volume::-moz-range-thumb {
width: 0.78rem;
height: 0.78rem;
border: 0;
border-radius: 50%;
background: #f2f4f1;
}
.timeline:focus-visible,
.volume:focus-visible {
outline: 2px solid #f2f4f1;
outline-offset: 3px;
}
.controlsRow {
display: flex;
align-items: center;
gap: 0.2rem;
min-height: 2.75rem;
}
.primaryControl,
.iconControl {
position: relative;
display: inline-grid;
place-items: center;
min-width: 2.75rem;
min-height: 2.75rem;
border: 0;
border-radius: 0.55rem;
color: rgba(242, 244, 241, 0.88);
cursor: pointer;
transition: background-color 150ms ease, color 150ms ease, transform 150ms ease;
}
.primaryControl { background: #f2f4f1; color: #0b0f0e; }
.iconControl { background: transparent; }
.primaryControl:hover,
.iconControl:hover,
.activeControl { background: rgba(255, 255, 255, 0.14); color: #fff; }
.primaryControl:hover { background: #fff; color: #0b0f0e; }
.primaryControl:active,
.iconControl:active { transform: scale(0.96); }
.primaryControl:focus-visible,
.iconControl:focus-visible,
.option:focus-visible,
.textControl:focus-visible {
outline: 2px solid #fff;
outline-offset: 2px;
}
.skipLabel {
position: absolute;
inset: 0;
display: grid;
place-items: center;
padding-top: 0.05rem;
font-size: 0.48rem;
font-weight: 800;
}
.volumeGroup { display: flex; align-items: center; }
.volume { width: 4.5rem; }
.lessonLabel {
margin-left: 0.35rem;
color: rgba(242, 244, 241, 0.56);
font-size: 0.65rem;
font-weight: 650;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.utilityControls {
position: relative;
display: flex;
align-items: center;
margin-left: auto;
gap: 0.1rem;
}
.settingsPanel {
position: absolute;
right: 0;
bottom: calc(100% + 0.65rem);
width: min(20rem, calc(100vw - 2rem));
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 0.75rem;
background: rgba(14, 20, 19, 0.98);
padding: 0.8rem;
color: #f2f4f1;
box-shadow: 0 18px 50px rgba(0, 0, 0, 0.42);
}
.settingsSection {
margin-top: 0.8rem;
border-top: 1px solid rgba(255, 255, 255, 0.12);
padding-top: 0.8rem;
}
.settingsHeading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.settingsLabel {
font-size: 0.68rem;
font-weight: 750;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.optionGrid {
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
margin-top: 0.55rem;
}
.option,
.textControl {
min-height: 2.25rem;
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 0.45rem;
padding: 0 0.65rem;
color: rgba(242, 244, 241, 0.76);
font-size: 0.7rem;
font-weight: 650;
cursor: pointer;
}
.option:hover,
.textControl:hover,
.optionSelected {
border-color: rgba(255, 255, 255, 0.42);
background: rgba(255, 255, 255, 0.1);
color: #fff;
}
.textControl { min-height: 1.9rem; }
.shortcutHint {
margin-top: 0.8rem;
color: rgba(242, 244, 241, 0.46);
font-size: 0.62rem;
line-height: 1.45;
}
@media (max-width: 640px) {
.chrome { padding: 2.5rem 0.45rem 0.38rem; }
.timelineRow { grid-template-columns: 2.5rem minmax(0, 1fr) 2.5rem; gap: 0.35rem; }
.volumeGroup,
.lessonLabel { display: none; }
.primaryControl,
.iconControl { min-width: 2.55rem; min-height: 2.55rem; }
.settingsPanel {
position: fixed;
right: 0.75rem;
bottom: max(0.75rem, env(safe-area-inset-bottom));
left: 0.75rem;
width: auto;
}
}
@media (prefers-reduced-motion: reduce) {
.chrome,
.primaryControl,
.iconControl { transition-duration: 80ms; transform: none; }
}