/* Container — transparent so the absolute-positioned fallback panel or album art controls the card's background. Glass edge matches NowPlayingCard vocabulary. */ .deepdrft-track-card-container { width: 250px; height: 250px; min-width: 250px; position: relative; overflow: hidden; background: transparent; border: 1px solid rgba(250, 250, 248, 0.12); } .deepdrft-track-card-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-size: cover; background-position: center; filter: brightness(0.7); } .deepdrft-track-card-content { position: relative; z-index: 1; height: 100%; display: flex; flex-direction: column; justify-content: space-between; padding: 16px; background: linear-gradient(to top, rgba(13, 27, 42, 0.75) 0%, rgba(13, 27, 42, 0.35) 45%, rgba(13, 27, 42, 0.00) 100%); } /* Fallback panel — solid navy, opaque so the card reads correctly on both light and dark page backgrounds. Semi-transparent + blur washes out on white. */ .deepdrft-track-card-fallback { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--deepdrft-navy-mid, #162437); border: 1px solid rgba(250, 250, 248, 0.12); } /* Title: off-white — matches .np-title. ::deep required: MudText renders its own element, so Blazor isolation won't stamp b-{hash} on it; ::deep pierces into child component output. */ ::deep .deepdrft-track-title { color: var(--deepdrft-white, #FAFAF8); } /* Artist: muted off-white — green reserved for interactive elements (FAB, chip). ::deep for same reason. */ ::deep .deepdrft-track-artist { color: rgba(250, 250, 248, 0.55); } /* Meta: muted off-white — matches .np-sub. ::deep for same reason. */ ::deep .deepdrft-track-meta { color: rgba(250, 250, 248, 0.45); } /* FAB always green-interactive — card is always dark glass regardless of page theme. .mud-button-filled-tertiary specificity (0,1,0) in MudBlazor; our (0,1,1) wins. */ ::deep .mud-button-filled-tertiary { background-color: var(--deepdrft-green-interactive, #3aa163); color: var(--deepdrft-white, #FAFAF8); } /* Genre chip always green-accent outline/text on the dark glass card. */ ::deep .deepdrft-genre-chip.mud-chip-outlined { border-color: var(--deepdrft-green-accent, #3D7A68); color: var(--deepdrft-green-accent, #3D7A68); } ::deep .deepdrft-genre-chip.mud-chip-color-tertiary { color: var(--deepdrft-green-accent, #3D7A68); } .deepdrft-track-info-middle { margin: 8px 0; } .deepdrft-track-info-bottom { display: flex; justify-content: space-between; align-items: center; } @media (max-width: 480px) { .deepdrft-track-card-container { min-width: 200px; width: 200px; height: 200px; } } /* ── Mode A: hover-reveal overlay (art cards only) ──────────────────────── */ /* Gate the hidden-at-rest rule on (a) art present and (b) a hover-capable pointer. Fallback cards (no --art modifier) and touch devices always show the overlay. */ @media (hover: hover) and (pointer: fine) { .deepdrft-track-card-container--art .deepdrft-track-card-content { opacity: 0; background: transparent; transition: opacity 180ms ease, background-color 180ms ease; } .deepdrft-track-card-container--art:hover .deepdrft-track-card-content { opacity: 1; background: rgba(22, 36, 55, 0.82); transition: opacity 180ms ease, background-color 180ms ease; } } /* ── Mode B: list row ───────────────────────────────────────────────────── */ .deepdrft-track-row { display: flex; flex-direction: row; align-items: center; gap: 16px; height: 80px; padding: 8px 16px; background: var(--mud-palette-surface); border: 1px solid var(--mud-palette-divider); border-radius: 4px; box-sizing: border-box; width: 100%; } .deepdrft-track-row-link { display: flex; flex-direction: row; align-items: center; gap: 16px; flex: 1 1 auto; min-width: 0; text-decoration: none; color: inherit; } ::deep .deepdrft-track-row-fab { flex: 0 0 auto; } .deepdrft-track-row-thumb { flex: 0 0 64px; width: 64px; height: 64px; background-size: cover; background-position: center; border-radius: 2px; } .deepdrft-track-row-thumb--fallback { background: var(--mud-palette-background-grey); border: 1px solid var(--mud-palette-divider); } .deepdrft-track-row-text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; justify-content: center; } .deepdrft-track-row-meta { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 4px; } @media (max-width: 480px) { .deepdrft-track-row { height: auto; min-height: 72px; padding: 8px 12px; gap: 10px; } .deepdrft-track-row-thumb { flex: 0 0 48px; width: 48px; height: 48px; } } .deepdrft-track-row--playing { border-left: 3px solid var(--deepdrft-green-interactive, #3aa163); } /* ── Mode B text: theme-aware overrides (navy on light / off-white on dark) ─ */ /* The global ::deep rules above hard-code off-white for the dark glass grid cards. List rows use --mud-palette-surface as their background, so text must follow the theme. These selectors have higher specificity (.deepdrft-track-row[b-hash] vs plain [b-hash]) and win in the cascade. */ .deepdrft-track-row ::deep .deepdrft-track-title, .deepdrft-track-row ::deep .deepdrft-track-artist, .deepdrft-track-row ::deep .deepdrft-track-meta { color: var(--mud-palette-text-primary); }