Phase 9 Wave 4: ARCHIVE nav + Cuts/Sessions/Mixes pages + MixWaveformVisualizer

Replaces flat RELEASES/SESSIONS/MIXES nav with ARCHIVE dropdown (PageRoute.Children,
one-level cap, dual-role node). Adds /archive overview, /cuts (AlbumsView + medium
filter; /albums redirects), /sessions + /sessions/{id} (hero-dominant), /mixes +
/mixes/{id} (MixWaveformVisualizer full-page background). Extracts ReleaseDetailScaffold
from TrackDetail (invariant trio). PersistentComponentState bridge on all new pages.
Click-to-seek seam designed on MixWaveformVisualizer (inert until wired).
This commit is contained in:
daniel-c-harvey
2026-06-12 23:05:25 -04:00
parent 5f7eaed112
commit af724ce570
31 changed files with 1334 additions and 122 deletions
@@ -82,6 +82,57 @@
color: var(--deepdrft-white);
}
/* Dual-role parent node: anchor for the parent route, positioning context for the dropdown. */
.dd-nav-item-parent {
position: relative;
}
/* Hover-revealed child dropdown. Pure CSS — hidden by default, shown when the parent item is
hovered or contains keyboard focus. Sits directly beneath the parent link, frosted to match
the bar. */
.dd-nav-dropdown {
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%) translateY(0.25rem);
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.75rem;
list-style: none;
margin: 0;
padding: 1rem 1.5rem;
min-width: 9rem;
background: rgba(250, 250, 248, 0.96);
border: 1px solid var(--deepdrft-border);
-webkit-backdrop-filter: blur(18px);
backdrop-filter: blur(18px);
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity 0.18s ease, visibility 0.18s ease;
z-index: 101;
}
.dd-nav-dark .dd-nav-dropdown {
background: rgba(13, 13, 18, 0.95);
}
.dd-nav-item-parent:hover .dd-nav-dropdown,
.dd-nav-item-parent:focus-within .dd-nav-dropdown {
opacity: 1;
visibility: visible;
pointer-events: auto;
}
.dd-nav-dropdown-link {
white-space: nowrap;
}
/* Right-side cluster */
.dd-nav-actions {
display: flex;
@@ -207,6 +258,11 @@
padding: 0.6rem 0;
}
/* Indented child rows under their parent link in the mobile drawer. */
.dd-nav-mobile-child {
padding-left: 1.25rem;
}
.dd-nav-links-mobile ::deep .dd-nav-cta {
margin-top: 0.5rem;
text-align: center;