Prep
25 min
Cook
45 min
Servings
6
Equipment
large_heavy_pot, wooden_spoon, fine_mesh_strainer
In the grand houses of the French Quarter, where wrought-iron balconies overlook cobblestone streets and the Mississippi River whispers of distant ports, courtbouillon represents New Orleans cuisine at its most sophisticated. This is not the simple court-bouillon of classical French cooking—a clear poaching liquid—but rather its Creole evolution: a rich, tomato-based stew that marries French technique with Caribbean flavors and Louisiana's abundant seafood.
The dish emerged in the 18th century as French colonists adapted their traditional recipes to local ingredients. What they created was something entirely new—a complex, layered stew built on the foundation of the Creole Holy Trinity (celery, onions, and bell peppers), enriched with tomatoes that arrived via Spanish and Caribbean trade routes, and perfumed with bay leaves from Louisiana's own wetlands.
At its heart, courtbouillon is about the roux—that fundamental marriage of fat and flour that forms the backbone of so much Louisiana cooking. But this is not the dark, almost-burnt roux of gumbo. Courtbouillon calls for a blonde or medium roux, cooked just long enough to eliminate the raw flour taste while maintaining the thickening power needed to create a sauce that coats fish without overwhelming it.
The technique requires patience and understanding. The Holy Trinity must be cooked until sweet and tender, the tomatoes must break down into silk, and the fish must be added at precisely the right moment—early enough to absorb the flavors, late enough to avoid overcooking. When done correctly, the result is a dish that tastes both familiar and exotic, refined yet soulful.
This is New Orleans cooking at its most elegant—sophisticated enough for the finest tables, yet rooted in the practical wisdom of making the most of local ingredients. It represents the unique culinary alchemy that occurs when French technique meets Caribbean spice, African wisdom, and Louisiana abundance.
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="0">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 cup
</span>
<span class="text-gray-800 ml-2 ingredient-name">
1/4 cup vegetable oil
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="0"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="0">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="0">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="0"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="0"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="0"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="1">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 cup
</span>
<span class="text-gray-800 ml-2 ingredient-name">
1/4 cup all-purpose flour
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="1"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="1">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="1">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="1"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="1"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="1"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="2">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
2 large
</span>
<span class="text-gray-800 ml-2 ingredient-name">
onions, diced
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="2"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="2">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="2">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 26.666666666666668%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="2"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="2"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="2"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="3">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
2 bell
</span>
<span class="text-gray-800 ml-2 ingredient-name">
peppers (preferably one red, one green), diced
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="3"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="3">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="3">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 26.666666666666668%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="3"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="3"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="3"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="4">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
3 celery
</span>
<span class="text-gray-800 ml-2 ingredient-name">
stalks, diced
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="4"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="4">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="4">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 2.2222222222222214%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 11.11111111111111%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 15.555555555555555%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="4"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="4"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="4"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="5">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
4 cloves
</span>
<span class="text-gray-800 ml-2 ingredient-name">
garlic, minced
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="5"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="5">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="5">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 3.3333333333333335%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 10%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="5"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="5"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="5"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="6">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
2 bay
</span>
<span class="text-gray-800 ml-2 ingredient-name">
leaves
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="6"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="6">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="6">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 26.666666666666668%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="6"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="6"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="6"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="7">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 tablespoon
</span>
<span class="text-gray-800 ml-2 ingredient-name">
fresh thyme (or 1 teaspoon dried)
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="7"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="7">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="7">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="7"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="7"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="7"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="8">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 can
</span>
<span class="text-gray-800 ml-2 ingredient-name">
(28oz) crushed tomatoes, preferably San Marzano
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="8"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="8">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="8">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="8"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="8"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="8"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="9">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
4 cups
</span>
<span class="text-gray-800 ml-2 ingredient-name">
seafood stock (or fish stock)
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="9"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="9">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="9">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 3.3333333333333335%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 10%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="9"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="9"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="9"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="10">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 cup
</span>
<span class="text-gray-800 ml-2 ingredient-name">
dry white wine
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="10"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="10">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="10">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="10"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="10"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="10"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="11">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
2 tablespoons
</span>
<span class="text-gray-800 ml-2 ingredient-name">
tomato paste
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="11"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="11">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="11">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 26.666666666666668%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="11"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="11"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="11"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="12">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 tablespoon
</span>
<span class="text-gray-800 ml-2 ingredient-name">
Worcestershire sauce
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="12"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="12">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="12">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="12"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="12"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="12"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="13">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 teaspoon
</span>
<span class="text-gray-800 ml-2 ingredient-name">
hot sauce (Crystal or Tabasco)
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="13"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="13">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="13">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="13"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="13"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="13"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="14">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 teaspoon
</span>
<span class="text-gray-800 ml-2 ingredient-name">
1/2 teaspoon cayenne pepper
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="14"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="14">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="14">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="14"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="14"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="14"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="15">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1
</span>
<span class="text-gray-800 ml-2 ingredient-name">
Salt and freshly ground black pepper to taste
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="15"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="15">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="15">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="15"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="15"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="15"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="16">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
2.5 lbs
</span>
<span class="text-gray-800 ml-2 ingredient-name">
sea bass fillets, skin removed, cut into 2-inch pieces
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="16"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="16">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="16">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 4.000000000000001%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 9.333333333333332%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 14.666666666666666%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 25.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="16"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="16"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="16"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="17">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
2 tablespoons
</span>
<span class="text-gray-800 ml-2 ingredient-name">
Creole seasoning
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="17"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="17">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="17">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 0%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 13.333333333333334%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 26.666666666666668%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="17"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="17"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="17"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="18">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1 cup
</span>
<span class="text-gray-800 ml-2 ingredient-name">
1/4 cup fresh parsley, chopped
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="18"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="18">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="18">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="18"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="18"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="18"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="19">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
3 green
</span>
<span class="text-gray-800 ml-2 ingredient-name">
onions, sliced thin
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="19"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="19">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="19">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 2.2222222222222214%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 11.11111111111111%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 15.555555555555555%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="19"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="19"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="19"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="20">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1
</span>
<span class="text-gray-800 ml-2 ingredient-name">
Lemon wedges for serving
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="20"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="20">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="20">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="20"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="20"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="20"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
<div class="ingredient-slider-container mb-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100 hover:shadow-md transition-all duration-300"
data-ingredient-index="21">
<!-- Ingredient Display -->
<div class="flex items-center justify-between mb-3">
<div class="ingredient-text flex-1">
<span class="text-sm text-gray-600 font-medium ingredient-amount">
1
</span>
<span class="text-gray-800 ml-2 ingredient-name">
White rice for serving
</span>
</div>
<!-- Quick Reset -->
<button class="reset-ingredient opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-orange-500 transition-all duration-200"
data-ingredient-index="21"
title="Reset to original amount">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
</svg>
</button>
</div>
<!-- Premium Slider Control -->
<div class="ingredient-slider-track relative h-2 bg-gray-200 rounded-full mb-2 cursor-pointer"
data-ingredient-index="21">
<!-- Progress Track -->
<div class="ingredient-slider-progress absolute left-0 top-0 h-full bg-gradient-to-r from-orange-400 to-orange-500 rounded-full transition-all duration-300 ease-out"
style="width: 20%"></div>
<!-- Slider Handle -->
<div class="ingredient-slider-handle absolute top-1/2 transform -translate-y-1/2 w-5 h-5 bg-white border-2 border-orange-500 rounded-full cursor-grab active:cursor-grabbing shadow-md hover:shadow-lg transition-all duration-200"
style="left: calc(20% - 10px)"
data-ingredient-index="21">
<div class="w-2 h-2 bg-orange-500 rounded-full absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"></div>
</div>
<!-- Common Value Markers -->
<div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 6.666666666666667%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 20%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 33.33333333333333%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 46.666666666666664%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 60%"></div><div class="absolute top-0 h-2 w-0.5 bg-gray-300 opacity-50" style="left: 73.33333333333333%"></div>
</div>
<!-- Quick Adjustment Buttons -->
<div class="flex items-center justify-between text-xs text-gray-500">
<div class="flex gap-2">
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="21"
data-scale="0.5">½x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="21"
data-scale="1.5">1.5x</button>
<button class="quick-adjust px-2 py-1 rounded text-xs hover:bg-orange-50 hover:text-orange-600 transition-colors duration-200"
data-ingredient-index="21"
data-scale="2">2x</button>
</div>
<!-- Scale Factor Display -->
<span class="scale-factor ">
Original
</span>
</div>
</div>
1
Prepare the mise en place
Dice all vegetables to uniform size—about 1/4 inch pieces. The Holy Trinity should be cut precisely for even cooking. Season the sea bass pieces with Creole seasoning and let them come to room temperature.
Uniform cuts ensure even cooking and professional presentation.
2
Create the roux
In a large, heavy-bottomed pot or Dutch oven, heat the oil over medium heat. Gradually whisk in the flour, stirring constantly to prevent lumps. Cook the roux, stirring continuously, for 8-10 minutes until it reaches a golden blonde color.
The roux should smell nutty and toasted, not burnt. Constant stirring prevents scorching.
3
Build the flavor base
Add the diced onions to the roux and cook, stirring frequently, for 5 minutes until they begin to soften. Add the bell peppers and celery, continuing to cook for another 8-10 minutes until all vegetables are tender.
This slow cooking develops sweetness in the vegetables and forms the aromatic foundation.
4
Add aromatics
Stir in the minced garlic, bay leaves, and thyme. Cook for another minute until fragrant. The mixture should be aromatic and the vegetables completely softened.
Don't let the garlic brown—it should just become fragrant.
5
Incorporate tomatoes
Add the tomato paste and cook for 2 minutes, stirring constantly, until it darkens slightly. Add the crushed tomatoes and cook for 10 minutes, stirring occasionally, until they break down and integrate with the roux.
Cooking the tomato paste first intensifies its flavor and prevents a raw taste.
6
Build the liquid base
Slowly add the white wine, stirring to deglaze the pot and scraping up any browned bits from the bottom. Add the seafood stock gradually, whisking constantly to prevent lumps from forming.
Adding liquid gradually prevents the roux from seizing and becoming lumpy.
7
Season and simmer
Add the Worcestershire sauce, hot sauce, and cayenne pepper. Bring to a gentle simmer and cook for 15 minutes, stirring occasionally, until the sauce has thickened to coat the back of a spoon.
The sauce should be rich and glossy, thick enough to coat fish without being heavy.
8
Adjust seasoning
Taste the courtbouillon base and adjust seasoning with salt, pepper, and additional hot sauce as needed. The flavor should be complex, with balances of heat, acidity, and richness.
Remember that the fish will contribute some salinity, so season conservatively.
9
Add the fish
Gently nestle the seasoned sea bass pieces into the simmering courtbouillon, ensuring they're mostly submerged. Cover and simmer gently for 8-10 minutes until the fish flakes easily with a fork.
Don't boil vigorously—gentle simmering keeps the fish tender and prevents it from breaking apart.
10
Final adjustments
Carefully taste again and adjust seasoning. Remove the bay leaves and discard. The fish should be perfectly cooked and the sauce should cling beautifully to each piece.
The final seasoning adjustment ensures perfect balance after the fish has contributed its flavors.
11
Finish with herbs
Remove from heat and gently stir in the chopped parsley and green onions. The herbs should be bright and fresh, not cooked to death.
Fresh herbs added at the end provide color and bright flavor contrast to the rich stew.
12
Serve in true Creole style
Serve over hot white rice in deep bowls, with lemon wedges on the side. The courtbouillon should be saucy enough to flavor the rice but not so liquid that it's soup-like.
The rice absorbs the flavorful sauce while providing a neutral base for the complex flavors.
Reset Progress
Mark All Complete