diff --git a/frontend/src/components/RecipesView.vue b/frontend/src/components/RecipesView.vue
index f0c5029..efd97c7 100644
--- a/frontend/src/components/RecipesView.vue
+++ b/frontend/src/components/RecipesView.vue
@@ -11,7 +11,7 @@
:aria-selected="activeTab === tab.id"
:tabindex="activeTab === tab.id ? 0 : -1"
:class="['btn', 'tab-btn', activeTab === tab.id ? 'btn-primary' : 'btn-secondary']"
- @click="activeTab = tab.id"
+ @click="activateTab(tab.id)"
@keydown="onTabKeydown"
>{{ tab.label }}
@@ -32,6 +32,7 @@
aria-labelledby="tab-saved"
tabindex="0"
@open-recipe="openRecipeById"
+ @go-to-tab="(tab: string) => activateTab(tab as TabId)"
/>
@@ -80,8 +81,8 @@
-
-
The AI will freestyle recipes from whatever you have. Results can be unusual — that's part of the fun.
+
@@ -159,6 +164,7 @@
aria-describedby="allergy-hint"
@keydown="onAllergyKey"
@blur="commitAllergyInput"
+ autocomplete="off"
/>
No recipes containing these ingredients will appear.
@@ -194,7 +200,7 @@
advancedOpen = (e.target as HTMLDetailsElement).open">
- Advanced filters
+ Nutrition Filters{{ activeNutritionFilterCount > 0 ? ` (${activeNutritionFilterCount} active)` : '' }}
@@ -313,13 +319,13 @@
-
-
Your pantry is missing some flavor elements:
+
+
These would expand your options:
{{ gap }}
@@ -331,6 +337,7 @@
v-model="filterText"
placeholder="Search recipes or ingredients…"
aria-label="Filter recipes"
+ autocomplete="off"
/>
@@ -386,16 +393,16 @@
{{ recipe.match_count }} matched
Level {{ recipe.level }}
-
Wildcard
+
Wildcard
@@ -450,12 +457,12 @@
-
You'd need:
+
To complete this recipe:
{{ ing }}
@@ -471,13 +478,34 @@
target="_blank"
rel="noopener noreferrer"
class="grocery-link status-badge status-info"
+ title="This is an affiliate link"
>
{{ link.ingredient }} @ {{ link.retailer }} ↗
-
+
+
+
+
+
+
Steps
+
+ -
+ {{ step }}
+
+
+
+
+
-
-
-
-
-
-
Steps
-
- -
- {{ step }}
-
-
-
-