Aprenda a fazer a melhor feijoada com esta receita tradicional. Passo a passo, dicas infalíveis, acompanhamentos e segredos dos mestres.
A Culinária de uma Feijoada de Respeito
Você já parou para pensar no que faz uma feijoada ser tão irresistível? Essa tradicional iguaria brasileira é muito mais do que só um simples prato; é uma verdadeira experiência cultural que reúne pessoas, histórias e sabores únicos. Vamos embarcar numa jornada repleta de aromas e texturas que fazem a feijoada se destacar no coração e na mesa dos brasileiros.
Desde os tempos coloniais, a feijoada tornou-se um símbolo de resistência e celebração. Originalmente associada aos escravos, que aproveitavam as partes menos nobres do porco para criar um banquete, hoje ela é sinônimo de fartura e convívio. Não há maneira melhor de celebrar a vida e a amizade do que ao redor de uma mesa com uma panela de feijoada fumegante ao centro.
Descubra também: Guia de Sobrevivência na Cozinha Brasileira: Gírias e Expressões Culinárias
Entenda a Base da Feijoada
Antes de mergulharmos nas dicas práticas, vamos explorar os pilares que sustentam uma boa feijoada. Esses ingredientes são o coração do prato e fazem toda a diferença no resultado final.
Ingrediente Função Curiosidades Feijão Preto Base do prato Rico em ferro e fibras Carne Suína Sabor e robustez Cortes como costelinha são essenciais Linguiça Calabresa Umidade e sabor Proporciona um toque picante Paio Corpo e textura Um embutido tipicamente brasileiro
Cada ingrediente trabalha em harmonia para criar o paladar rico que conhecemos e amamos. Da escolha dos temperos à qualidade das carnes, cada detalhe importa.
width: 100%;
max-width: 800px;
margin: 20px auto;
background-color: #fff;
border-radius: 12px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
#feijoada-recipe-app .recipe-header {
background: linear-gradient(to right, #422113, #1c6521);
color: white;
padding: 30px 20px;
text-align: center;
position: relative;
}
#feijoada-recipe-app .recipe-title {
font-size: 28px;
font-weight: 700;
margin: 0 0 10px 0;
color: white;
}
#feijoada-recipe-app .recipe-subtitle {
font-size: 18px;
margin: 0;
color: white;
}
#feijoada-recipe-app .recipe-meta {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 15px;
margin-top: 15px;
}
#feijoada-recipe-app .meta-item {
display: flex;
align-items: center;
color: white;
}
#feijoada-recipe-app .meta-icon {
margin-right: 5px;
}
#feijoada-recipe-app .recipe-icon {
width: 80px;
height: 80px;
background-color: rgba(32, 51, 127, 0.1);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
margin-top: 20px;
border: 3px solid white;
}
#feijoada-recipe-app .recipe-icon svg {
width: 50px;
height: 50px;
color: #20337f;
}
#feijoada-recipe-app .recipe-tabs {
display: flex;
border-bottom: 1px solid #e5e5e5;
margin-top: 20px;
}
#feijoada-recipe-app .tab-button {
flex: 1;
padding: 12px;
text-align: center;
background: none;
border: none;
cursor: pointer;
font-size: 16px;
font-weight: 500;
color: #666;
transition: all 0.3s ease;
}
#feijoada-recipe-app .tab-active {
border-bottom: 3px solid #1c6521;
color: #1c6521;
font-weight: 600;
}
#feijoada-recipe-app .tab-content {
padding: 20px;
display: none;
}
#feijoada-recipe-app .tab-content.active {
display: block;
}
#feijoada-recipe-app .section-title {
font-size: 22px;
font-weight: 600;
color: #422113;
margin-bottom: 15px;
}
#feijoada-recipe-app .subsection-title {
font-size: 18px;
font-weight: 500;
color: #1c6521;
margin: 15px 0 10px 0;
}
#feijoada-recipe-app .ingredients-grid {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
}
@media (min-width: 640px) {
#feijoada-recipe-app .ingredients-grid {
grid-template-columns: 1fr 1fr;
}
}
#feijoada-recipe-app .ingredient-item {
display: flex;
align-items: center;
padding: 8px;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.2s;
}
#feijoada-recipe-app .ingredient-item:hover {
background-color: rgba(28, 101, 33, 0.1);
}
#feijoada-recipe-app .ingredient-checkbox {
margin-right: 10px;
width: 18px;
height: 18px;
accent-color: #1c6521;
}
#feijoada-recipe-app .button-group {
margin-top: 20px;
}
#feijoada-recipe-app .btn {
padding: 8px 16px;
border-radius: 8px;
border: none;
cursor: pointer;
font-weight: 500;
transition: all 0.3s ease;
margin-right: 8px;
margin-bottom: 8px;
}
#feijoada-recipe-app .btn-primary {
background-color: #1c6521;
color: white;
}
#feijoada-recipe-app .btn-primary:hover {
background-color: #164d19;
}
#feijoada-recipe-app .btn-secondary {
background-color: #20337f;
color: white;
}
#feijoada-recipe-app .btn-secondary:hover {
background-color: #192a66;
}
#feijoada-recipe-app .btn-light {
background-color: #e5e5e5;
color: #333;
}
#feijoada-recipe-app .btn-light:hover {
background-color: #d5d5d5;
}
#feijoada-recipe-app .step-item {
background-color: rgba(28, 101, 33, 0.1);
padding: 15px;
border-radius: 8px;
margin-bottom: 15px;
}
#feijoada-recipe-app .step-header {
display: flex;
align-items: flex-start;
}
#feijoada-recipe-app .step-number {
background-color: #422113;
color: white;
width: 28px;
height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
margin-right: 15px;
flex-shrink: 0;
}
#feijoada-recipe-app .step-title {
font-weight: 500;
font-size: 18px;
color: #422113;
margin: 0;
}
#feijoada-recipe-app .step-description {
margin: 10px 0;
padding-left: 43px;
}
#feijoada-recipe-app .step-check-container {
display: flex;
align-items: center;
margin-top: 10px;
padding-left: 43px;
}
#feijoada-recipe-app .step-checkbox {
margin-right: 8px;
width: 18px;
height: 18px;
accent-color: #1c6521;
}
#feijoada-recipe-app .progress-container {
background-color: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
margin-top: 20px;
}
#feijoada-recipe-app .progress-bar-container {
width: 100%;
height: 10px;
background-color: #e5e5e5;
border-radius: 5px;
margin: 10px 0;
overflow: hidden;
}
#feijoada-recipe-app .progress-bar {
height: 100%;
background-color: #1c6521;
border-radius: 5px;
transition: width 0.5s ease;
}
#feijoada-recipe-app .timer-container {
background-color: rgba(32, 51, 127, 0.1);
padding: 20px;
border-radius: 8px;
text-align: center;
margin-bottom: 20px;
}
#feijoada-recipe-app .timer-display {
font-size: 48px;
font-weight: bold;
color: #20337f;
margin: 15px 0;
}
#feijoada-recipe-app .timer-buttons {
display: flex;
justify-content: center;
gap: 10px;
flex-wrap: wrap;
}
#feijoada-recipe-app .preset-times {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-top: 15px;
}
#feijoada-recipe-app .preset-btn {
background-color: rgba(32, 51, 127, 0.2);
color: #20337f;
padding: 8px;
border-radius: 8px;
border: none;
cursor: pointer;
transition: all 0.3s ease;
}
#feijoada-recipe-app .preset-btn:hover {
background-color: rgba(32, 51, 127, 0.3);
}
#feijoada-recipe-app .specific-times {
background-color: rgba(66, 33, 19, 0.1);
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
}
#feijoada-recipe-app .specific-time-btn {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
text-align: left;
padding: 10px;
background-color: white;
border: none;
border-radius: 8px;
margin-bottom: 10px;
cursor: pointer;
transition: all 0.3s ease;
}
#feijoada-recipe-app .specific-time-btn:hover {
background-color: rgba(28, 101, 33, 0.1);
}
#feijoada-recipe-app .specific-time-value {
color: #1c6521;
font-weight: 500;
}
#feijoada-recipe-app .custom-timer {
background-color: rgba(28, 101, 33, 0.1);
padding: 15px;
border-radius: 8px;
}
#feijoada-recipe-app .time-inputs {
display: flex;
gap: 10px;
margin-top: 10px;
}
#feijoada-recipe-app .time-input {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 8px;
text-align: center;
}
#feijoada-recipe-app .tips-container {
background-color: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
margin-top: 20px;
}
#feijoada-recipe-app .tip-item {
display: flex;
align-items: flex-start;
margin-bottom: 10px;
}
#feijoada-recipe-app .tip-icon {
color: #1c6521;
margin-right: 10px;
flex-shrink: 0;
}
#feijoada-recipe-app .recipe-footer {
background: linear-gradient(to right, #422113, #1c6521);
color: white;
padding: 15px;
text-align: center;
}
#feijoada-recipe-app .notification {
position: fixed;
bottom: 20px;
right: 20px;
background-color: #1c6521;
color: white;
padding: 12px 20px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
display: flex;
align-items: center;
transform: translateY(100px);
opacity: 0;
transition: all 0.5s ease;
z-index: 1000;
}
#feijoada-recipe-app .notification.show {
transform: translateY(0);
opacity: 1;
}
#feijoada-recipe-app .notification-icon {
margin-right: 10px;
}
@media (max-width: 640px) {
#feijoada-recipe-app .recipe-title {
font-size: 24px;
}
#feijoada-recipe-app .recipe-meta {
flex-direction: column;
align-items: center;
gap: 8px;
}
#feijoada-recipe-app .timer-display {
font-size: 36px;
}
}
</style>
<div class="recipe-header">
<p class="recipe-subtitle">Receita tradicional interativa</p>
<div class="recipe-meta">
<div class="meta-item">
<svg xmlns="http://www.w3.org/2000/svg" class="meta-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="10"></circle>
<polyline points="12 6 12 12 16 14"></polyline>
</svg>
<span>3 horas</span>
</div>
<div class="meta-item">
<svg xmlns="http://www.w3.org/2000/svg" class="meta-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
<circle cx="9" cy="7" r="4"></circle>
<path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
<path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
</svg>
<span>8 porções</span>
</div>
<div class="meta-item">
<svg xmlns="http://www.w3.org/2000/svg" class="meta-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
</svg>
<span>Dificuldade: Média</span>
</div>
</div>
<div class="recipe-icon">
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</div>
</div>
<div class="recipe-tabs">
<button class="tab-button tab-active" data-tab="ingredients">Ingredientes</button>
<button class="tab-button" data-tab="instructions">Modo de Preparo</button>
<button class="tab-button" data-tab="timer">Temporizador</button>
</div>
<div class="tab-content active" id="ingredients-content">
<h2 class="section-title">Ingredientes</h2>
<div class="ingredients-grid">
<div>
<h3 class="subsection-title">Feijão e Carnes</h3>
<div class="ingredient-list">
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>500g de feijão preto</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>300g de carne seca</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>200g de lombo de porco</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>200g de linguiça calabresa</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>200g de costelinha de porco</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>150g de paio</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>2 pés de porco salgados (opcional)</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>2 orelhas de porco salgadas (opcional)</span>
</label>
</div>
</div>
<div>
<h3 class="subsection-title">Temperos e Acompanhamentos</h3>
<div class="ingredient-list">
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>3 folhas de louro</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>4 dentes de alho picados</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>2 cebolas médias picadas</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>3 colheres de sopa de óleo</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>Sal a gosto</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>Pimenta a gosto</span>
</label>
</div>
<h3 class="subsection-title">Para servir</h3>
<div class="ingredient-list">
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>Arroz branco</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>Farofa</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>Couve refogada</span>
</label>
<label class="ingredient-item">
<input type="checkbox" class="ingredient-checkbox">
<span>Laranja em rodelas</span>
</label>
</div>
</div>
</div>
<div class="button-group">
<button id="check-all" class="btn btn-primary">Marcar Todos</button>
<button id="uncheck-all" class="btn btn-light">Desmarcar Todos</button>
<button id="print-list" class="btn btn-secondary">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display: inline-block; vertical-align: -2px; margin-right: 5px;">
<polyline points="6 9 6 2 18 2 18 9"></polyline>
<path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path>
<rect x="6" y="14" width="12" height="8"></rect>
</svg>
Imprimir Lista
</button>
</div>
</div>
<div class="tab-content" id="instructions-content">
<h2 class="section-title">Modo de Preparo</h2>
<div class="steps-container">
<div class="step-item">
<div class="step-header">
<div class="step-number">1</div>
<h3 class="step-title">Preparação Inicial</h3>
</div>
<p class="step-description">Deixe o feijão de molho por pelo menos 8 horas ou durante a noite. Dessalgue as carnes salgadas, trocando a água várias vezes.</p>
<div class="step-check-container">
<input type="checkbox" class="step-checkbox">
<span class="step-check-label">Marcar como concluído</span>
</div>
</div>
<div class="step-item">
<div class="step-header">
<div class="step-number">2</div>
<h3 class="step-title">Cozimento do Feijão</h3>
</div>
<p class="step-description">Escorra o feijão e coloque-o na panela de pressão com água suficiente para cobri-lo, adicione as folhas de louro e cozinhe por cerca de 30 minutos após pegar pressão.</p>
<div class="step-check-container">
<input type="checkbox" class="step-checkbox">
<span class="step-check-label">Marcar como concluído</span>
</div>
</div>
<div class="step-item">
<div class="step-header">
<div class="step-number">3</div>
<h3 class="step-title">Preparo das Carnes</h3>
</div>
<p class="step-description">Em uma panela grande, aqueça o óleo e refogue a cebola e o alho até dourar. Adicione as carnes cortadas em pedaços e refogue por alguns minutos.</p>
<div class="step-check-container">
<input type="checkbox" class="step-checkbox">
<span class="step-check-label">Marcar como concluído</span>
</div>
</div>
<div class="step-item">
<div class="step-header">
<div class="step-number">4</div>
<h3 class="step-title">Combinando Tudo</h3>
</div>
<p class="step-description">Transfira o feijão cozido para a panela com as carnes. Adicione sal e pimenta a gosto. Deixe cozinhar em fogo baixo por aproximadamente 1 hora, mexendo ocasionalmente.</p>
<div class="step-check-container">
<input type="checkbox" class="step-checkbox">
<span class="step-check-label">Marcar como concluído</span>
</div>
</div>
<div class="step-item">
<div class="step-header">
<div class="step-number">5</div>
<h3 class="step-title">Finalizando</h3>
</div>
<p class="step-description">Verifique o tempero e ajuste se necessário. Se o caldo estiver muito líquido, deixe cozinhar por mais tempo com a panela destampada para reduzir.</p>
<div class="step-check-container">
<input type="checkbox" class="step-checkbox">
<span class="step-check-label">Marcar como concluído</span>
</div>
</div>
<div class="step-item">
<div class="step-header">
<div class="step-number">6</div>
<h3 class="step-title">Servindo</h3>
</div>
<p class="step-description">Sirva a feijoada quente acompanhada de arroz branco, farofa, couve refogada e rodelas de laranja.</p>
<div class="step-check-container">
<input type="checkbox" class="step-checkbox">
<span class="step-check-label">Marcar como concluído</span>
</div>
</div>
</div>
<div class="progress-container">
<h3 class="subsection-title">Progresso da Receita</h3>
<div class="progress-bar-container">
<div id="progress-bar" class="progress-bar" style="width: 0%"></div>
</div>
<p id="progress-text">0% concluído</p>
</div>
</div>
<div class="tab-content" id="timer-content">
<h2 class="section-title">Temporizador de Cozimento</h2>
<div class="timer-container">
<h3 class="subsection-title">Temporizador Principal</h3>
<div id="main-timer-display" class="timer-display">00:00:00</div>
<div class="timer-buttons">
<button id="start-main-timer" class="btn btn-primary">Iniciar</button>
<button id="pause-main-timer" class="btn btn-light" disabled>Pausar</button>
<button id="reset-main-timer" class="btn btn-light">Reiniciar</button>
</div>
<div>
<h4 class="subsection-title">Tempo Predefinido</h4>
<div class="preset-times">
<button class="preset-btn" data-time="1800">30 min</button>
<button class="preset-btn" data-time="3600">1 hora</button>
<button class="preset-btn" data-time="7200">2 horas</button>
</div>
</div>
</div>
<div class="specific-times">
<h3 class="subsection-title">Etapas Específicas</h3>
<button class="specific-time-btn" data-time="28800">
<span>Deixar feijão de molho</span>
<span class="specific-time-value">8 horas</span>
</button>
<button class="specific-time-btn" data-time="1800">
<span>Cozinhar feijão na pressão</span>
<span class="specific-time-value">30 min</span>
</button>
<button class="specific-time-btn" data-time="3600">
<span>Cozinhar com as carnes</span>
<span class="specific-time-value">1 hora</span>
</button>
<button class="specific-time-btn" data-time="600">
<span>Refogar a couve</span>
<span class="specific-time-value">10 min</span>
</button>
</div>
<div class="custom-timer">
<h3 class="subsection-title">Tempo Personalizado</h3>
<div class="time-inputs">
<input type="number" id="custom-hours" min="0" max="23" value="0" class="time-input" placeholder="Horas">
<input type="number" id="custom-minutes" min="0" max="59" value="0" class="time-input" placeholder="Minutos">
<input type="number" id="custom-seconds" min="0" max="59" value="0" class="time-input" placeholder="Segundos">
</div>
<button id="set-custom-timer" class="btn btn-primary" style="width: 100%; margin-top: 10px;">Definir Temporizador</button>
</div>
<div class="tips-container">
<h3 class="subsection-title">Dicas de Tempo</h3>
<div class="tip-item">
<svg xmlns="http://www.w3.org/2000/svg" class="tip-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
<span>O tempo de cozimento pode variar dependendo da qualidade do feijão e das carnes.</span>
</div>
<div class="tip-item">
<svg xmlns="http://www.w3.org/2000/svg" class="tip-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
<span>Feijões mais antigos podem levar mais tempo para cozinhar.</span>
</div>
<div class="tip-item">
<svg xmlns="http://www.w3.org/2000/svg" class="tip-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
<span>Quanto mais tempo a feijoada ficar no fogo baixo, mais saborosa ficará.</span>
</div>
</div>
</div>
<div class="recipe-footer">
<p>Receita Interativa de Feijoada Brasileira</p>
<p style="margin-top: 5px; font-size: 14px;">Bom apetite!</p>
</div>
<div id="notification" class="notification">
<svg xmlns="http://www.w3.org/2000/svg" class="notification-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path>
<path d="M13.73 21a2 2 0 0 1-3.46 0"></path>
</svg>
<span id="notification-text">Notificação</span>
</div>
<script>
(function() {
// Isolate our code to avoid conflicts
const app = document.getElementById('feijoada-recipe-app');
// Tab Navigation
const tabButtons = app.querySelectorAll('.tab-button');
const tabContents = app.querySelectorAll('.tab-content');
tabButtons.forEach(button => {
button.addEventListener('click', () => {
const tabId = button.getAttribute('data-tab');
// Update active tab button
tabButtons.forEach(btn => btn.classList.remove('tab-active'));
button.classList.add('tab-active');
// Show selected tab content
tabContents.forEach(content => {
content.classList.remove('active');
if (content.id === tabId + '-content') {
content.classList.add('active');
}
});
});
});
// Ingredients Checkboxes
const checkAllBtn = app.querySelector('#check-all');
const uncheckAllBtn = app.querySelector('#uncheck-all');
const printListBtn = app.querySelector('#print-list');
const ingredientCheckboxes = app.querySelectorAll('.ingredient-checkbox');
checkAllBtn.addEventListener('click', () => {
ingredientCheckboxes.forEach(checkbox => {
checkbox.checked = true;
});
showNotification('Todos os ingredientes marcados!');
});
uncheckAllBtn.addEventListener('click', () => {
ingredientCheckboxes.forEach(checkbox => {
checkbox.checked = false;
});
showNotification('Todos os ingredientes desmarcados!');
});
printListBtn.addEventListener('click', () => {
const missingIngredients = [];
ingredientCheckboxes.forEach(checkbox => {
if (!checkbox.checked) {
missingIngredients.push(checkbox.nextElementSibling.textContent.trim());
}
});
if (missingIngredients.length > 0) {
let printContent = '<h2>Lista de Compras - Feijoada</h2><ul>';
missingIngredients.forEach(item => {
printContent += `<li>${item}</li>`;
});
printContent += '</ul>';
const printWindow = window.open('', '_blank');
printWindow.document.write(`
<html>
<head>
<title>Lista de Compras - Feijoada</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
h2 { color: #1c6521; }
ul { padding-left: 20px; }
li { margin-bottom: 8px; }
</style>
</head>
<body>
${printContent}
</body>
</html>
`);
printWindow.document.close();
printWindow.print();
} else {
showNotification('Todos os ingredientes já estão marcados!');
}
});
// Instructions Progress
const stepCheckboxes = app.querySelectorAll('.step-checkbox');
const progressBar = app.querySelector('#progress-bar');
const progressText = app.querySelector('#progress-text');
stepCheckboxes.forEach(checkbox => {
checkbox.addEventListener('change', updateProgress);
});
function updateProgress() {
const totalSteps = stepCheckboxes.length;
let completedSteps = 0;
stepCheckboxes.forEach(checkbox => {
if (checkbox.checked) {
completedSteps++;
}
});
const progressPercentage = Math.round((completedSteps / totalSteps) * 100);
progressBar.style.width = `${progressPercentage}%`;
progressText.textContent = `${progressPercentage}% concluído`;
if (progressPercentage === 100) {
showNotification('Parabéns! Você concluiu a receita!');
progressBar.classList.add('pulse');
} else {
progressBar.classList.remove('pulse');
}
}
// Timer Functionality
let mainTimerInterval;
let mainTimerSeconds = 0;
let isTimerRunning = false;
const mainTimerDisplay = app.querySelector('#main-timer-display');
const startMainTimerBtn = app.querySelector('#start-main-timer');
const pauseMainTimerBtn = app.querySelector('#pause-main-timer');
const resetMainTimerBtn = app.querySelector('#reset-main-timer');
const presetTimerBtns = app.querySelectorAll('.preset-btn');
const specificTimeBtns = app.querySelectorAll('.specific-time-btn');
const setCustomTimerBtn = app.querySelector('#set-custom-timer');
const customHoursInput = app.querySelector('#custom-hours');
const customMinutesInput = app.querySelector('#custom-minutes');
const customSecondsInput = app.querySelector('#custom-seconds');
startMainTimerBtn.addEventListener('click', startMainTimer);
pauseMainTimerBtn.addEventListener('click', pauseMainTimer);
resetMainTimerBtn.addEventListener('click', resetMainTimer);
presetTimerBtns.forEach(btn => {
btn.addEventListener('click', () => {
const seconds = parseInt(btn.getAttribute('data-time'));
setMainTimer(seconds);
showNotification(`Temporizador definido para ${formatTime(seconds)}`);
});
});
specificTimeBtns.forEach(btn => {
btn.addEventListener('click', () => {
const seconds = parseInt(btn.getAttribute('data-time'));
setMainTimer(seconds);
showNotification(`Temporizador definido para ${btn.querySelector('.specific-time-value').textContent}`);
});
});
setCustomTimerBtn.addEventListener('click', () => {
const hours = parseInt(customHoursInput.value) || 0;
const minutes = parseInt(customMinutesInput.value) || 0;
const seconds = parseInt(customSecondsInput.value) || 0;
const totalSeconds = (hours * 3600) + (minutes * 60) + seconds;
if (totalSeconds > 0) {
setMainTimer(totalSeconds);
showNotification(`Temporizador personalizado definido para ${formatTime(totalSeconds)}`);
} else {
showNotification('Por favor, defina um tempo válido');
}
});
function startMainTimer() {
if (!isTimerRunning) {
isTimerRunning = true;
startMainTimerBtn.disabled = true;
pauseMainTimerBtn.disabled = false;
mainTimerInterval = setInterval(() => {
if (mainTimerSeconds > 0) {
mainTimerSeconds--;
updateMainTimerDisplay();
if (mainTimerSeconds === 0) {
clearInterval(mainTimerInterval);
isTimerRunning = false;
startMainTimerBtn.disabled = false;
pauseMainTimerBtn.disabled = true;
showNotification('Tempo esgotado!', true);
playAlarm();
}
}
}, 1000);
}
}
function pauseMainTimer() {
clearInterval(mainTimerInterval);
isTimerRunning = false;
startMainTimerBtn.disabled = false;
pauseMainTimerBtn.disabled = true;
}
function resetMainTimer() {
clearInterval(mainTimerInterval);
mainTimerSeconds = 0;
isTimerRunning = false;
startMainTimerBtn.disabled = false;
pauseMainTimerBtn.disabled = true;
updateMainTimerDisplay();
}
function setMainTimer(seconds) {
clearInterval(mainTimerInterval);
mainTimerSeconds = seconds;
isTimerRunning = false;
startMainTimerBtn.disabled = false;
pauseMainTimerBtn.disabled = true;
updateMainTimerDisplay();
}
function updateMainTimerDisplay() {
mainTimerDisplay.textContent = formatTime(mainTimerSeconds);
}
function formatTime(totalSeconds) {
const hours = Math.floor(totalSeconds / 3600);
const minutes = Math.floor((totalSeconds % 3600) / 60);
const seconds = totalSeconds % 60;
return [
hours.toString().padStart(2, '0'),
minutes.toString().padStart(2, '0'),
seconds.toString().padStart(2, '0')
].join(':');
}
function playAlarm() {
// Visual alarm since audio is not supported
const container = app;
let flashCount = 0;
const flashInterval = setInterval(() => {
if (flashCount >= 10) {
clearInterval(flashInterval);
return;
}
if (flashCount % 2 === 0) {
mainTimerDisplay.style.color = '#422113';
} else {
mainTimerDisplay.style.color = '#20337f';
}
flashCount++;
}, 500);
}
// Notification System
const notification = app.querySelector('#notification');
const notificationText = app.querySelector('#notification-text');
let notificationTimeout;
function showNotification(message, isAlert = false) {
clearTimeout(notificationTimeout);
notificationText.textContent = message;
if (isAlert) {
notification.style.backgroundColor = '#422113';
} else {
notification.style.backgroundColor = '#1c6521';
}
notification.classList.add('show');
notificationTimeout = setTimeout(() => {
notification.classList.remove('show');
}, 3000);
}
// Initialize
updateProgress();
updateMainTimerDisplay();
})();
</script>
Preparando os Ingredientes
Começar com ingredientes de qualidade é o primeiro passo para uma feijoada memorável. Certifique-se de que suas carnes são frescas e os grãos, bem escolhidos. Antes de ir para o fogo, é importante deixar de molho o feijão preto em água por pelo menos 12 horas para garantir uma textura perfeita.
Tempere as carnes com alho e cebola e deixe-as descansar por uma noite. Essa simples preparação garantirá que os sabores estejam bem incorporados, resultando em uma explosão de sabor quando cozidos.
"A feijoada é mais do que um prato; é um abraço caloroso servindo em uma panela." - Anônimo
O Cozimento: A Magia Acontece Aqui
Agora é a hora de juntar todos os ingredientes e ver a mágica acontecer. Comece refogando alho e cebola em um pouco de óleo, adicione o feijão preto drenado e cubra com água fresca. O segredo aqui é cozinhar em fogo baixo, permitindo que todos os sabores se misturem lentamente.
Adicione as carnes na sequência e vá ajustando o sal conforme sobem os aromas. Lembre-se de verificar o líquido constantemente, pois o feijão absorve bastante água durante o cozimento. Tenha sempre água quente à mão para adicionar, caso necessário.
Acompanhamentos Clássicos
A feijoada brilha ainda mais quando acompanhada de seus complementos tradicionais. Arroz branco, farofa, couve refogada e laranja fatiada são obrigatórios na mesa de um verdadeiro banquete de feijoada. Esses acompanhamentos não são apenas tradição, mas equilibram os sabores intensos, fornecendo frescor e textura ao prato.
Por que a Laranja? O Toque Final de Frescor
A presença da laranja na feijoada não é apenas decorativa. O cítrico equilibrado corta a gordura e ajuda na digestão, tornando a refeição mais leve e agradável. A acidez e o frescor complementam o prato, equilibrando a intensividade dos sabores.
Sugestões de Variações para Feijoada
Quer inovar sem perder a essência? Experimente adicionar carne-seca ou substituir parte das carnes suínas por carnes de aves para uma versão mais leve. Essa variação pode surpreender os convidados e oferecer uma nova perspectiva sobre a tradicional feijoada.
Feijoada Vegana: Substitua as carnes por vegetais defumados para uma versão muito saborosa.
Feijoada de Frutos do Mar: Uma variante que incorpora camarões e mexilhões, oferecendo uma frescura inesperada.
Feijoada Ligeira: Use cortes magros e adicione mais legumes ao preparo.
Feijoada de Verão: Aposte em acompanhamentos frescos como saladas de rúcula e tomate.
FAQ - Dúvidas Comuns
Por quanto tempo a feijoada precisa cozinhar?
O cozimento leva, em média, de 2 a 3 horas em fogo baixo, até que as carnes estejam bem macias.
Posso congelar a feijoada?
Sim, a feijoada congela muito bem e pode ser armazenada por até 3 meses em um recipiente hermético.
Qual o melhor tipo de feijão para a feijoada?
Tradicionalmente, usa-se o feijão preto, que adiciona cor e um sabor característico ao prato.
A feijoada tradicionalmente contém quais carnes?
Costelinha de porco, carne-seca, lombo, paio e linguiça calabresa são os cortes mais comuns.
É possível fazer uma feijoada versão vegetariana?
Sim, substituindo as carnes por ingredientes vegetais que agreguem sabor e textura, como cogumelos e tofu defumado.
Conclusão
A feijoada não é apenas um prato, é um evento. Desde a seleção cuidadosa dos ingredientes até o cozimento lento e metódico, cada passo é uma celebração da herança culinária.
Seja compartilhada com amigos de longa data ou em uma reunião familiar , a feijoada une pessoas de todas as idades ao redor da mesa, criando memórias inestimáveis. Prepare com amor, saboreie sem pressa e permita que cada garfada te transporte para um lugar de pura felicidade gastronômica.