@keyframes pulse-ring { 0%, 100% { opacity: 0.15; transform: translate(-50%, -50%) scale(1); } 50% { opacity: 0.4; transform: translate(-50%, -50%) scale(1.03); } } /* Hero-right panel (migrated from Home.razor's .hero-right). Owns the navy backdrop, clips the full-bleed visualizer + ring overflow, and is the positioned ancestor for the inset:0 layers. */ .now-playing-panel { background: var(--deepdrft-navy); position: relative; display: flex; flex-direction: column; justify-content: flex-end; overflow: hidden; height: 100%; } @media (max-width: 960px) { .now-playing-panel { min-height: 50vh; } } /* Full-bleed waveform background. WaveformVisualizer Fill="true" renders its layer as position:absolute; inset:0, so this box only needs to be a positioned, sized ancestor. z-index:0 pins it to the bottom of the panel's stacking order, beneath the rings and the now-playing-content. */ .np-visualizer-bg { position: absolute; inset: 0; z-index: 0; } /* The lava-lamp popover trigger overlays the panel's top-right corner (full parity, ยง8e). Above the canvas (z-index) and pointer-enabled so the icon is clickable even though the visualizer layer below it is pointer-events:none. */ .np-visualizer-controls { position: absolute; top: 1rem; right: 1rem; z-index: 3; } .now-playing-content { position: relative; z-index: 2; padding: 3rem; } .circle-deco { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border-radius: 50%; border: 1px solid rgba(61, 122, 104, 0.3); animation: pulse-ring 4s ease-in-out infinite; pointer-events: none; } .circle-deco:nth-child(1) { width: 320px; height: 320px; animation-delay: 0s; } .circle-deco:nth-child(2) { width: 520px; height: 520px; animation-delay: 0.8s; } .circle-deco:nth-child(3) { width: 720px; height: 720px; animation-delay: 1.6s; }