/* The seven-knob container lives IN-FLOW in the scaffold's top-row center zone, between the back link and the lava-lamp toggle, and grows open/closed in place (lava reframe §7b) — NOT a popover, drawer, or floating overlay. Collapsed, it has zero footprint and is fully transparent; the @Expanded flag (mirrored to the .is-expanded class) transitions it open by growing its width. The PRIMARY animated axis is horizontal width — the controls area opening between the back link and the lamp; max-height is a secondary axis for the wrap case. Closed state is pointer-events:none + visibility:hidden so collapsed knobs are not focusable or hit-testable. */ .mix-visualizer-controls-bar { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: flex-start; gap: 0.85rem 1rem; /* Collapsed: zero horizontal footprint, transparent, no layout space. */ max-width: 0; max-height: 0; opacity: 0; overflow: hidden; visibility: hidden; pointer-events: none; /* NowPlaying glass surface (§7e): translucent dark shim, soft blur, rounded, secondary-tinted hairline — matches the session-hero overlay family. Padding animates in with the size. */ padding: 0; border-radius: 10px; background: rgba(13, 27, 42, 0.55); border: 1px solid color-mix(in srgb, var(--mud-palette-secondary) 22%, transparent); backdrop-filter: blur(10px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35); transition: max-width 0.32s cubic-bezier(0.22, 0.61, 0.36, 1), max-height 0.32s cubic-bezier(0.22, 0.61, 0.36, 1), opacity 0.24s ease, padding 0.32s cubic-bezier(0.22, 0.61, 0.36, 1); } /* Expanded: grows horizontally in the row's flow. Wide enough to hold all seven 64px knobs (with captions and gaps) on one line where the row has room; on a narrower center zone the knobs flex-wrap to a second in-flow line and max-height absorbs the taller stack — never clipped, never floating. */ .mix-visualizer-controls-bar.is-expanded { max-width: 720px; max-height: 420px; opacity: 1; visibility: visible; pointer-events: auto; padding: 0.85rem 1rem; } /* Narrow rows: the controls container can't sit beside the back link and lamp on one line, so it takes the full row width and the scaffold's flex-wrapped top row drops it to its own in-flow line below the back/lamp pair (§7b-responsive). Still fully in-flow — never floats, never clips. The seven knobs get the row's full width and wrap within it. */ @media (max-width: 959.98px) { .mix-visualizer-controls-bar.is-expanded { flex-basis: 100%; max-width: 100%; justify-content: center; } } /* One control: a RadialKnob with its Material icon caption underneath. RadialKnob has no icon slot, so the icon rides adjacent (§7d). Center the pair so the seven read as a tidy bar. */ .mix-visualizer-control { display: flex; flex-direction: column; align-items: center; gap: 0.3rem; } /* The caption icon is a MudIcon (a Razor component), so Blazor CSS isolation does not stamp the scope attribute onto its element — reach it with ::deep. Tinted to the secondary accent and the overlay-label opacity so it matches the session-hero NowPlaying captions (§7e). */ .mix-visualizer-control ::deep .mix-visualizer-control-icon { color: var(--mud-palette-secondary); opacity: 0.78; }