Code/MediaScreen.razor.scss
$accent: #3fa9ff;
$bg: #000;
$panel: rgba( 10, 12, 16, 0.85 );
.mediascreen
{
width: 100%;
height: 100%;
background-color: $bg;
font-family: Poppins;
color: white;
position: relative;
overflow: hidden;
pointer-events: all;
.video
{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
}
i
{
font-family: "Material Icons";
}
.splash, .audio
{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
flex-direction: column;
align-items: center;
justify-content: center;
background: linear-gradient( to bottom, #11161f, #05070a );
> i
{
font-size: 200px;
color: $accent;
opacity: 0.8;
}
.title
{
font-size: 72px;
font-weight: 700;
margin-top: 20px;
text-align: center;
max-width: 85%;
}
.hint, .status
{
font-size: 36px;
opacity: 0.6;
margin-top: 16px;
text-align: center;
max-width: 85%;
}
.hint
{
flex-direction: row;
align-items: center;
gap: 12px;
white-space: nowrap;
}
.status
{
color: #ffcc66;
opacity: 0.9;
}
}
.audio
{
> i
{
font-size: 120px;
}
.title
{
font-size: 56px;
max-width: 85%;
justify-content: center;
// a title too long to fit scrolls from its start
&.overflowing
{
justify-content: flex-start;
}
}
.spectrumbars
{
width: 80%;
height: 35%;
margin-top: 40px;
}
}
.loading
{
position: absolute;
left: 40px;
top: 40px;
padding: 12px 24px;
border-radius: 12px;
background-color: $panel;
font-size: 32px;
align-items: center;
gap: 12px;
}
.notice
{
position: absolute;
top: 40px;
right: 40px;
max-width: 60%;
padding: 16px 28px;
border-radius: 12px;
background-color: rgba( 180, 40, 40, 0.9 );
font-size: 32px;
}
.osd
{
position: absolute;
left: 0;
right: 0;
bottom: 0;
flex-direction: column;
padding: 40px 48px 32px 48px;
background: linear-gradient( to top, rgba( 0, 0, 0, 0.9 ), rgba( 0, 0, 0, 0 ) );
opacity: 0;
transition: opacity 0.3s ease;
.meta
{
flex-direction: row;
align-items: flex-end;
margin-bottom: 16px;
.title
{
flex-grow: 1;
flex-basis: 0;
font-size: 44px;
font-weight: 700;
}
.time
{
font-size: 36px;
opacity: 0.8;
margin-left: 24px;
white-space: nowrap;
flex-shrink: 0;
// every digit the same width, so it doesn't jiggle as it counts (Poppins has no tabular digits, Inter does)
font-family: Inter;
font-variant-numeric: tabular-nums;
}
}
.progress
{
height: 14px;
border-radius: 7px;
background-color: rgba( 255, 255, 255, 0.2 );
cursor: pointer;
.fill
{
height: 100%;
width: 0%;
border-radius: 7px;
background-color: $accent;
}
&:hover
{
height: 22px;
}
}
.live
{
align-self: flex-start;
padding: 4px 16px;
border-radius: 6px;
background-color: #d22;
font-size: 28px;
font-weight: 700;
align-items: center;
gap: 8px;
}
.controls
{
flex-direction: row;
align-items: center;
margin-top: 20px;
gap: 12px;
.btn
{
width: 88px;
height: 88px;
border-radius: 44px;
align-items: center;
justify-content: center;
background-color: rgba( 255, 255, 255, 0.1 );
cursor: pointer;
i
{
font-size: 56px;
}
&:hover
{
background-color: $accent;
}
}
.spacer
{
flex-grow: 1;
}
.queue-count, .by
{
font-size: 30px;
opacity: 0.75;
align-items: center;
gap: 8px;
margin-left: 24px;
}
}
}
// Controls show when you start looking at the screen, and hide after MediaScreen.HideControlsAfter.
// Hidden controls don't take clicks - look away and back to bring them up.
.osd
{
pointer-events: none;
}
&.controls-visible .osd
{
opacity: 1;
pointer-events: all;
}
// AlwaysShowInfo: title + progress stay up, the buttons still hide
&.always-info .osd
{
opacity: 1;
.controls
{
opacity: 0;
transition: opacity 0.3s ease;
}
}
&.always-info.controls-visible .osd .controls
{
opacity: 1;
}
// The button under the crosshair - what USE will press
.btn.aimed
{
background-color: $accent;
transform: scale( 1.12 );
}
.progress.aimed
{
height: 22px;
background-color: rgba( 255, 255, 255, 0.35 );
}
// "Press E" dot. A direct child of the root, moved onto the aimed control from code
// (MediaScreen.UpdatePressDot sets left/top/display); centered on that point by the negative margins.
// the USE button's glyph (a key cap, or the pad's button), centred on the aimed control's corner
.press-dot
{
position: absolute;
display: none;
left: 0;
top: 0;
margin-left: -28px;
margin-top: -28px;
font-size: 44px;
pointer-events: none;
z-index: 100;
}
.flash
{
position: absolute;
left: 50%;
top: 50%;
width: 220px;
height: 220px;
margin-left: -110px;
margin-top: -110px;
border-radius: 110px;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: rgba( 0, 0, 0, 0.55 );
pointer-events: none;
i
{
font-size: 120px;
}
.flash-text
{
font-size: 30px;
font-weight: 700;
margin-top: -6px;
}
}
&.idle .osd
{
display: none;
}
}
.spectrumbars
{
flex-direction: row;
align-items: flex-end;
gap: 6px;
.bar
{
flex-grow: 1;
height: 3%;
border-radius: 4px 4px 0 0;
background: linear-gradient( to top, #3fa9ff, #a36bff );
}
}