fix(ui): mobile pass 2 — Posts & Subscriptions filter bars
CI / lint (push) Successful in 2s
CI / backend-lint-and-test (push) Successful in 12s
CI / frontend-build (push) Successful in 34s
CI / integration (push) Successful in 2m58s

PostsFilterBar didn't wrap and its artist/platform fields had inline
min-widths (240/180px) a media query can't override → horizontal overflow on
phones. Moved widths to classes, added flex-wrap, and <600px each field takes
a full-width row. SubscriptionsTab's status/search inline max-widths likewise
moved to classes; <600px they go full-width and the v-spacer is dropped so the
search isn't shoved around.

Verified as already-fine (sweep false positives, no change): PostCard (default
body is a stacked column; only goes row at container >=800px), SeriesReaderView
(already has a <=768px block: nav drawer 150px, quick-nav stacks). The
subscriptions v-data-table scrolls horizontally within its own wrapper, so it
doesn't widen the page — a true mobile card layout is a larger follow-up if
wanted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-04 09:26:56 -04:00
parent 304e8aa878
commit 4fd6d4cc29
2 changed files with 20 additions and 4 deletions
@@ -13,7 +13,7 @@
clearable clearable
no-filter no-filter
return-object return-object
style="min-width: 240px" class="fc-posts-filters__artist"
@update:search="onArtistSearch" @update:search="onArtistSearch"
@update:model-value="onArtistPicked" @update:model-value="onArtistPicked"
/> />
@@ -25,7 +25,7 @@
density="compact" density="compact"
hide-details hide-details
clearable clearable
style="min-width: 180px" class="fc-posts-filters__platform"
@update:model-value="emitFilters" @update:model-value="emitFilters"
/> />
@@ -135,6 +135,14 @@ watch(() => props.platform, (val) => {
display: flex; display: flex;
gap: 0.75rem; gap: 0.75rem;
align-items: center; align-items: center;
flex-wrap: wrap;
padding-bottom: 1rem; padding-bottom: 1rem;
} }
.fc-posts-filters__artist { min-width: 240px; flex: 1 1 240px; max-width: 360px; }
.fc-posts-filters__platform { min-width: 180px; flex: 1 1 180px; max-width: 240px; }
/* Phones: each field takes a full-width row instead of overflowing. */
@media (max-width: 600px) {
.fc-posts-filters__artist,
.fc-posts-filters__platform { min-width: 100%; max-width: none; flex-basis: 100%; }
}
</style> </style>
@@ -26,14 +26,14 @@
:items="STATUS_OPTIONS" :items="STATUS_OPTIONS"
:disabled="needsAttention" :disabled="needsAttention"
density="compact" variant="outlined" hide-details density="compact" variant="outlined" hide-details
style="max-width: 180px" class="fc-subs__status"
/> />
<v-text-field <v-text-field
v-model="search" v-model="search"
density="compact" variant="outlined" hide-details clearable density="compact" variant="outlined" hide-details clearable
prepend-inner-icon="mdi-magnify" prepend-inner-icon="mdi-magnify"
placeholder="Search subscriptions" placeholder="Search subscriptions"
style="max-width: 320px" class="fc-subs__search"
/> />
</div> </div>
@@ -568,6 +568,14 @@ async function bulkDelete() {
padding: 8px 0 1rem; padding: 8px 0 1rem;
} }
.fc-subs__bar .v-chip { cursor: pointer; } .fc-subs__bar .v-chip { cursor: pointer; }
.fc-subs__status { max-width: 180px; }
.fc-subs__search { max-width: 320px; flex: 1 1 200px; }
/* Phones: status + search each take a full-width row; drop the spacer that
would otherwise eat a row pushing them around. */
@media (max-width: 600px) {
.fc-subs__status, .fc-subs__search { max-width: none; flex-basis: 100%; }
.fc-subs__bar :deep(.v-spacer) { display: none; }
}
.fc-subs__loading, .fc-subs__empty { .fc-subs__loading, .fc-subs__empty {
display: flex; justify-content: center; padding: 2rem; display: flex; justify-content: center; padding: 2rem;
color: rgb(var(--v-theme-on-surface-variant)); color: rgb(var(--v-theme-on-surface-variant));