chefcode / frontend /style.css
Mariem-Daha's picture
Upload 31 files
9aaec2c verified
.tab-title {
margin: 0 0 12px 0;
font-size: 1.1em;
color: #0078d7;
text-align: left;
border-bottom: 1px solid #e0e0e0;
padding-bottom: 4px;
}
/* Mostra i tab Production SOLO nella pagina Production attiva */
.production-tabs,
.production-tasks-tabbed {
display: none;
}
#production-content.active .production-tabs {
display: flex;
}
#production-content.active .production-tasks-tabbed {
display: block;
}
/* --- Production Tabs --- */
.production-tabs {
display: flex;
gap: 8px;
margin: 16px 0 8px 0;
justify-content: center;
}
.prod-tab-btn {
background: #f5f5f5;
border: 1px solid #ccc;
border-radius: 6px 6px 0 0;
padding: 8px 24px;
cursor: pointer;
font-weight: bold;
color: #333;
outline: none;
transition: background 0.2s, color 0.2s;
}
.prod-tab-btn.active {
background: #fff;
color: #0078d7;
border-bottom: 1px solid #fff;
}
.production-tasks-tabbed {
display: flex;
flex-direction: row;
gap: 24px;
background: #fff;
border: 1px solid #ccc;
border-radius: 0 8px 8px 8px;
min-height: 180px;
padding: 16px 8px 8px 8px;
justify-content: space-between;
}
.prod-tab-panel {
flex: 1 1 0;
display: flex;
#voice-footer {
padding: 8px 0;
font-size: 0.95em;
}
#voice-btn {
background: linear-gradient(145deg, #ffffff, #e8e8e8);
border: 2px solid #ffffff;
color: #2c3e50;
border-radius: 50%;
width: 60px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
cursor: pointer;
}
#voice-btn:hover {
background: linear-gradient(145deg, #f8f9fa, #ffffff);
border-color: #a9cce3;
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
color: #1e3a8a;
}
#voice-btn:active {
transform: translateY(0px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
#voice-btn.recording {
background: linear-gradient(145deg, #ff6b6b, #ff5252);
border-color: #ff4444;
color: #ffffff;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 0 0 0 rgba(255, 107, 107, 0.7); }
70% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 0 0 10px rgba(255, 107, 107, 0); }
100% { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 0 0 0 rgba(255, 107, 107, 0); }
}
#voice-mic-icon {
font-size: 1.7em;
}
flex-direction: column;
min-width: 0;
}
.task-list .task-card { margin-bottom: 12px; }
.task-card-footer { margin-top: 8px; }
.task-completed-label { color: #28a745; font-weight: bold; }
/* General Styles */
body {
font-family: 'Roboto', sans-serif;
margin: 0;
background-color: #f0f2f5;
color: #34495e;
display: flex;
flex-direction: column;
min-height: 100vh;
}
/* Scrollbar personalizzato per una migliore UX */
.inventory-table-container::-webkit-scrollbar,
.main-container::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.inventory-table-container::-webkit-scrollbar-track,
.main-container::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
.inventory-table-container::-webkit-scrollbar-thumb,
.main-container::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
}
.inventory-table-container::-webkit-scrollbar-thumb:hover,
.main-container::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}
/* Header */
.header {
background-color: #2E4E6F;
color: #ffffff;
padding: 15px 30px;
align-items: center;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
display: grid;
grid-template-columns: 1fr auto 1fr;
}
.header-left { justify-self: start; }
.header-center { justify-self: center; }
.header-right {
justify-self: end;
display: flex;
align-items: center;
gap: 15px;
}
.logo { font-size: 30px; font-weight: 700; color: #ffffff; letter-spacing: 0.5px; margin: 0; }
.home-button { background: none; border: none; color: #ffffff; font-size: 26px; cursor: pointer; transition: color 0.3s ease; padding: 0; }
.home-button:hover { color: #a9cce3; }
/* Account Menu */
.account-menu { position: relative; display: inline-block; }
.account-button {
background-color: rgba(255,255,255,0.1); color: #ffffff;
border: 1px solid rgba(255,255,255,0.2); padding: 10px 20px;
border-radius: 25px; cursor: pointer; font-size: 16px;
display: flex; align-items: center; transition: background-color 0.3s ease;
}
.account-button:hover { background-color: rgba(255,255,255,0.2); }
.account-button .arrow-down { margin-left: 8px; font-size: 12px; }
.dropdown-content {
display: none; position: absolute; background-color: #ffffff;
min-width: 180px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 100; border-radius: 8px; right: 0; top: 100%;
margin-top: 10px; overflow: hidden; border: 1px solid #e0e0e0;
}
.dropdown-content a { color: #3d3d3d; padding: 12px 16px; text-decoration: none; display: block; transition: all 0.2s ease; }
.dropdown-content a:hover { background-color: #f0f2f5; color: #2E4E6F; }
.account-menu .dropdown-content.show { display: block; }
/* Page Layout */
.main-container {
flex: 1;
padding: 30px;
display: flex;
justify-content: center;
overflow-y: auto;
min-height: calc(100vh - 200px); /* Garantisce spazio sufficiente per lo scroll */
}
.page-section {
width: 100%;
max-width: 1100px;
text-align: center;
box-sizing: border-box;
display: none;
opacity: 0;
padding-bottom: 40px; /* Spazio extra per il footer */
transform: translateY(10px);
transition: opacity 0.5s ease-out, transform 0.5s ease-out;
}
.page-section.active { display: block; opacity: 1; transform: translateY(0); }
#input-detail-page { text-align: left; }
#input-pages-container { position: relative; }
.input-page {
background-color: #ffffff;
border-radius: 12px;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08);
padding: 40px;
display: none;
flex-direction: column;
opacity: 0;
transition: opacity 0.4s ease-out;
}
.input-page.active { display: flex; opacity: 1; z-index: 10; }
/* Page Headers */
.page-header-with-back {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 15px;
margin-bottom: 25px;
border-bottom: 2px solid #e0e0e0;
padding-bottom: 15px;
flex-shrink: 0;
width: 100%;
}
.page-header-with-back h3 {
margin: 0;
color: #2E4E6F;
font-size: 28px;
font-weight: 700;
text-align: left;
}
.back-button {
background-color: #7b8a9b; color: #ffffff; border: none;
padding: 10px 18px; border-radius: 25px; cursor: pointer;
font-size: 16px; display: flex; align-items: center; gap: 8px;
transition: background-color 0.3s ease;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
.back-button:hover { background-color: #5c6a79; }
/* Big Step Buttons */
.step-buttons-grid, .goods-in-buttons-grid {
/* === HOME DASHBOARD 4×2 centrata (solo per la home) === */
#step-selection-page .step-buttons-grid {
/* riempi orizzontalmente ma con un tetto, così si può centrare */
width: 100%;
max-width: 1100px; /* uguale alla max-width della .page-section */
margin-inline: auto; /* ⬅️ QUESTA riga la centra */
/* 4 colonne fisse su desktop (rettangolo 4×2) */
display: grid; /* non inline-grid qui: meglio grid pieno */
grid-template-columns: repeat(4, 1fr);
gap: 25px;
}
/* Tablet: 2 colonne centrate */
@media (max-width: 1200px) {
#step-selection-page .step-buttons-grid {
grid-template-columns: repeat(2, 1fr);
}
}
/* Mobile: 1 colonna centrata */
@media (max-width: 768px) {
#step-selection-page .step-buttons-grid {
grid-template-columns: 1fr;
}
}
display: inline-grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 25px;
width: 100%;
}
.big-step-button {
background-color: #ffffff; border: 1px solid #e0e0e0;
color: #34495e; padding: 25px 20px; border-radius: 8px;
font-size: 18px; font-weight: 700; text-align: center;
cursor: pointer; transition: all 0.3s ease; display: flex;
flex-direction: column; align-items: center; justify-content: center;
min-height: 150px; box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.big-step-button span {
display: block;
text-align: center;
width: 100%;
line-height: 1.2;
}
.big-step-button i {
font-size: 45px;
margin-bottom: 12px;
margin-top: 5px;
color: #2E4E6F;
transition: color 0.3s ease;
display: block;
text-align: center;
width: 100%;
}
.big-step-button:hover {
transform: translateY(-5px); box-shadow: 0 8px 15px rgba(0,0,0,0.1);
border-color: #e67e22;
}
.big-step-button:hover i { color: #e67e22; }
/* Manual Form Styles */
.manual-form { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px; }
.form-group { display: flex; flex-direction: column; }
.form-group.full-width { grid-column: 1 / -1; }
.form-group label { margin-bottom: 8px; font-weight: 600; color: #2E4E6F; font-size: 14px; text-align: left; }
.form-group input, .form-group select, .form-group textarea {
width: 100%; padding: 12px; border: 1px solid #ccc; border-radius: 8px;
background-color: #f8f9fa; font-size: 16px; box-sizing: border-box;
transition: border-color 0.3s, box-shadow 0.3s;
font-family: 'Roboto', sans-serif;
}
.form-group input:focus, .form-group select:focus, .form-group textarea:focus {
outline: none; border-color: #2E4E6F;
box-shadow: 0 0 0 3px rgba(46, 78, 111, 0.2);
}
.submit-btn {
width: 100%; padding: 15px; border: none; border-radius: 8px; background-color: #27ae60;
color: white; font-size: 18px; font-weight: 600; cursor: pointer; transition: all 0.3s;
display: flex; align-items: center; justify-content: center; gap: 10px; margin-top: 10px;
}
.submit-btn:hover { background-color: #219150; transform: translateY(-2px); }
/* --- STILI PAGINE SPECIFICHE --- */
.inventory-controls { display: flex; gap: 15px; margin-bottom: 20px; align-items: center; }
.inventory-controls input[type="search"], .inventory-controls select { padding: 10px; border: 1px solid #ccc; border-radius: 8px; font-size: 14px; }
.inventory-controls input[type="search"] { flex-grow: 1; }
.icon-btn {
background: #f0f2f5; border: 1px solid #ccc; color: #555;
padding: 0; width: 40px; height: 40px; border-radius: 8px;
cursor: pointer; font-size: 16px; transition: all 0.2s ease;
}
.icon-btn:hover { background-color: #e0e0e0; border-color: #aaa; }
.inventory-table-container.collapsed-view {
max-height: 250px;
}
.inventory-table-container {
max-height: 400px;
overflow-y: auto;
border: 1px solid #e0e0e0;
border-radius: 8px;
-webkit-overflow-scrolling: touch;
}
.inventory-table-container table {
width: 100%;
border-collapse: collapse;
}
.inventory-table-container th, .inventory-table-container td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #ecf0f1;
}
.inventory-table-container thead th {
background-color: #ecf0f1;
color: #34495e;
font-weight: 600;
font-size: 14px;
position: sticky;
top: 0;
z-index: 10;
}
.inventory-summary {
margin-top: 20px;
padding: 15px 20px;
background-color: #e9ecef;
border-radius: 8px;
text-align: right;
}
.inventory-summary h4 { margin: 0; font-size: 18px; color: #2c3e50; font-weight: 500; }
.inventory-summary span { font-weight: 700; margin-left: 15px; }
#camera-simulation-page, #voice-input-page-content { align-items: center; text-align: center; }
.camera-preview-container {
width: 100%; max-width: 400px; margin-bottom: 20px;
aspect-ratio: 1 / 1; display: flex; justify-content: center;
align-items: center; background-color: #34495e; border-radius: 10px;
}
.camera-viewfinder { width: 90%; height: 90%; border: 2px dashed #ffffff; display: flex; flex-direction: column; justify-content: center; align-items: center; color: #ffffff; }
.camera-viewfinder i { font-size: 80px; margin-bottom: 15px; }
.camera-controls { display: flex; justify-content: center; gap: 20px; width: 100%; }
.input-btn {
background-color: #e67e22; color: white; border: none;
padding: 12px 25px; border-radius: 8px; cursor: pointer;
font-size: 16px; font-weight: 600; transition: all 0.3s;
display: flex; align-items: center; gap: 8px; white-space: nowrap;
}
.input-btn:hover { background-color: #d35400; transform: translateY(-2px); }
.voice-input-container { display: flex; flex-direction: column; align-items: center; gap: 30px; margin-top: 50px; flex-grow: 1; justify-content: center; text-align: center; }
.voice-mic-container { display: flex; flex-direction: column; align-items: center; gap: 15px; }
#microphone-btn { background-color: #3498db; color: #ffffff; border-radius: 50%; width: 120px; height: 120px; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; box-shadow: 0 5px 15px rgba(0,0,0,0.2); border: none; cursor: pointer; }
#microphone-btn i { font-size: 50px; color: #ffffff; }
#microphone-btn:hover { background-color: #2980b9; transform: scale(1.05); }
#microphone-btn.recording { background-color: #c0392b; animation: pulse-red 1.5s infinite; }
#mic-label { font-size: 16px; font-weight: 600; color: #555; text-transform: uppercase; letter-spacing: 0.5px; }
.output-section { background-color: #eaf6ec; border-left: 5px solid #27ae60; padding: 25px; border-radius: 8px; margin-top: 30px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); text-align: left; flex-shrink: 0; }
.output-section h4 { color: #27ae60; font-size: 20px; margin-top: 0; margin-bottom: 15px; font-weight: 600;}
@keyframes pulse-red { 0% { box-shadow: 0 0 0 0 rgba(192, 57, 43, 0.7); } 70% { box-shadow: 0 0 0 20px rgba(192, 57, 43, 0); } 100% { box-shadow: 0 0 0 0 rgba(192, 57, 43, 0); } }
/* --- STILI DASHBOARD --- */
#kitchen-dashboard-content,
#management-dashboard-content { background-color: transparent; padding: 0; box-shadow: none; }
#kitchen-dashboard-content .page-header-with-back,
#management-dashboard-content .page-header-with-back { padding: 0 0 15px 0; margin: 0 0 20px 0; border-color: #dce1e6; }
.new-dashboard-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.new-dashboard-grid.kitchen-dash { grid-template-columns: 1fr 1fr; }
.new-dash-card { background-color: #ffffff; border-radius: 8px; padding: 20px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); border: 1px solid #e0e0e0; text-align: left; display: flex; flex-direction: column; }
.new-dash-card.full-width { grid-column: 1 / -1; }
.new-dash-card.tall { grid-row: span 2; }
.new-card-title { margin: 0 0 20px 0; font-size: 16px; font-weight: 700; color: #2E4E6F; flex-shrink: 0; }
.kpi-card { text-align: center; justify-content: center; }
.kpi-title { font-size: 14px; color: #7f8c8d; margin: 0 0 5px 0; font-weight: 700; text-transform: uppercase; }
.kpi-amount { font-size: 36px; color: #2c3e50; margin: 0; font-weight: 700; }
.kpi-change { font-size: 14px; }
.kpi-change.up { color: #27ae60; }
.kpi-change.down { color: #c0392b; }
.bar-chart-v { display: flex; justify-content: space-around; align-items: flex-end; width: 100%; flex-grow: 1; }
.bar-wrapper { display: flex; flex-direction: column; align-items: center; height: 100%; justify-content: flex-end; }
.bar-chart-v .bar { width: 25px; background-color: #3498db; border-radius: 4px 4px 0 0; }
.bar-label-month { font-size: 12px; color: #7f8c8d; margin-top: 6px; }
.bar-chart-h { display: flex; flex-direction: column; gap: 15px; flex-grow: 1; justify-content: center; }
.bar-item { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.bar-label { width: 70px; color: #555; }
.bar-bg { flex-grow: 1; background-color: #ecf0f1; border-radius: 4px; height: 20px; }
.bar-fg { height: 100%; border-radius: 4px; }
.bar-perc { font-weight: 700; width: 35px; text-align: right; }
.bar-fg.food { background-color: #f39c12; }
.bar-fg.beverage { background-color: #16a085; }
.bar-fg.dessert { background-color: #27ae60; }
.bar-fg.other { background-color: #7f8c8d; }
.prep-list-table, .hot-items-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.prep-list-table th, .prep-list-table td, .hot-items-table th, .hot-items-table td { text-align: left; padding: 10px 5px; border-bottom: 1px solid #ecf0f1; }
.priority.high { color: #c0392b; font-weight: 600; }
.priority.medium { color: #f39c12; font-weight: 600; }
.status.done { color: #27ae60; }
.status.pending { color: #7f8c8d; }
.inventory-control { display: flex; gap: 20px; }
.inventory-column { width: 50%; }
.inventory-column h5 { margin: 0 0 10px 0; font-size: 14px; color: #2c3e50; }
.dash-list { margin: 0; padding-left: 0; font-size: 14px; color: #555; list-style-type: none;}
.dash-list li { margin-bottom: 5px; }
.inventory-column h5:first-of-type { color: #c0392b; }
.menu-engineering-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
.quadrant { border: 1px solid #ecf0f1; border-radius: 6px; padding: 15px; text-align: center; }
.quadrant h6 { margin: 0 0 8px 0; font-size: 14px; font-weight: 700; }
.quadrant p { font-size: 13px; margin: 5px 0 0 0; }
.quadrant small { font-size: 12px; font-style: italic; color: #7f8c8d; display: block; margin-bottom: 10px; }
.quadrant.star { background-color: #fef9e7; border-color: #f39c12; }
.quadrant.star h6 { color: #f39c12; }
.quadrant.plow-horse { background-color: #eaf6ec; border-color: #27ae60; }
.quadrant.plow-horse h6 { color: #27ae60; }
.quadrant.puzzle { background-color: #ddebf8; border-color: #3498db; }
.quadrant.puzzle h6 { color: #3498db; }
.quadrant.dog { background-color: #f9eaea; border-color: #c0392b; }
.quadrant.dog h6 { color: #c0392b; }
.hot-items-table .margin.good { color: #27ae60; font-weight: 600; }
.hot-items-table .margin.ok { color: #f39c12; font-weight: 600; }
.chart-with-legend { display: flex; flex-direction: column; align-items: center; gap: 20px; flex-grow: 1; justify-content: center; }
.pie-chart { width: 150px; height: 150px; border-radius: 50%; background-image: conic-gradient( #3498db 0% 70%, #f39c12 70% 85%, #16a085 85% 100% ); flex-shrink: 0; }
.channel-list { display: flex; flex-direction: column; gap: 15px; width: 100%;}
.channel-item { display: flex; align-items: center; gap: 10px; }
.channel-icon { font-size: 10px; }
.channel-icon.dine-in { color: #3498db; }
.channel-icon.takeaway { color: #f39c12; }
.channel-icon.delivery { color: #16a085; }
.channel-label { flex-grow: 1; font-weight: 600; color: #34495e; font-size: 16px; }
.channel-perc { font-size: 16px; font-weight: 700; color: #2c3e50; }
.add-ingredient-section {
display: grid;
grid-template-columns: 3fr 1fr 1fr auto;
gap: 15px;
align-items: flex-end;
background-color: #f8f9fa;
padding: 20px;
border-radius: 8px;
margin-bottom: 20px;
}
.ingredients-list-container {
background-color: #fdfdfd;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 20px;
min-height: 100px;
margin-bottom: 20px;
}
#recipe-ingredients-list { list-style: none; padding: 0; margin: 0; }
#recipe-ingredients-list li {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
border-bottom: 1px solid #ecf0f1;
}
#recipe-ingredients-list li:last-child { border-bottom: none; }
.remove-ingredient-btn {
background: none; border: none;
color: #c0392b; cursor: pointer;
font-size: 20px; padding: 0 5px;
}
.add-production-task-section {
display: grid; grid-template-columns: 2fr 1fr 1fr 1fr 1fr; gap: 15px;
align-items: flex-end; background-color: #f8f9fa; padding: 20px;
border-radius: 8px; margin-bottom: 30px; border: 1px solid #e0e0e0;
}
/* Production: metti "Add to List" sulla riga sotto, sotto "Recipe to Prepare" */
.add-production-task-section #add-task-btn{
grid-column: 1 / -1; /* occupa tutta la riga sotto */
grid-row: 2;
width: 100%;
margin-top: 4px;
}
/* === PRODUCTION: mostra i pannelli SOLO nella pagina Production === */
.add-production-task-section,
.production-board,
.completed-tasks-section {
display: none !important; /* nascondi ovunque di default */
visibility: hidden !important;
}
#production-content.input-page.active .add-production-task-section {
display: grid !important; /* mostra SOLO quando #production-content è active */
visibility: visible !important;
}
#production-content.input-page.active .production-board {
display: grid !important;
visibility: visible !important;
}
#production-content.input-page.active .completed-tasks-section {
display: block !important;
visibility: visible !important;
}
.submit-btn.small-btn { padding: 10px 20px; font-size: 16px; height: 46px; }
.production-board { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 30px; }
.production-column h4 { margin-top: 0; padding-bottom: 10px; border-bottom: 2px solid #e0e0e0; color: #2E4E6F; }
.task-list { background-color: #f8f9fa; border-radius: 8px; padding: 15px; min-height: 200px; display: flex; flex-direction: column; gap: 15px; }
.task-card { background-color: #ffffff; border-radius: 6px; padding: 15px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); border-left: 5px solid #3498db; }
.task-card.inprogress { border-left-color: #f39c12; }
.task-card h5 { margin: 0 0 5px 0; font-size: 16px; }
.task-card p { margin: 0 0 15px 0; font-size: 14px; color: #7f8c8d; }
.task-card-footer { display: flex; justify-content: flex-end; }
.task-action-btn { background-color: #3498db; color: white; border: none; border-radius: 6px; padding: 8px 12px; cursor: pointer; font-size: 12px; font-weight: 600; transition: background-color 0.2s; }
.task-card.inprogress .task-action-btn { background-color: #27ae60; }
.task-action-btn:hover { opacity: 0.9; }
.completed-tasks-section { background-color: #f8f9fa; border: 1px solid #e0e0e0; border-radius: 8px; padding: 20px; }
.completed-tasks-section h4 { margin-top: 0; padding-bottom: 10px; border-bottom: 2px solid #e0e0e0; color: #27ae60; }
#completed-tasks-list { list-style: none; padding: 0; margin: 0; font-size: 14px; }
#completed-tasks-list li { padding: 8px 0; border-bottom: 1px dashed #dce1e6; color: #7f8c8d; }
#completed-tasks-list li:last-child { border-bottom: none; }
#completed-tasks-list li strong { color: #34495e; }
/* MEDIA QUERIES */
@media (max-width: 768px) {
.header-center { display: none; }
.page-header-with-back {
grid-template-columns: auto 1fr;
}
.page-header-with-back h3 {
text-align: left;
}
.new-dashboard-grid, .new-dashboard-grid.kitchen-dash, .manual-form, .step-buttons-grid, .goods-in-buttons-grid, .add-production-task-section, .production-board, .add-ingredient-section { grid-template-columns: 1fr; }
.main-container { padding: 10px; }
.inventory-control { flex-direction: column; }
.inventory-column { width: 100%; }
}
/* ==== PATCH LAYOUT-4x2 — dashboard sempre 4x2, responsive ==== */
/* Applica SOLO quando la home è attiva */
#step-selection-page.active .step-buttons-grid {
display: grid !important;
/* Desktop: 4 colonne grandi */
grid-template-columns: repeat(4, minmax(260px, 1fr)) !important;
gap: 32px !important;
align-items: stretch !important;
justify-items: stretch !important;
}
/* Tablet: 2 colonne */
@media (max-width: 1200px) {
#step-selection-page.active .step-buttons-grid {
grid-template-columns: repeat(2, minmax(260px, 1fr)) !important;
}
}
/* Mobile: 1 colonna */
@media (max-width: 640px) {
#step-selection-page.active .step-buttons-grid {
grid-template-columns: 1fr !important;
}
}
/* Mantiene i tile belli grandi */
#step-selection-page.active .big-step-button {
min-height: 160px;
}
/* === PATCH LAYOUT 4x2 — centratura esatta e responsive (append-only) === */
/* Centro il contenitore della home quando è visibile */
#step-selection-page.active {
text-align: center; /* centra gli elementi inline/inline-grid dentro */
}
/* Rendo la griglia un inline-grid (si centra nella riga) e tolgo il centraggio del testo interno */
#step-selection-page.active .step-buttons-grid {
display: inline-grid !important; /* si comporta come un "blocco" centrabile */
text-align: initial !important; /* evita testo centrato dentro i tile */
gap: 32px !important;
/* Desktop: 4 colonne */
grid-template-columns: repeat(4, minmax(260px, 1fr)) !important;
}
/* Tablet: 2 colonne */
@media (max-width: 1200px) {
#step-selection-page.active .step-buttons-grid {
grid-template-columns: repeat(2, minmax(260px, 1fr)) !important;
}
}
/* Mobile: 1 colonna */
@media (max-width: 640px) {
#step-selection-page.active .step-buttons-grid {
grid-template-columns: minmax(240px, 1fr) !important;
}
}
/* Mantiene i tile belli grandi */
#step-selection-page.active .big-step-button{
min-height: 160px;
}
/* === PATCH 1.1.6 — Dashboard 4×2 centrata, responsive (append-only) === */
#step-selection-page.active .step-buttons-grid{
/* lascia la griglia com’è, ma permetti il centraggio “a contenuto” */
width: -webkit-fit-content;
width: -moz-fit-content;
width: fit-content;
margin-left: auto;
margin-right: auto;
/* se qualcuno avesse cambiato l’allineamento dei track, recentra */
justify-content: center;
gap: 32px; /* non cambia i tuoi tile, solo per sicurezza */
}
/* Tablet: 2 colonne centrate */
@media (max-width: 1200px){
#step-selection-page.active .step-buttons-grid{
grid-template-columns: repeat(2, minmax(260px, 1fr));
}
}
/* Mobile: 1 colonna centrata */
@media (max-width: 640px){
#step-selection-page.active .step-buttons-grid{
grid-template-columns: minmax(240px, 1fr);
}
}
/* ===== CHEFCODE PATCH LAYOUT CENTER v2 — dashboard 4×2 centrata ===== */
#step-selection-page.active .step-buttons-grid {
/* 1) centratura a prova di bomba */
width: max-content !important;
margin-left: auto !important;
margin-right: auto !important;
/* 2) usa la tua griglia, ma centrata */
display: grid !important;
gap: 32px !important;
justify-content: center !important;
#step-selection-page.active .step-buttons-grid {
max-width: 1400px; /* o quanto serve per le 4 colonne */
}
width: max-content;
margin-inline: auto;
}
/* Desktop: 4 colonne (resti 4×2, responsive) */
#step-selection-page.active .step-buttons-grid {
grid-template-columns: repeat(4, minmax(260px, 1fr)) !important;
}
/* Tablet: 2 colonne */
@media (max-width: 1200px) {
#step-selection-page.active .step-buttons-grid {
grid-template-columns: repeat(2, minmax(260px, 1fr)) !important;
}
}
/* Mobile: 1 colonna */
@media (max-width: 640px) {
#step-selection-page.active .step-buttons-grid {
grid-template-columns: minmax(240px, 1fr) !important;
}
}
/* Mantieni i tile grandi */
#step-selection-page.active .big-step-button { min-height: 160px; }
/* ===== CHEFCODE PATCH MOBILE-CENTER 1.0 — SOLO HOME, SOLO MOBILE ===== */
@media (max-width: 768px){
/* Home: griglia centrata anche dopo il Back */
#step-selection-page.active .step-buttons-grid{
display: inline-grid !important; /* resta inline per poter essere centrata */
grid-template-columns: 1fr !important; /* 1 colonna su mobile */
gap: 25px !important;
width: auto !important; /* <-- annulla width:100% */
margin-inline: auto !important; /* <-- CENTRA il blocco */
}
}
/* ===== CHEFCODE MOBILE TILE RECT 1.0 — SOLO HOME ===== */
@media (max-width: 768px){
/* 1) Home: una colonna e tile che riempiono tutta la riga */
#step-selection-page.active .step-buttons-grid{
grid-template-columns: 1fr !important;
justify-items: stretch !important; /* i tile si allargano a tutta larghezza */
gap: 20px !important; /* leggermente più compatto su mobile */
}
/* 2) Tile rettangolari (non quadrati), stile “stretched” come nelle funzioni */
#step-selection-page.active .big-step-button{
width: 100% !important;
aspect-ratio: 18 / 7; /* << rende il riquadro rettangolare */
min-height: 140px; /* fallback per browser senza aspect-ratio */
border-radius: 12px;
padding: 20px 18px;
}
/* 3) Icona e testo un filo più “importanti” su mobile */
#step-selection-page.active .big-step-button i{
font-size: 48px;
margin-bottom: 10px;
}
#step-selection-page.active .big-step-button span{
font-size: 18px;
font-weight: 700;
line-height: 1.2;
}
}
/* Logo come sfondo dell'H1 */
.header-center .logo{
background-image: url('logo.svg'); /* <— aggiorna il percorso se serve */
background-repeat: no-repeat;
background-position: center;
background-size: contain;
/* dimensioni del logo: regola qui */
width: clamp(420px, 18vw, 220px);
height: clamp(70px, 5vh, 40px);
/* nascondo il testo mantenendo l'elemento */
color: transparent;
text-indent: -9999px;
overflow: hidden;
display: inline-block;
margin: 0;
}
/* (Opzionale) mostra il logo anche su mobile se attualmente è nascosto */
@media (max-width: 768px){
.header-center{ display:block; }
.header-center .logo{ height: 70px; } /* puoi aumentare/diminuire */
/* LOGO centrato su mobile */
@media (max-width: 768px){
/* 1) la colonna centrale dell’header resta visibile e centrata */
.header-center{
display: block !important;
justify-self: center !important; /* ⬅️ centra la cella della griglia */
text-align: center; /* fallback: centra il contenuto inline */
}
/* 2A) Se usi l'H1 .logo con background-image (metodo CSS-only) */
.header-center .logo{
display: inline-block; /* così text-align:center la centra */
margin: 0 auto; /* doppia sicurezza */
height: 70px; /* <-- regola l’altezza che vuoi */
width: 200px; /* <-- dai anche una larghezza esplicita */
background-position: center;
background-size: contain;
background-repeat: no-repeat;
color: transparent; text-indent: -9999px; overflow: hidden;
}
/* 2B) Se invece usi <img class="brand-logo"> */
.brand-logo{
display: block;
margin: auto; /* centra l’immagine */
height: 70px; /* <-- regola qui */
width: auto;
}
}
#production-content .add-production-task-section #add-task-btn{
grid-column: 1;
grid-row: 2;
width: 100%;
}
}
/* ==== CHEFCODE — PRODUCTION VISIBILITY (final, CSS-only) ==== */
/* Nascondi SEMPRE questi pannelli… */
.add-production-task-section,
.production-board,
.completed-tasks-section {
display: none !important;
visibility: hidden !important;
}
/* …tranne quando stai davvero nella pagina Production attiva */
#production-content.input-page.active .add-production-task-section {
display: grid !important;
visibility: visible !important;
}
#production-content.input-page.active .production-board {
display: grid !important;
visibility: visible !important;
}
#production-content.input-page.active .completed-tasks-section {
display: block !important;
visibility: visible !important;
}
/* Assicura che il riquadro bianco di Production si allarghi per contenere tutto */
#production-content.input-page.active {
display: block !important; /* invece del flex: evita “accorciamenti” strani */
}
/* Evita che stili generici riaccendano i pannelli fuori da Production */
.page-section:not(#production-content) .add-production-task-section,
.page-section:not(#production-content) .production-board,
.page-section:not(#production-content) .completed-tasks-section {
display: none !important;
visibility: hidden !important;
}
/* HACCP Traceability - Expiry Date Alerts */
.expiry-warning {
color: #ff9800;
font-weight: 600;
background: #fff3cd;
padding: 2px 6px;
border-radius: 4px;
}
.expiry-critical {
color: #dc3545;
font-weight: 700;
background: #f8d7da;
padding: 2px 6px;
border-radius: 4px;
animation: pulse-critical 2s infinite;
}
@keyframes pulse-critical {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
/* Delete Button Styling */
.delete-btn {
background: #dc3545;
color: white;
border: none;
border-radius: 4px;
padding: 6px 8px;
cursor: pointer;
font-size: 12px;
transition: all 0.2s ease;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 28px;
height: 28px;
}
.delete-btn:hover {
background: #c82333;
transform: scale(1.05);
}
.delete-btn:active {
transform: scale(0.95);
}
.delete-btn i {
font-size: 10px;
}
/* ===== OCR MODAL STYLES ===== */
.ocr-modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.4);
backdrop-filter: blur(4px);
display: flex;
align-items: center;
justify-content: center;
z-index: 10000;
opacity: 0;
transition: opacity 0.3s ease;
}
.ocr-modal-overlay.show {
opacity: 1;
}
.ocr-modal-content {
background: white;
border-radius: 24px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
max-width: 90vw;
max-height: 90vh;
width: 600px;
overflow: hidden;
transform: scale(0.9) translateY(20px);
transition: transform 0.3s ease;
}
.ocr-modal-overlay.show .ocr-modal-content {
transform: scale(1) translateY(0);
}
.ocr-modal-header {
padding: 24px 24px 16px 24px;
border-bottom: 1px solid #f0f0f0;
position: relative;
}
.ocr-modal-title {
font-size: 1.5em;
font-weight: 600;
color: #2c3e50;
margin: 0 0 8px 0;
}
.ocr-modal-subtitle {
font-size: 0.9em;
color: #7f8c8d;
margin: 0;
line-height: 1.4;
}
.ocr-modal-close {
position: absolute;
top: 20px;
right: 20px;
background: none;
border: none;
font-size: 1.2em;
color: #bdc3c7;
cursor: pointer;
padding: 8px;
border-radius: 50%;
transition: all 0.2s ease;
}
.ocr-modal-close:hover {
background: #f8f9fa;
color: #2c3e50;
}
.ocr-modal-body {
padding: 24px;
min-height: 400px;
}
.ocr-screen {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 400px;
}
/* Selection Screen */
.ocr-option-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
width: 100%;
max-width: 400px;
}
.ocr-option-card {
background: #f8f9fa;
border: 2px solid #e9ecef;
border-radius: 16px;
padding: 32px 24px;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.ocr-option-card:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);
border-color: #0078d7;
}
.ocr-option-card:active {
transform: translateY(-2px);
}
.ocr-option-icon {
font-size: 2.5em;
color: #0078d7;
margin-bottom: 16px;
}
.ocr-option-card h3 {
font-size: 1.1em;
font-weight: 600;
color: #2c3e50;
margin: 0 0 8px 0;
}
.ocr-option-card p {
font-size: 0.9em;
color: #7f8c8d;
margin: 0;
}
/* Camera Screen */
.ocr-camera-container {
width: 100%;
max-width: 500px;
position: relative;
background: #000;
border-radius: 16px;
overflow: hidden;
}
#ocr-camera-preview {
width: 100%;
height: 300px;
object-fit: cover;
}
.ocr-camera-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
pointer-events: none;
}
.ocr-camera-guides {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 200px;
height: 120px;
border: 2px solid rgba(255, 255, 255, 0.8);
border-radius: 8px;
}
.ocr-guide-line {
position: absolute;
background: rgba(255, 255, 255, 0.6);
}
.ocr-guide-line:nth-child(1) {
top: 0;
left: 0;
right: 0;
height: 1px;
}
.ocr-guide-line:nth-child(2) {
bottom: 0;
left: 0;
right: 0;
height: 1px;
}
.ocr-guide-line:nth-child(3) {
top: 0;
left: 0;
bottom: 0;
width: 1px;
}
.ocr-guide-line:nth-child(4) {
top: 0;
right: 0;
bottom: 0;
width: 1px;
}
.ocr-camera-controls {
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 16px;
align-items: center;
}
.ocr-camera-btn {
width: 50px;
height: 50px;
border-radius: 50%;
border: none;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2em;
cursor: pointer;
transition: all 0.2s ease;
}
.ocr-camera-btn.primary {
background: #0078d7;
color: white;
width: 60px;
height: 60px;
font-size: 1.4em;
}
.ocr-camera-btn.secondary {
background: rgba(255, 255, 255, 0.9);
color: #2c3e50;
}
.ocr-camera-btn:hover {
transform: scale(1.1);
}
/* Preview Screen */
.ocr-preview-container {
width: 100%;
max-width: 500px;
text-align: center;
}
#ocr-preview-image {
width: 100%;
max-height: 300px;
object-fit: contain;
border-radius: 12px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
margin-bottom: 24px;
}
.ocr-preview-controls {
display: flex;
gap: 16px;
justify-content: center;
}
.ocr-preview-btn {
padding: 12px 24px;
border-radius: 8px;
border: none;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 8px;
}
.ocr-preview-btn.primary {
background: #0078d7;
color: white;
}
.ocr-preview-btn.secondary {
background: #f8f9fa;
color: #2c3e50;
border: 1px solid #e9ecef;
}
.ocr-preview-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
/* Processing Screen */
.ocr-processing-container {
text-align: center;
padding: 40px 20px;
}
.ocr-spinner {
width: 60px;
height: 60px;
border: 4px solid #f3f3f3;
border-top: 4px solid #0078d7;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 24px auto;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.ocr-processing-container h3 {
font-size: 1.3em;
color: #2c3e50;
margin: 0 0 8px 0;
}
.ocr-processing-container p {
color: #7f8c8d;
margin: 0;
}
/* Results Screen */
.ocr-results-container {
width: 100%;
max-width: 600px;
}
.ocr-results-header {
text-align: center;
margin-bottom: 24px;
}
.ocr-results-header h3 {
font-size: 1.3em;
color: #2c3e50;
margin: 0 0 12px 0;
}
.ocr-results-meta {
display: flex;
gap: 24px;
justify-content: center;
font-size: 0.9em;
color: #7f8c8d;
}
.ocr-results-table-container {
max-height: 300px;
overflow-y: auto;
border: 1px solid #e9ecef;
border-radius: 8px;
margin-bottom: 24px;
}
.ocr-results-table {
width: 100%;
border-collapse: collapse;
font-size: 0.9em;
}
.ocr-results-table th {
background: #f8f9fa;
padding: 12px 8px;
text-align: left;
font-weight: 600;
color: #2c3e50;
border-bottom: 1px solid #e9ecef;
position: sticky;
top: 0;
}
.ocr-results-table td {
padding: 12px 8px;
border-bottom: 1px solid #f0f0f0;
color: #2c3e50;
}
.ocr-results-table tr:hover {
background: #f8f9fa;
}
/* Editable OCR Input Fields */
.ocr-edit-input {
width: 100%;
padding: 6px 8px;
border: 1px solid #e9ecef;
border-radius: 4px;
font-size: 0.9em;
font-family: inherit;
color: #2c3e50;
background: white;
transition: all 0.2s ease;
box-sizing: border-box;
}
.ocr-edit-input:focus {
outline: none;
border-color: #0078d7;
background: #f8f9ff;
box-shadow: 0 0 0 3px rgba(0, 120, 215, 0.1);
}
.ocr-edit-input:hover {
border-color: #ced4da;
}
.ocr-number-input {
text-align: right;
}
.ocr-select-input {
cursor: pointer;
padding-right: 24px;
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
background-repeat: no-repeat;
background-position: right 4px center;
background-size: 16px;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
.ocr-date-input {
cursor: pointer;
}
.ocr-results-table td {
padding: 8px 6px;
border-bottom: 1px solid #f0f0f0;
color: #2c3e50;
vertical-align: middle;
}
.ocr-results-actions {
display: flex;
gap: 16px;
justify-content: center;
}
.ocr-results-btn {
padding: 12px 24px;
border-radius: 8px;
border: none;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 8px;
}
.ocr-results-btn.primary {
background: #28a745;
color: white;
}
.ocr-results-btn.secondary {
background: #f8f9fa;
color: #2c3e50;
border: 1px solid #e9ecef;
}
.ocr-results-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
/* Success Screen */
.ocr-success-container {
text-align: center;
padding: 40px 20px;
}
.ocr-success-icon {
font-size: 4em;
color: #28a745;
margin-bottom: 24px;
}
.ocr-success-container h3 {
font-size: 1.4em;
color: #2c3e50;
margin: 0 0 12px 0;
}
.ocr-success-container p {
color: #7f8c8d;
margin: 0 0 32px 0;
}
.ocr-success-btn {
padding: 16px 32px;
border-radius: 8px;
border: none;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 8px;
margin: 0 auto;
}
.ocr-success-btn.primary {
background: #0078d7;
color: white;
}
.ocr-success-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
/* Quick Add Popup Styles - Minimal Floating Menu */
.quick-add-popup {
position: fixed;
bottom: 80px;
right: 50%;
transform: translateX(50%);
background: white;
border-radius: 12px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
z-index: 10000;
overflow: hidden;
min-width: 200px;
opacity: 0;
transform: translateX(50%) translateY(10px);
transition: opacity 0.2s ease, transform 0.2s ease;
pointer-events: none;
}
.quick-add-popup.show {
opacity: 1;
transform: translateX(50%) translateY(0);
pointer-events: all;
}
.quick-add-popup-option {
display: flex;
align-items: center;
gap: 12px;
padding: 14px 20px;
cursor: pointer;
transition: all 0.2s ease;
border-bottom: 1px solid #f0f0f0;
color: #2c3e50;
font-size: 0.95em;
}
.quick-add-popup-option:last-child {
border-bottom: none;
}
.quick-add-popup-option:hover {
background: #f8f9fa;
color: #0078d7;
}
.quick-add-popup-option:active {
background: #e9ecef;
}
.quick-add-popup-option i {
font-size: 1.1em;
width: 20px;
text-align: center;
color: #7f8c8d;
}
.quick-add-popup-option:hover i {
color: #0078d7;
}
.quick-add-popup-option span {
font-weight: 500;
user-select: none;
}
/* Mobile Responsive for Quick Add Popup */
@media (max-width: 768px) {
.quick-add-popup {
bottom: 70px;
min-width: 180px;
}
.quick-add-popup-option {
padding: 12px 16px;
font-size: 0.9em;
}
}
/* Mobile Responsive */
@media (max-width: 768px) {
.ocr-modal-content {
width: 95vw;
max-height: 95vh;
border-radius: 16px;
}
.ocr-option-grid {
grid-template-columns: 1fr;
gap: 16px;
}
.ocr-option-card {
padding: 24px 20px;
}
.ocr-results-meta {
flex-direction: column;
gap: 8px;
}
.ocr-results-actions {
flex-direction: column;
}
.ocr-camera-controls {
bottom: 16px;
}
.ocr-camera-btn {
width: 45px;
height: 45px;
font-size: 1.1em;
}
.ocr-camera-btn.primary {
width: 55px;
height: 55px;
font-size: 1.3em;
}
}
/* ============================================
AI TOOLBAR FOOTER - Design Only
============================================ */
/* Main container adjustment for footer space */
.main-container {
padding-bottom: 80px; /* Space for fixed footer */
}
/* AI Toolbar Footer */
.ai-toolbar-footer {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background-color: #2E4E6F;
border-top: 1px solid #1f3c5d;
padding: 10px 20px;
z-index: 1000;
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
}
/* Toolbar container - flexbox layout */
.ai-toolbar-container {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
max-width: 1200px;
margin: 0 auto;
}
/* Command input field */
.ai-command-input {
flex: 1;
max-width: 70%;
background: #ffffff;
border: none;
border-radius: 8px;
padding: 12px 16px;
font-size: 0.95em;
font-family: 'Roboto', sans-serif;
color: #2c3e50;
outline: none;
transition: box-shadow 0.3s ease;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
.ai-command-input::placeholder {
color: #95a5a6;
font-style: italic;
}
.ai-command-input:focus {
box-shadow: 0 2px 8px rgba(31, 60, 93, 0.15);
}
/* Toolbar buttons - shared styles */
.ai-toolbar-btn {
width: 48px;
height: 48px;
border-radius: 50%;
border: none;
background-color: #1f3c5d;
color: #ffffff;
font-size: 1.2em;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
box-shadow: 0 2px 6px rgba(31, 60, 93, 0.2);
}
.ai-toolbar-btn:hover {
background-color: #2e4e6f;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(31, 60, 93, 0.3);
}
.ai-toolbar-btn:active {
transform: translateY(0);
box-shadow: 0 2px 4px rgba(31, 60, 93, 0.2);
}
.ai-toolbar-btn i {
pointer-events: none;
}
/* Send button specific */
.ai-send-btn {
/* Uses shared styles */
}
/* Voice button specific */
.ai-voice-btn {
/* Uses shared styles */
}
.ai-voice-btn.listening {
background-color: #e74c3c !important;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0%, 100% {
box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7);
}
50% {
box-shadow: 0 0 0 10px rgba(231, 76, 60, 0);
}
}
/* ============================================================================
AI ASSISTANT CHAT INTERFACE
============================================================================ */
/* Chat Overlay */
.ai-chat-overlay {
position: fixed;
top: 0;
right: 0;
bottom: 0;
width: 420px;
background: linear-gradient(135deg, #1E2A3A 0%, #2d3e52 100%);
z-index: 9999;
display: flex;
flex-direction: column;
box-shadow: -4px 0 20px rgba(0, 0, 0, 0.3);
animation: slideInRight 0.3s ease;
}
@keyframes slideInRight {
from {
transform: translateX(100%);
}
to {
transform: translateX(0);
}
}
.ai-chat-container {
display: flex;
flex-direction: column;
height: 100%;
}
.ai-chat-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
border-bottom: 2px solid rgba(0, 119, 182, 0.3);
background: rgba(0, 0, 0, 0.2);
}
.ai-chat-header h3 {
margin: 0;
color: white;
font-size: 1.3em;
font-weight: 600;
}
.ai-chat-header p {
margin: 4px 0 0 0;
color: #94a3b8;
font-size: 0.85em;
}
.ai-chat-close {
background: rgba(255, 255, 255, 0.1);
border: none;
border-radius: 8px;
width: 32px;
height: 32px;
color: white;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
}
.ai-chat-close:hover {
background: rgba(255, 255, 255, 0.2);
}
/* Chat Messages */
.ai-chat-messages {
flex: 1;
overflow-y: auto;
padding: 20px;
display: flex;
flex-direction: column;
gap: 12px;
}
.ai-message {
display: flex;
animation: messageSlideIn 0.3s ease;
}
@keyframes messageSlideIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.ai-message-user {
justify-content: flex-end;
}
.ai-message-assistant {
justify-content: flex-start;
}
.ai-message-bubble {
max-width: 80%;
padding: 12px 16px;
border-radius: 16px;
font-size: 0.95em;
line-height: 1.5;
word-wrap: break-word;
}
.ai-message-user .ai-message-bubble {
background: linear-gradient(135deg, #0077B6 0%, #00B4D8 100%);
color: white;
border-bottom-right-radius: 4px;
}
.ai-message-assistant .ai-message-bubble {
background: rgba(255, 255, 255, 0.95);
color: #1E2A3A;
border-bottom-left-radius: 4px;
}
/* Typing Indicator */
.ai-typing-indicator {
display: flex;
gap: 4px;
padding: 4px 0;
}
.ai-typing-indicator span {
width: 8px;
height: 8px;
background: #94a3b8;
border-radius: 50%;
animation: typing 1.4s infinite;
}
.ai-typing-indicator span:nth-child(2) {
animation-delay: 0.2s;
}
.ai-typing-indicator span:nth-child(3) {
animation-delay: 0.4s;
}
@keyframes typing {
0%, 60%, 100% {
transform: translateY(0);
}
30% {
transform: translateY(-10px);
}
}
/* Chat Footer */
.ai-chat-footer {
padding: 16px 20px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.2);
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
}
.ai-chat-voice-btn {
width: 56px;
height: 56px;
border-radius: 50%;
border: 2px solid rgba(0, 119, 182, 0.5);
background: linear-gradient(135deg, #0077B6 0%, #00B4D8 100%);
color: white;
font-size: 1.4em;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(0, 119, 182, 0.3);
}
.ai-chat-voice-btn:hover {
transform: scale(1.05);
box-shadow: 0 6px 20px rgba(0, 119, 182, 0.5);
}
.ai-chat-voice-btn:active {
transform: scale(0.95);
}
.ai-chat-voice-btn.listening {
background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
border-color: rgba(231, 76, 60, 0.8);
animation: voicePulse 1.5s infinite;
}
@keyframes voicePulse {
0%, 100% {
box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7);
}
50% {
box-shadow: 0 0 0 15px rgba(231, 76, 60, 0);
}
}
.ai-chat-hint {
margin: 0;
color: #94a3b8;
font-size: 0.85em;
text-align: center;
font-style: italic;
}
/* ============================================================================
CONFIRMATION DIALOG
============================================================================ */
.ai-confirmation-dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.75);
display: flex;
align-items: center;
justify-content: center;
z-index: 10001;
backdrop-filter: blur(4px);
animation: fadeIn 0.2s ease;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.ai-confirmation-content {
background: white;
border-radius: 16px;
padding: 32px;
max-width: 500px;
width: 90%;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);
animation: scaleIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes scaleIn {
from {
transform: scale(0.9);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
.ai-confirmation-icon {
font-size: 3em;
text-align: center;
margin-bottom: 16px;
}
.ai-confirmation-message {
color: #1E2A3A;
font-size: 1.1em;
line-height: 1.6;
margin-bottom: 24px;
text-align: center;
}
.ai-confirmation-actions {
display: flex;
gap: 12px;
justify-content: center;
}
/* ============================================================================
SEARCH RESULTS OVERLAY
============================================================================ */
.ai-search-results-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.75);
display: flex;
align-items: center;
justify-content: center;
z-index: 10000;
backdrop-filter: blur(6px);
padding: 20px;
animation: fadeIn 0.3s ease;
}
.ai-search-container {
background: white;
border-radius: 16px;
max-width: 1000px;
width: 100%;
max-height: 80vh;
display: flex;
flex-direction: column;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);
}
.ai-search-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 24px;
border-bottom: 2px solid #e2e8f0;
}
.ai-search-header h3 {
margin: 0;
color: #1E2A3A;
font-size: 1.5em;
font-weight: 600;
}
.ai-search-close {
background: #f8fafc;
border: none;
border-radius: 8px;
width: 36px;
height: 36px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
}
.ai-search-close:hover {
background: #e2e8f0;
}
.ai-search-grid {
padding: 24px;
overflow-y: auto;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
/* Recipe Cards in Search */
.ai-recipe-card {
background: white;
border: 2px solid #e2e8f0;
border-radius: 12px;
overflow: hidden;
transition: all 0.3s ease;
cursor: pointer;
}
.ai-recipe-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 20px rgba(0, 119, 182, 0.15);
border-color: #0077B6;
}
.ai-recipe-image {
width: 100%;
height: 150px;
object-fit: cover;
background: linear-gradient(135deg, #1E2A3A 0%, #0077B6 100%);
}
.ai-recipe-info {
padding: 16px;
}
.ai-recipe-info h4 {
margin: 0 0 8px 0;
color: #1E2A3A;
font-size: 1.1em;
font-weight: 600;
}
.ai-recipe-cuisine {
color: #64748b;
font-size: 0.9em;
margin: 0 0 12px 0;
}
/* ============================================================================
AI BUTTONS
============================================================================ */
.ai-btn {
padding: 10px 20px;
border: none;
border-radius: 8px;
font-size: 1em;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
font-family: 'Poppins', 'Inter', sans-serif;
}
.ai-btn-primary {
background: linear-gradient(135deg, #0077B6 0%, #00B4D8 100%);
color: white;
box-shadow: 0 4px 12px rgba(0, 119, 182, 0.2);
}
.ai-btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0, 119, 182, 0.35);
}
.ai-btn-secondary {
background: white;
color: #1E2A3A;
border: 2px solid #e2e8f0;
}
.ai-btn-secondary:hover {
background: #f8fafc;
}
.ai-import-btn {
width: 100%;
padding: 8px 16px;
font-size: 0.9em;
}
/* ============================================================================
TOAST NOTIFICATIONS
============================================================================ */
.ai-toast {
position: fixed;
bottom: 100px;
left: 50%;
transform: translateX(-50%) translateY(100px);
background: #1E2A3A;
color: white;
padding: 16px 24px;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
z-index: 10002;
opacity: 0;
transition: all 0.3s ease;
font-weight: 500;
}
.ai-toast.show {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
.ai-toast-success {
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
}
.ai-toast-error {
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
}
/* ============================================================================
RESPONSIVE
============================================================================ */
@media (max-width: 768px) {
.ai-chat-overlay {
width: 100%;
}
.ai-search-grid {
grid-template-columns: 1fr;
}
.ai-confirmation-content {
padding: 24px;
}
}
/* Upload button specific */
.ai-upload-btn {
/* Uses shared styles */
}
/* Mobile responsive adjustments */
@media (max-width: 768px) {
.ai-toolbar-footer {
padding: 8px 12px;
}
.ai-toolbar-container {
gap: 8px;
}
.ai-command-input {
max-width: 75%;
padding: 10px 14px;
font-size: 0.9em;
}
.ai-toolbar-btn {
width: 44px;
height: 44px;
font-size: 1.1em;
}
}
@media (max-width: 480px) {
.ai-command-input {
max-width: 65%;
font-size: 0.85em;
}
.ai-toolbar-btn {
width: 40px;
height: 40px;
font-size: 1em;
}
}
/* ============================================
RECIPE CATALOGUE - MODERN CARD DESIGN
============================================ */
.recipe-catalogue-container {
padding: 30px;
max-width: 1400px;
margin: 0 auto;
background: #f8fafc;
min-height: 60vh;
}
/* Modern Search Bar */
.recipe-search-wrapper {
position: relative;
max-width: 600px;
margin: 0 auto 30px;
}
.recipe-search-wrapper .search-icon {
position: absolute;
left: 18px;
top: 50%;
transform: translateY(-50%);
color: #94a3b8;
font-size: 1.1em;
pointer-events: none;
}
.recipe-search-input {
width: 100%;
padding: 14px 20px 14px 50px;
border: 2px solid #e2e8f0;
border-radius: 12px;
font-size: 1em;
font-family: 'Roboto', sans-serif;
background: white;
transition: all 0.3s ease;
outline: none;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
}
.recipe-search-input:focus {
border-color: #0ea5e9;
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.15);
}
.recipe-search-input::placeholder {
color: #94a3b8;
}
/* Recipe Cards Grid */
.recipe-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
gap: 24px;
margin-top: 20px;
}
/* Individual Recipe Card */
.recipe-card {
background: white;
border-radius: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
overflow: hidden;
transition: all 0.3s ease;
border: 1px solid #e2e8f0;
display: flex;
flex-direction: column;
}
.recipe-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
border-color: #0ea5e9;
}
/* Card Header */
.recipe-card-header {
padding: 20px 24px;
background: linear-gradient(135deg, #1e293b 0%, #334155 100%);
color: white;
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
}
.recipe-card-title {
margin: 0;
font-size: 1.25em;
font-weight: 600;
color: white;
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.recipe-card-badge {
background: rgba(255, 255, 255, 0.2);
color: white;
padding: 6px 12px;
border-radius: 20px;
font-size: 0.85em;
font-weight: 500;
white-space: nowrap;
backdrop-filter: blur(10px);
}
/* Card Body */
.recipe-card-body {
padding: 20px 24px;
flex: 1;
display: flex;
flex-direction: column;
gap: 16px;
}
.recipe-ingredients-section h5 {
margin: 0 0 12px 0;
font-size: 0.95em;
font-weight: 600;
color: #475569;
display: flex;
align-items: center;
gap: 8px;
}
.recipe-ingredients-section h5 i {
color: #0ea5e9;
font-size: 0.9em;
}
.recipe-ingredients-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 8px;
max-height: 180px;
overflow-y: auto;
}
.recipe-ingredients-list li {
padding: 8px 12px;
background: #f8fafc;
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.9em;
border-left: 3px solid #0ea5e9;
}
.ing-name {
color: #1e293b;
font-weight: 500;
flex: 1;
}
.ing-qty {
color: #64748b;
font-weight: 600;
font-size: 0.95em;
margin-left: 12px;
white-space: nowrap;
}
/* Yield Section */
.recipe-yield-section {
padding: 12px 16px;
background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);
border-radius: 10px;
display: flex;
align-items: center;
gap: 10px;
border: 1px solid #bae6fd;
}
.recipe-yield-section i {
color: #0ea5e9;
font-size: 1.1em;
}
.yield-label {
font-weight: 600;
color: #0c4a6e;
font-size: 0.9em;
}
.yield-value {
color: #0369a1;
font-weight: 700;
font-size: 1em;
}
/* Card Footer */
.recipe-card-footer {
padding: 16px 24px;
background: #f8fafc;
border-top: 1px solid #e2e8f0;
display: flex;
gap: 12px;
justify-content: flex-end;
}
.recipe-card-btn {
padding: 10px 20px;
border: none;
border-radius: 8px;
font-size: 0.9em;
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 6px;
font-family: 'Roboto', sans-serif;
}
.recipe-card-btn i {
font-size: 0.9em;
}
.edit-recipe-btn {
background: #0ea5e9;
color: white;
}
.edit-recipe-btn:hover {
background: #0284c7;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.3);
}
.delete-recipe-btn {
background: white;
color: #dc2626;
border: 2px solid #fecaca;
}
.delete-recipe-btn:hover {
background: #fef2f2;
border-color: #dc2626;
transform: translateY(-1px);
}
/* Empty State */
.recipe-empty-state {
text-align: center;
padding: 80px 20px;
background: white;
border-radius: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
margin: 20px auto;
max-width: 500px;
}
.recipe-empty-state i {
font-size: 4em;
color: #cbd5e1;
margin-bottom: 20px;
display: block;
}
.recipe-empty-state h3 {
margin: 0 0 12px 0;
color: #1e293b;
font-size: 1.5em;
}
.recipe-empty-state p {
color: #64748b;
font-size: 1.1em;
margin: 0 0 24px 0;
}
.empty-state-btn {
padding: 14px 28px;
background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%);
color: white;
border: none;
border-radius: 10px;
font-size: 1em;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 8px;
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.3);
}
.empty-state-btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(14, 165, 233, 0.4);
}
/* Responsive Design */
@media (max-width: 1024px) {
.recipe-cards-grid {
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
}
}
@media (max-width: 768px) {
.recipe-catalogue-container {
padding: 20px 15px;
}
.recipe-cards-grid {
grid-template-columns: 1fr;
gap: 16px;
}
.recipe-card-header {
padding: 16px 20px;
}
.recipe-card-body {
padding: 16px 20px;
}
.recipe-card-footer {
padding: 12px 20px;
flex-direction: column;
}
.recipe-card-btn {
width: 100%;
justify-content: center;
}
.recipe-search-input {
font-size: 16px; /* Prevents zoom on mobile */
}
.recipe-ingredients-list {
max-height: 150px;
}
}
@media (max-width: 480px) {
.recipe-card-title {
font-size: 1.1em;
}
.recipe-search-wrapper {
margin-bottom: 20px;
}
.recipe-empty-state {
padding: 60px 20px;
}
.recipe-empty-state i {
font-size: 3em;
}
}
/* ============================================================================
WEB RECIPE SEARCH MODAL STYLES - ChefCode Theme
============================================================================ */
/* Modal Overlay */
.web-recipe-modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.75);
backdrop-filter: blur(6px);
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
animation: fadeInOverlay 0.3s ease;
}
@keyframes fadeInOverlay {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Modal Content */
.web-recipe-modal-content {
background: white;
border-radius: 16px;
max-width: 1200px;
width: 100%;
max-height: 90vh;
display: flex;
flex-direction: column;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1), 0 2px 10px rgba(0, 0, 0, 0.05);
animation: modalSlideIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
@keyframes modalSlideIn {
from {
transform: scale(0.9) translateY(20px);
opacity: 0;
}
to {
transform: scale(1) translateY(0);
opacity: 1;
}
}
/* Modal Header */
.web-recipe-modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 32px;
border-bottom: 1px solid #e5e7eb;
background: linear-gradient(135deg, #1E2A3A 0%, #2d3e52 100%);
border-radius: 16px 16px 0 0;
position: relative;
}
.web-recipe-modal-header::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, #0077B6 0%, #00B4D8 100%);
}
.web-recipe-modal-title {
margin: 0;
font-size: 1.5em;
color: white;
font-weight: 600;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
.web-recipe-modal-subtitle {
font-size: 0.55em;
color: #94a3b8;
font-weight: 400;
margin-top: 4px;
letter-spacing: 0.3px;
}
.web-recipe-modal-close {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 10px;
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: white;
font-size: 1.2em;
transition: all 0.2s ease;
flex-shrink: 0;
}
.web-recipe-modal-close:hover {
background: rgba(255, 255, 255, 0.2);
transform: scale(1.05);
}
/* Modal Body */
.web-recipe-modal-body {
padding: 32px;
overflow-y: auto;
flex: 1;
background: #fafbfc;
}
/* Screens */
.web-recipe-screen {
display: none;
}
.web-recipe-screen.active {
display: block;
}
/* Search Container */
.web-recipe-search-container {
margin-bottom: 32px;
}
.web-recipe-search-box {
display: flex;
gap: 12px;
margin-bottom: 16px;
}
.web-recipe-search-input {
flex: 1;
padding: 16px 20px;
border: 2px solid #e2e8f0;
border-radius: 12px;
font-size: 1.05em;
transition: all 0.3s ease;
font-family: 'Poppins', 'Inter', sans-serif;
font-weight: 400;
background: white;
color: #1E2A3A;
}
.web-recipe-search-input::placeholder {
color: #94a3b8;
}
.web-recipe-search-input:focus {
outline: none;
border-color: #0077B6;
box-shadow: 0 0 0 4px rgba(0, 119, 182, 0.1);
background: white;
}
.web-recipe-search-button {
padding: 16px 32px;
background: linear-gradient(135deg, #0077B6 0%, #00B4D8 100%);
color: white;
border: none;
border-radius: 12px;
font-size: 1.05em;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 8px;
box-shadow: 0 4px 12px rgba(0, 119, 182, 0.2);
}
.web-recipe-search-button:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0, 119, 182, 0.35);
background: linear-gradient(135deg, #005f8f 0%, #0099b8 100%);
}
.web-recipe-search-button:active {
transform: translateY(0);
}
/* Loading Spinner */
.web-recipe-loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
text-align: center;
}
.web-recipe-spinner {
width: 50px;
height: 50px;
border: 4px solid #e2e8f0;
border-top: 4px solid #0077B6;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 20px;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* Results Grid */
.web-recipe-results-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 24px;
margin-top: 24px;
}
.web-recipe-card {
background: white;
border: 2px solid #e2e8f0;
border-radius: 16px;
overflow: hidden;
transition: all 0.3s ease;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.web-recipe-card:hover {
transform: translateY(-6px);
box-shadow: 0 12px 32px rgba(0, 119, 182, 0.15);
border-color: #0077B6;
}
.web-recipe-card-image {
width: 100%;
height: 200px;
object-fit: cover;
background: linear-gradient(135deg, #1E2A3A 0%, #0077B6 100%);
}
.web-recipe-card-content {
padding: 20px;
}
.web-recipe-card-title {
font-size: 1.3em;
font-weight: 600;
color: #1E2A3A;
margin: 0 0 12px 0;
line-height: 1.3;
}
.web-recipe-card-meta {
display: flex;
gap: 16px;
margin-bottom: 12px;
}
.web-recipe-card-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
background: #f8f9fa;
border-radius: 8px;
font-size: 0.9em;
color: #666;
}
.web-recipe-card-actions {
display: flex;
gap: 12px;
margin-top: 16px;
}
/* Empty State */
.web-recipe-empty-state {
text-align: center;
padding: 80px 20px;
color: #999;
}
.web-recipe-empty-state i {
font-size: 4em;
color: #ddd;
margin-bottom: 20px;
}
.web-recipe-empty-state h3 {
font-size: 1.5em;
color: #666;
margin: 0 0 12px 0;
}
/* Detail Screen */
.web-recipe-detail-container {
max-width: 900px;
margin: 0 auto;
}
.web-recipe-back-btn {
background: #f8f9fa;
border: 1px solid #e0e0e0;
padding: 12px 20px;
border-radius: 10px;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 1em;
color: #666;
margin-bottom: 24px;
transition: all 0.2s;
}
.web-recipe-back-btn:hover {
background: #e9ecef;
color: #333;
}
#web-recipe-detail-content {
background: #f8f9fa;
padding: 32px;
border-radius: 16px;
margin-bottom: 24px;
}
.web-recipe-detail-image {
width: 100%;
max-height: 400px;
object-fit: cover;
border-radius: 12px;
margin-bottom: 24px;
}
.web-recipe-detail-title {
font-size: 2.2em;
font-weight: 700;
color: #2c3e50;
margin: 0 0 16px 0;
}
.web-recipe-detail-meta {
display: flex;
gap: 20px;
margin-bottom: 32px;
flex-wrap: wrap;
}
.web-recipe-detail-section {
margin-bottom: 32px;
}
.web-recipe-detail-section h4 {
font-size: 1.4em;
color: #0077B6;
margin: 0 0 16px 0;
font-weight: 600;
}
.web-recipe-ingredients-list {
list-style: none;
padding: 0;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 12px;
}
.web-recipe-ingredients-list li {
background: white;
padding: 12px 16px;
border-radius: 8px;
border-left: 4px solid #0077B6;
display: flex;
align-items: center;
gap: 10px;
}
.web-recipe-ingredients-list li i {
color: #0077B6;
}
.web-recipe-instructions {
background: white;
padding: 24px;
border-radius: 12px;
line-height: 1.8;
color: #555;
white-space: pre-wrap;
}
.web-recipe-detail-actions {
display: flex;
justify-content: center;
gap: 16px;
}
/* Buttons */
.web-recipe-btn {
padding: 14px 32px;
border: none;
border-radius: 12px;
font-size: 1.05em;
font-weight: 600;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 10px;
transition: all 0.3s ease;
font-family: 'Poppins', 'Inter', sans-serif;
}
.web-recipe-btn.primary {
background: linear-gradient(135deg, #0077B6 0%, #00B4D8 100%);
color: white;
box-shadow: 0 4px 12px rgba(0, 119, 182, 0.2);
}
.web-recipe-btn.primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0, 119, 182, 0.35);
background: linear-gradient(135deg, #005f8f 0%, #0099b8 100%);
}
.web-recipe-btn.secondary {
background: white;
color: #1E2A3A;
border: 2px solid #e2e8f0;
}
.web-recipe-btn.secondary:hover {
background: #f8fafc;
border-color: #cbd5e1;
}
/* Ingredient Mapping */
.web-recipe-mapping-container {
max-width: 800px;
margin: 0 auto;
}
.web-recipe-mapping-subtitle {
text-align: center;
color: #64748b;
font-size: 1.1em;
margin-bottom: 32px;
line-height: 1.6;
}
.web-recipe-mapping-legend {
display: flex;
justify-content: center;
gap: 24px;
margin-bottom: 32px;
flex-wrap: wrap;
padding: 20px;
background: white;
border-radius: 12px;
border: 2px solid #e2e8f0;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.mapping-legend-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 0.95em;
color: #666;
}
.mapping-badge {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 4px;
}
.mapping-badge.exact {
background: #10b981;
}
.mapping-badge.substitute {
background: #f59e0b;
}
.mapping-badge.missing {
background: #ef4444;
}
.web-recipe-mapping-list {
display: flex;
flex-direction: column;
gap: 16px;
margin-bottom: 32px;
}
.web-recipe-mapping-item {
background: white;
border: 2px solid #f0f0f0;
border-radius: 12px;
padding: 20px;
display: flex;
align-items: center;
gap: 16px;
transition: all 0.3s;
}
.web-recipe-mapping-item.exact {
border-left: 4px solid #10b981;
background: linear-gradient(to right, rgba(16, 185, 129, 0.05), white);
}
.web-recipe-mapping-item.substitute {
border-left: 4px solid #f59e0b;
background: linear-gradient(to right, rgba(245, 158, 11, 0.05), white);
}
.web-recipe-mapping-item.missing {
border-left: 4px solid #ef4444;
background: linear-gradient(to right, rgba(239, 68, 68, 0.05), white);
}
.mapping-item-badge {
flex-shrink: 0;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.3em;
}
.mapping-item-badge.exact {
background: #10b981;
color: white;
}
.mapping-item-badge.substitute {
background: #f59e0b;
color: white;
}
.mapping-item-badge.missing {
background: #ef4444;
color: white;
}
.mapping-item-content {
flex: 1;
}
.mapping-item-recipe {
font-weight: 700;
color: #2c3e50;
font-size: 1.1em;
margin-bottom: 4px;
}
.mapping-item-inventory {
color: #666;
font-size: 0.95em;
}
.mapping-item-note {
margin-top: 8px;
padding: 8px 12px;
background: rgba(255, 255, 255, 0.7);
border-radius: 6px;
font-size: 0.9em;
color: #555;
font-style: italic;
}
.web-recipe-mapping-actions {
display: flex;
justify-content: center;
gap: 16px;
}
/* Success Screen */
.web-recipe-success-container {
text-align: center;
padding: 60px 20px;
max-width: 600px;
margin: 0 auto;
}
.web-recipe-success-icon {
font-size: 5em;
color: #10b981;
margin-bottom: 24px;
animation: successPop 0.5s ease;
}
@keyframes successPop {
0% {
transform: scale(0);
opacity: 0;
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
opacity: 1;
}
}
.web-recipe-success-container h3 {
font-size: 1.8em;
color: #1E2A3A;
margin: 0 0 12px 0;
font-weight: 600;
}
.web-recipe-success-container p {
font-size: 1.1em;
color: #64748b;
margin-bottom: 32px;
line-height: 1.6;
}
/* Responsive */
@media (max-width: 768px) {
.web-recipe-modal-content {
max-height: 95vh;
border-radius: 12px;
}
.web-recipe-modal-header {
padding: 16px 20px;
}
.web-recipe-modal-title {
font-size: 1.2em;
}
.web-recipe-modal-body {
padding: 24px 20px;
}
.web-recipe-results-grid {
grid-template-columns: 1fr;
gap: 16px;
}
.web-recipe-search-box {
flex-direction: column;
}
.web-recipe-search-button {
width: 100%;
justify-content: center;
}
.web-recipe-detail-meta {
flex-direction: column;
gap: 12px;
}
.web-recipe-ingredients-list {
grid-template-columns: 1fr;
}
.web-recipe-mapping-legend {
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
}