diff --git a/frontend/src/components/DownloadQueue.vue b/frontend/src/components/DownloadQueue.vue index f878040..cf01fde 100644 --- a/frontend/src/components/DownloadQueue.vue +++ b/frontend/src/components/DownloadQueue.vue @@ -1,7 +1,7 @@ + + + + diff --git a/frontend/src/components/UrlInput.vue b/frontend/src/components/UrlInput.vue index 91baec2..b211346 100644 --- a/frontend/src/components/UrlInput.vue +++ b/frontend/src/components/UrlInput.vue @@ -1,5 +1,5 @@ @@ -137,24 +182,10 @@ function handlePaste(): void { font-size: var(--font-size-base); } -.btn-extract, .btn-download { white-space: nowrap; padding: var(--space-sm) var(--space-lg); font-weight: 600; -} - -.btn-extract { - background: var(--color-surface); - color: var(--color-accent); - border: 1px solid var(--color-accent); -} - -.btn-extract:hover:not(:disabled) { - background: color-mix(in srgb, var(--color-accent) 15%, transparent); -} - -.btn-download { background: var(--color-accent); color: var(--color-bg); } @@ -168,6 +199,76 @@ button:disabled { cursor: not-allowed; } +/* Controls row */ +.controls-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-sm); +} + +.media-toggle { + display: flex; + gap: 0; + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); + overflow: hidden; +} + +.toggle-pill { + display: flex; + align-items: center; + gap: var(--space-xs); + padding: var(--space-xs) var(--space-md); + background: var(--color-surface); + color: var(--color-text-muted); + border: none; + border-radius: 0; + font-size: var(--font-size-sm); + min-height: 32px; + transition: all 0.15s ease; +} + +.toggle-pill:not(:last-child) { + border-right: 1px solid var(--color-border); +} + +.toggle-pill:hover { + background: var(--color-surface-hover); + color: var(--color-text); +} + +.toggle-pill.active { + background: color-mix(in srgb, var(--color-accent) 15%, transparent); + color: var(--color-accent); +} + +.btn-options { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 0; + background: var(--color-surface); + color: var(--color-text-muted); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); + transition: all 0.15s ease; +} + +.btn-options:hover:not(:disabled) { + color: var(--color-accent); + border-color: var(--color-accent); +} + +.btn-options.active { + color: var(--color-accent); + border-color: var(--color-accent); + background: color-mix(in srgb, var(--color-accent) 10%, transparent); +} + +/* Loading / errors */ .extract-loading { display: flex; align-items: center; @@ -197,13 +298,41 @@ button:disabled { padding: var(--space-sm); } +/* Options panel transition */ +.options-panel { + overflow: hidden; +} + +.options-slide-enter-active, +.options-slide-leave-active { + transition: all 0.25s ease; +} + +.options-slide-enter-from, +.options-slide-leave-to { + opacity: 0; + max-height: 0; +} + +.options-slide-enter-to, +.options-slide-leave-from { + opacity: 1; + max-height: 400px; +} + +.options-hint { + padding: var(--space-md); + text-align: center; + color: var(--color-text-muted); + font-size: var(--font-size-sm); +} + /* Mobile: stack vertically */ @media (max-width: 767px) { .input-row { flex-direction: column; } - .btn-extract, .btn-download { width: 100%; }