feat(web): AlbumModal follow everywhere + Settings polish (#10)
Follow affordance in ALL album modals (user request): thread artistMbid through the remaining callers — Library, Wanted, and artist Discography. /api/library and /api/wanted now expose artistMbid (from the joined MonitoredRelease); the artist-detail route already exposed mbid. So every album modal now links the artist name to their page + shows a Follow/Following button. Settings polish (#10): - Qobuz tab: drop the email/password inputs (the engine prefers the more reliable user-id + auth-token path); a "Clear legacy login" affordance appears only when old email/password creds are still stored, and the PUT no longer sends them. - Clear-button alignment fixed: .field label is a flex row and .field-grid bottom-aligns inputs, so a set-secret field (with its · set + Clear) lines up with a plain sibling field. - Library tab gains a read-only Staging path panel (/staging, STAGING_DIR, why fast local disk, rebuild-to-change). - Monitor + Discovery tabs gain grounded helptext (quality-class 1/2/3 cutoff, poll/retry/upgrade-window; sweep cadence + seeds-per-chunk + ListenBrainz URL). web 152 tests, tsc + build clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -149,6 +149,9 @@ nav.contents .sep { flex: 1; }
|
||||
.field { display: flex; flex-direction: column; gap: 6px; }
|
||||
.field > span {
|
||||
font-family: var(--mono); font-size: 0.64rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--graphite);
|
||||
/* keep the label row a consistent height + hold an inline Clear affordance on one line,
|
||||
so a set-secret field lines up with a plain sibling field (align-items:end below). */
|
||||
display: flex; align-items: center; gap: 8px; min-height: 1.5em;
|
||||
}
|
||||
.field input, .field select {
|
||||
font-family: var(--mono); font-size: 0.9rem; padding: 8px 2px; background: transparent;
|
||||
@@ -252,7 +255,7 @@ nav.contents .sep { flex: 1; }
|
||||
.tracks li .tname { color: var(--ink); }
|
||||
|
||||
/* ── Phase 3: settings ────────────────────────────────── */
|
||||
.field-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px 24px; margin: 16px 0 8px; }
|
||||
.field-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px 24px; margin: 16px 0 8px; align-items: end; }
|
||||
.field.wide { grid-column: 1 / -1; }
|
||||
.subhead {
|
||||
font-family: var(--mono); font-size: 0.66rem; letter-spacing: 0.16em; text-transform: uppercase;
|
||||
@@ -270,6 +273,10 @@ nav.contents .sep { flex: 1; }
|
||||
}
|
||||
.save-row { display: flex; align-items: center; gap: 14px; margin-top: 8px; }
|
||||
.settings-section { margin-bottom: 30px; }
|
||||
.help { font-size: 0.8rem; color: var(--graphite); line-height: 1.5; margin: 4px 0 14px; max-width: 62ch; }
|
||||
.help b { color: var(--ink); font-weight: 600; }
|
||||
.help code { font-family: var(--mono); font-size: 0.85em; }
|
||||
.info-panel + .info-panel { margin-top: 14px; }
|
||||
|
||||
/* ── Modal ────────────────────────────────────────────── */
|
||||
.modal-backdrop {
|
||||
|
||||
Reference in New Issue
Block a user