diff --git a/frontend/src/components/RecipesView.vue b/frontend/src/components/RecipesView.vue index 1304fd6..119dfc6 100644 --- a/frontend/src/components/RecipesView.vue +++ b/frontend/src/components/RecipesView.vue @@ -3,7 +3,7 @@
-
+
+ > + {{ tab.label }} + {{ tab.mobileLabel }} + +
@@ -805,9 +810,9 @@ const settingsStore = useSettingsStore() // Tab state type TabId = 'find' | 'browse' | 'saved' | 'community' | 'build' -const tabs: Array<{ id: TabId; label: string }> = [ +const tabs: Array<{ id: TabId; label: string; mobileLabel?: string }> = [ { id: 'saved', label: 'Saved' }, - { id: 'build', label: 'Build Your Own' }, + { id: 'build', label: 'Build Your Own', mobileLabel: 'Build' }, { id: 'community', label: 'Community' }, { id: 'find', label: 'Find' }, { id: 'browse', label: 'Browse' }, @@ -1289,6 +1294,14 @@ watch( padding-bottom: var(--spacing-sm); } +/* Prevent theme's mobile .btn white-space:normal from wrapping tab labels */ +@media (max-width: 480px) { + .tab-btn { + white-space: nowrap; + flex-shrink: 0; + } +} + .tab-btn { border-radius: var(--radius-md) var(--radius-md) 0 0; border-bottom: none; diff --git a/frontend/src/theme.css b/frontend/src/theme.css index 7ac2e7a..14b5810 100644 --- a/frontend/src/theme.css +++ b/frontend/src/theme.css @@ -436,6 +436,24 @@ display: none; } +/* Horizontally scrollable tab bar — for tab rows with many items */ +.tab-bar-scroll { + display: flex; + gap: var(--spacing-xs); + overflow-x: auto; + overflow-y: visible; + scrollbar-width: none; + -webkit-overflow-scrolling: touch; + min-width: 0; + width: 100%; + flex-wrap: nowrap; + padding-bottom: 2px; /* prevent focus ring clipping */ +} + +.tab-bar-scroll::-webkit-scrollbar { + display: none; +} + /* ============================================ TEXT UTILITIES ============================================ */