fix(mix-visualizer): move seven-knob controls in-flow between back link and lava lamp (Phase 10 reframe §7b)

This commit is contained in:
daniel-c-harvey
2026-06-16 20:12:02 -04:00
parent b7a60f24c5
commit 841822d8fe
6 changed files with 80 additions and 62 deletions
@@ -1,21 +1,21 @@
/* The seven-knob bar lives INLINE in the mix-detail controls area and animates open/closed in place
(lava reframe §7b) — NOT a popover or drawer. Collapsed, it has zero size and is fully transparent;
the @Expanded flag (mirrored to the .is-expanded class) transitions it open. We animate max-width +
max-height + opacity + transform together so the bar reads as the controls growing in place rather
than a panel popping in. Closed state is pointer-events:none + visibility:hidden so collapsed knobs
are not focusable or hit-testable. */
/* 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-end;
justify-content: flex-start;
gap: 0.85rem 1rem;
/* Collapsed: zero footprint, slid up toward the toggle, transparent. */
/* Collapsed: zero horizontal footprint, transparent, no layout space. */
max-width: 0;
max-height: 0;
opacity: 0;
transform: translateY(-8px);
overflow: hidden;
visibility: hidden;
pointer-events: none;
@@ -33,20 +33,33 @@
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),
transform 0.32s cubic-bezier(0.22, 0.61, 0.36, 1);
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: 640px;
max-width: 720px;
max-height: 420px;
opacity: 1;
transform: translateY(0);
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 {