fix(ui): drop redundant Elapsed/Length cells; restore timeline
- Meta-grid reduced from 4 cells to 2 (State / Source). Elapsed and Length were duplicates of the timecodes already flanking the timeline. Added .meta-grid-2 modifier with a 2-column layout. - Timeline was distorted by legacy rules: .progress-bar:hover did scaleY(1.4) (inflating the 2px hairline on hover) and the progress-fill::after handle defaulted to scale(0). Both are now forced via !important to keep the hairline flat and the copper handle always visible. - progress-row uses minmax(0, 1fr) for the bar cell so it shrinks cleanly inside the grid. - Removed unused meta.elapsed / meta.length keys from en.json + ru.json. - Dead JS lookups for #meta-elapsed / #meta-length stay (cheap if-checks, no-op when DOM elements gone).
This commit is contained in:
@@ -4630,7 +4630,7 @@ body.visualizer-active .vinyl-stage .spectrogram-canvas {
|
|||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Editorial 4-cell metadata grid (now houses State / Source / Elapsed / Length) */
|
/* Editorial metadata grid — 2 cells (State / Source); timecodes flank the timeline */
|
||||||
.meta-grid {
|
.meta-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(4, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
@@ -4638,6 +4638,9 @@ body.visualizer-active .vinyl-stage .spectrogram-canvas {
|
|||||||
border-top: 1px solid var(--rule);
|
border-top: 1px solid var(--rule);
|
||||||
border-bottom: 1px solid var(--rule);
|
border-bottom: 1px solid var(--rule);
|
||||||
}
|
}
|
||||||
|
.meta-grid.meta-grid-2 {
|
||||||
|
grid-template-columns: minmax(180px, auto) 1fr;
|
||||||
|
}
|
||||||
.meta-cell {
|
.meta-cell {
|
||||||
padding: 16px 18px 16px 0;
|
padding: 16px 18px 16px 0;
|
||||||
border-right: 1px solid var(--rule);
|
border-right: 1px solid var(--rule);
|
||||||
@@ -4919,6 +4922,7 @@ body.visualizer-active .vinyl-stage .spectrogram-canvas {
|
|||||||
/* ─── Progress (hairline editorial) ─────────────────────────── */
|
/* ─── Progress (hairline editorial) ─────────────────────────── */
|
||||||
.progress-container {
|
.progress-container {
|
||||||
margin-top: 28px;
|
margin-top: 28px;
|
||||||
|
margin-bottom: 0; /* override legacy 2rem */
|
||||||
}
|
}
|
||||||
|
|
||||||
.time-display {
|
.time-display {
|
||||||
@@ -4934,10 +4938,24 @@ body.visualizer-active .vinyl-stage .spectrogram-canvas {
|
|||||||
|
|
||||||
.progress-bar {
|
.progress-bar {
|
||||||
height: 2px;
|
height: 2px;
|
||||||
|
width: 100%;
|
||||||
background: var(--rule-strong);
|
background: var(--rule-strong);
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
|
position: relative;
|
||||||
|
transform: none !important; /* kill legacy :hover scaleY */
|
||||||
|
transition: background 200ms var(--ease);
|
||||||
|
min-width: 0; /* let grid shrink it */
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-bar:hover {
|
||||||
|
background: var(--rule-strong);
|
||||||
|
transform: none !important; /* defeat legacy :hover transform */
|
||||||
|
}
|
||||||
|
.progress-bar.dragging {
|
||||||
|
transform: none !important;
|
||||||
|
background: var(--rule-strong);
|
||||||
}
|
}
|
||||||
|
|
||||||
.progress-fill {
|
.progress-fill {
|
||||||
@@ -4945,21 +4963,45 @@ body.visualizer-active .vinyl-stage .spectrogram-canvas {
|
|||||||
box-shadow: 0 0 12px var(--copper-glow);
|
box-shadow: 0 0 12px var(--copper-glow);
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
width: 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
transition: width 0.1s linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
.progress-fill::after {
|
.progress-fill::after {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -5px;
|
right: -5px;
|
||||||
top: -4px;
|
top: 50%;
|
||||||
|
transform: translateY(-50%) scale(1) !important; /* always visible, override legacy scale(0) default */
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
background: var(--copper);
|
background: var(--copper);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
box-shadow: 0 0 14px var(--copper-glow), 0 0 0 4px rgba(224, 128, 56, 0.12);
|
box-shadow: 0 0 14px var(--copper-glow), 0 0 0 4px rgba(224, 128, 56, 0.12);
|
||||||
|
transition: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Progress row inside transport — grid layout for [time | bar | time] */
|
||||||
|
.transport .progress-row,
|
||||||
|
.progress-container.progress-row {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
||||||
|
gap: 18px;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 26px;
|
||||||
|
}
|
||||||
|
.progress-row .timecode {
|
||||||
|
font-family: var(--mono);
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--ink-mute);
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
font-variant-numeric: tabular-nums;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.progress-row .timecode.elapsed { color: var(--copper); font-weight: 500; }
|
||||||
|
|
||||||
/* ─── Controls (circular transport) ─────────────────────────── */
|
/* ─── Controls (circular transport) ─────────────────────────── */
|
||||||
.controls {
|
.controls {
|
||||||
margin-top: 28px;
|
margin-top: 28px;
|
||||||
|
|||||||
@@ -198,8 +198,8 @@
|
|||||||
<div id="album"></div>
|
<div id="album"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Editorial metadata grid (4 cells) -->
|
<!-- Editorial metadata grid (State + Source; timecodes are on the timeline) -->
|
||||||
<div class="meta-grid">
|
<div class="meta-grid meta-grid-2">
|
||||||
<div class="meta-cell">
|
<div class="meta-cell">
|
||||||
<div class="meta-label" data-i18n="meta.state">State</div>
|
<div class="meta-label" data-i18n="meta.state">State</div>
|
||||||
<div class="meta-value">
|
<div class="meta-value">
|
||||||
@@ -216,14 +216,6 @@
|
|||||||
<span id="source" data-i18n="player.unknown_source">Unknown</span>
|
<span id="source" data-i18n="player.unknown_source">Unknown</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="meta-cell">
|
|
||||||
<div class="meta-label" data-i18n="meta.elapsed">Elapsed</div>
|
|
||||||
<div class="meta-value mono" id="meta-elapsed">0:00</div>
|
|
||||||
</div>
|
|
||||||
<div class="meta-cell">
|
|
||||||
<div class="meta-label" data-i18n="meta.length">Length</div>
|
|
||||||
<div class="meta-value mono" id="meta-length">0:00</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Decorative spectrum bars -->
|
<!-- Decorative spectrum bars -->
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
"header.edition_sub": "Studio Reference Edition",
|
"header.edition_sub": "Studio Reference Edition",
|
||||||
"meta.state": "State",
|
"meta.state": "State",
|
||||||
"meta.source": "Source",
|
"meta.source": "Source",
|
||||||
"meta.elapsed": "Elapsed",
|
|
||||||
"meta.length": "Length",
|
|
||||||
"player.title_unavailable": "Title unavailable",
|
"player.title_unavailable": "Title unavailable",
|
||||||
"player.source": "Source:",
|
"player.source": "Source:",
|
||||||
"player.unknown_source": "Unknown",
|
"player.unknown_source": "Unknown",
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
"header.edition_sub": "Studio Reference Edition",
|
"header.edition_sub": "Studio Reference Edition",
|
||||||
"meta.state": "Состояние",
|
"meta.state": "Состояние",
|
||||||
"meta.source": "Источник",
|
"meta.source": "Источник",
|
||||||
"meta.elapsed": "Прошло",
|
|
||||||
"meta.length": "Длина",
|
|
||||||
"player.title_unavailable": "Название недоступно",
|
"player.title_unavailable": "Название недоступно",
|
||||||
"player.source": "Источник:",
|
"player.source": "Источник:",
|
||||||
"player.unknown_source": "Неизвестно",
|
"player.unknown_source": "Неизвестно",
|
||||||
|
|||||||
Reference in New Issue
Block a user