fa01b9c8e0
Toggle left of the lava popover hides release content so the visualizer fills the surface; player bar grows to carry the playing release's cover, title, and share. State on WaveformVisualizerControlState; pages and bar observe it.
192 lines
5.8 KiB
CSS
192 lines
5.8 KiB
CSS
/* Geometry, positioning, and animation only.
|
||
Colour, surface, and elevation come from MudBlazor theme props. */
|
||
|
||
/* Fixed dock to the viewport bottom */
|
||
.player-dock {
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
z-index: 1200;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.player-fixed {
|
||
position: relative;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
z-index: 1200;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
::deep .player-inner-container {
|
||
padding: 0 0.75rem 0.75rem 0.75rem;
|
||
}
|
||
|
||
/* The visible surface is a MudPaper; scoped CSS only sets geometry + a hairline accent */
|
||
::deep .player-surface {
|
||
position: relative;
|
||
border-radius: 16px;
|
||
border: 1px solid var(--mud-palette-primary);
|
||
overflow: hidden;
|
||
margin-bottom: 1rem;
|
||
}
|
||
|
||
/* Minimize / close cluster, pinned top-right of the surface */
|
||
::deep .player-surface .player-window-controls {
|
||
position: absolute;
|
||
top: 0.5rem;
|
||
right: 0.5rem;
|
||
}
|
||
|
||
/* PLAYER-BAR play-chip override (Phase 18, T3). PlayStateIcon's chip defaults to the solid
|
||
--deepdrft-play-chip (moss-green in dark) used on release heroes and Cut track rows. On the
|
||
player dock that solid green reads too hot, so here — and only here — swap to the
|
||
translucent --deepdrft-play-chip-soft (same green, much less opaque).
|
||
The glyph stays --mud-palette-primary (green on the soft translucent wash), giving the
|
||
preferred green-on-green look on the player bar in dark mode. */
|
||
::deep .player-surface .icon-container {
|
||
background-color: var(--deepdrft-play-chip-soft);
|
||
}
|
||
|
||
::deep .player-surface .icon-container .mud-icon-button {
|
||
color: var(--mud-palette-primary);
|
||
}
|
||
|
||
/* Theater Mode "now showing" band (Phase 20 §5/§7). Sits above the transport layout inside the
|
||
player surface and lets the bar grow taller to carry the hidden release's identity. The band only
|
||
renders when Theater is ON, so this geometry is gated by render-inclusion, not a CSS flag — when
|
||
Theater is OFF the player bar is byte-for-byte its non-Theater self.
|
||
Colour/surface come from the bar's themed --deepdrft-page-* aliases; no new token, no dark override. */
|
||
::deep .now-showing {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.75rem;
|
||
padding-bottom: 0.5rem;
|
||
margin-bottom: 0.5rem;
|
||
border-bottom: 1px solid var(--deepdrft-page-text-muted);
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Fixed cover box — the reused .deepdrft-track-detail-cover-art / -placeholder idioms are height:100%,
|
||
so the band supplies the square frame they fill. */
|
||
::deep .now-showing-cover {
|
||
flex: 0 0 auto;
|
||
width: 44px;
|
||
height: 44px;
|
||
border-radius: 6px;
|
||
overflow: hidden;
|
||
}
|
||
|
||
::deep .now-showing-cover-art,
|
||
::deep .now-showing-cover-placeholder {
|
||
width: 100%;
|
||
}
|
||
|
||
::deep .now-showing-cover-placeholder .mud-icon-root {
|
||
font-size: 24px;
|
||
}
|
||
|
||
::deep .now-showing-title-link {
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
text-decoration: none;
|
||
}
|
||
|
||
::deep .now-showing-title {
|
||
color: var(--deepdrft-page-text);
|
||
}
|
||
|
||
::deep .now-showing-share {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
/* Minimized floating dock — positioning + hover only; colour from MudFab */
|
||
.minimized-dock {
|
||
position: fixed;
|
||
bottom: 30px;
|
||
right: 30px;
|
||
z-index: 1300;
|
||
}
|
||
|
||
.minimized-dock:hover {
|
||
transform: scale(1.1);
|
||
}
|
||
|
||
@media (max-width: 768px) {
|
||
.minimized-dock {
|
||
bottom: 15px;
|
||
right: 15px;
|
||
}
|
||
|
||
::deep .player-surface {
|
||
margin-bottom: 0.5rem;
|
||
}
|
||
}
|
||
|
||
/* Unified responsive player layout — CSS Grid with named areas redefined per breakpoint.
|
||
The metadata (meta-zone) detaches from the waveform (seek-zone) in the mid band, which a
|
||
flex order-swap can't express, so each of the four zones is placed by grid-area and the three
|
||
shapes are pure template-area swaps — no runtime breakpoint subscription. min-width:0 on the
|
||
shrinkable centre zones lets the title truncate and the waveform shrink instead of overflowing. */
|
||
.player-layout {
|
||
display: grid;
|
||
align-items: center;
|
||
gap: 8px;
|
||
/*padding-right: 2.5rem; !* clear the abs-positioned PlayerWindowControls *!*/
|
||
}
|
||
|
||
::deep .transport-zone { grid-area: transport; }
|
||
::deep .meta-zone { grid-area: meta; min-width: 0; }
|
||
::deep .seek-zone { grid-area: waveform; min-width: 0; }
|
||
::deep .volume-zone { grid-area: volume; }
|
||
|
||
/* Wide (>= 900px): single row — transport and volume flank the centre column; the metadata
|
||
sits directly under the waveform (transport/volume span both rows, centred). */
|
||
@media (min-width: 900px) {
|
||
.player-layout {
|
||
grid-template-columns: auto minmax(360px, 1fr) auto;
|
||
grid-template-areas:
|
||
"transport waveform volume"
|
||
"transport meta .";
|
||
}
|
||
}
|
||
|
||
/* Mid (600–900px): metadata rides the top row between transport and volume; the waveform gets
|
||
the whole bottom row to itself rather than being squeezed beside the metadata. */
|
||
@media (min-width: 600px) and (max-width: 899.98px) {
|
||
.player-layout {
|
||
grid-template-columns: auto minmax(0, 1fr) auto;
|
||
grid-template-areas:
|
||
"transport meta volume"
|
||
"waveform waveform waveform";
|
||
}
|
||
}
|
||
|
||
/* Narrow (< 600px): transport + volume share the top row; waveform then metadata stack full-width
|
||
below — the most compressed shape. */
|
||
@media (min-width: 420px) and (max-width: 599.98px) {
|
||
.player-layout {
|
||
grid-template-columns: auto 1fr auto;
|
||
grid-template-areas:
|
||
"transport . volume"
|
||
"waveform waveform waveform"
|
||
"meta meta meta";
|
||
}
|
||
}
|
||
|
||
/* Very Narrow (< 400px): transport + volume share the top row; waveform then metadata stack full-width
|
||
below — the most compressed shape. */
|
||
@media (max-width: 419.98px) {
|
||
.player-layout {
|
||
grid-template-columns: auto 1fr auto;
|
||
grid-template-areas:
|
||
"transport . volume"
|
||
"waveform waveform waveform"
|
||
"meta meta meta";
|
||
}
|
||
}
|